我目前正在开发一个应用程序,使捕获视频从使用Qt Designer工具和v412和ffmpeg的库C + +,来捕捉图像有使用LIB V4L2没有问题,并且在Linux上的一个摄像头因为这一张照片好了,我将它发送到基于FFMPEG库编码器,最初该编码器创建的视频文件,并将其接收图像编码它在这个文件中,我的问题是:编码的正常进行,但是如果我开始播放录制的视频文件后,与普通速度相比,速度似乎会加快!那么有什么清楚的,问题是在视频编码方面,我的问题是 ,有没有一种方法或函数来管理ffmpeg编码速度图片? 感谢您的帮助。ffmpeg的高速编码问题
回答
当创建与FFmpeg的自定义编码的视频见http://code.google.com/p/qtffmpegwrapper/,您实际上需要设置PTS对被写入到输出文件中的每个AVPacket。设置AVCodecContext的time_base只会告诉容器想要什么。该PTS(显示时间标记)告诉解码器(当您查看您的影片)时,实际显示特定帧。
例如:
我有一个AVFrame,我从FFmpeg的的V4L2部分得到。首先,使用av_picture_copy制作此图像的副本更安全。 (因此,编码器不看在AVFrame结构的所有额外的信息。)
av_picture_copy((AVPicture*) picture, (AVPicture*) pFrame, c->pix_fmt, c->width, c->height);
picture->pts = numFrames;
现在设置基于编码的帧
pDestFrame->pts = numFrames;
的NUM的PTS现在编码
numEncodedBytes = avcodec_encode_video(AVCodecCtx, buffer, bufferSize, pDestFrame);
NOW创建一个AVPacket并在重新调整后重新设置时间戳
AVPacket pkt;
av_init_packet(&pkt);
pkt.pts = av_rescale_q(c->coded_frame->pts, c->time_base, mpVideoStr->time_base);
if (c->coded_frame->key_frame) pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = mpVideoStr->index;
pkt.data = outbuf;
pkt.size = out_size;
最后,你可以写数据包从
av_write_frame(formatCtx, &pkt);
我知道这个工程的H264视频编码,但我不是100%肯定它适用于其他类型的视频,因为我只关心H264当我写这个。
我认为你需要给你的照片添加时间戳。
FFMpeg将尽可能快地进行编码/解码。你需要自己写一个同步。通常在视频解码和播放时,您的时间戳会附加到您的帧中,或者至少您可以使用音频时钟和帧速率创建一些时间戳。
但这很大程度上取决于您想要如何同步以及如何实现它。
也许FFmpeg中的tutorial给你一些additionl暗示
我已经看过这个教程,但是这个专门用于解码功能,我的解码器工作正常,更重要的是,我只是捕获视频流,没有音频,使它更容易,这就是为什么我强烈认为问题是在解码器,目前,我正在修改编码器中的点数,特别是formatcontext,数据包...... – amrouch 2011-05-03 10:33:08
您可以在tut中看到如何完成同步。在这种情况下,视频如何同步到音频。在你的情况下,我假设没有音频。所以你需要确定视频帧需要显示多长时间。例如,通过对每个帧使用帧速率或持续时间。 – mkaes 2011-05-03 11:34:52
对不起,我的意思是问题出在“ENCODER”,因为解码器工作正常,如果我通过播放器(如vlc)播放录制的视频,它似乎也加速了,所以问题出现在编码器中。 – amrouch 2011-05-03 12:02:45
当您创建的ffmpeg的文件,你必须指定的帧速率 取决于您所使用的库,但寻找像
pCodecContext->time_base.den = frames_per_second;
pCodecContext->time_base.num = 1;
否则如果要生成从摄像头10-15fps但该文件默认为30fps它会播放快。
了Qt的ffmpeg的包装
感谢您的重播,我目前正在使用Qt ffmpeg包装器中的一些函数,就像在编码,解码中一样,而且我刚刚更改了** pCodecContext-> time_base.den **的值,即使我重复1!但仍然是相同的问题 – amrouch 2011-05-03 09:16:20
我怎么知道从我的摄像头产生多少fps? – amrouch 2011-05-04 13:29:14
将它设置在您的摄像头设置中,从之前的运行中进行测量。或者,如果你真的很挑剔地全速运行网络摄像头,但要丢弃图像来减少它,每“n”毫秒就只剩下一个新的帧。最好的选择只是猜测它是10-15 - directshow amcap示例或摄像头查看器应用程序会显示给您 – 2011-05-04 15:16:13
- 1. ffmpeg编码器流问题
- 2. iphone编码与ffmpeg问题
- 3. 如何提高ffmpeg中的视频编码速度?
- 4. ffmpeg - 编译问题与g ++
- 5. 编码挑战速度问题
- 6. PHP FFmpeg视频宽高比问题
- 7. ffmpeg的问题
- 8. ffmpeg的问题
- 9. Symfony2高速缓存问题
- 10. 编译Android的ffmpeg时出现问题
- 11. iPhone - 使用ffmpeg解码H264的问题
- 12. LINQ到SQL高速缓存的问题
- 13. 问题的编码
- 14. JVM高速缓存汇编代码?
- 15. 基于x265和ffmpeg HEVC编码的速度
- 16. 编码问题 -
- 17. 编码问题?
- 18. 编码问题
- 19. 编码问题?
- 20. 编码问题
- 21. 速度问题与代码
- 22. SQL 2008高速连接问题
- 23. 笨高速缓存控制器问题
- 24. 问题如何提高游戏速度
- 25. Oracle mapviewer - 高速缓存问题
- 26. 高速缓存和线程问题
- 27. AS2提高速度和缓解问题
- 28. NSURLCache高速缓存响应问题
- 29. 如何加速ffmpeg-x264编码器操作
- 30. 如何使用ffmpeg实现快速编码?
所以你的问题与C++或Qt无关,请适当标记。 – jv42 2011-05-02 14:26:48
我只是想说明我的问题,因为我使用Qt,使用C++语言编程。 – amrouch 2011-05-03 09:29:10
但是只有C++和Qt知识的人不能帮助你,尽管他们可能会'监视'那些标签。 – jv42 2011-05-03 09:30:07