如何避免声音和原始视频数据之间的ffmpeg延迟增长?

时间:2011-11-12 19:07:56

标签: video opencv ffmpeg pipe delay

大家好,谢谢你的阅读!

这是我的问题:我有一个程序将原始视频帧传输到标准输出。该程序使用OpenCV捕获和处理视频,并直接输出处理过的帧。循环同步到我选择的帧率。我正在使用ffmpeg从标准输入读取,一切都适用于视频。 但是现在我添加了声音我有一个很大的问题:越来越多的延迟发生了,我真的需要摆脱它。所以这是我的想法,但我真的需要你的帮助:

我必须找到一种方法,将时间戳信息包含在原始视频中。要被ffmpeg理解,它需要是一个已知的原始视频兼容容器。然后我将需要使用容器API并将其传递到我的程序中的标准输出。我真的不知道在视频格式和编解码器的丛林中使用什么,我不知道如何在ffmpeg中启用时间戳同步......

如果有人有想法,我真的很感兴趣。有关信息,这是我用来管道原始视频的命令行:

./myprogram | ffmpeg -y -f alsa -i pulse -ac 2  -f rawvideo -vcodec rawvideo -r 24 -s 640x480 -pix_fmt bgr24 -i - -vcodec libx264 -pix_fmt yuv420p -r 24 -f flv -ar 44100 out.flv;

非常善良,

罗兰

2 个答案:

答案 0 :(得分:0)

视频和音频之间的延迟是多媒体领域的一个老问题。没有灵丹妙药可以解决它,但你可能会尝试使用不同的编解码器(特别是新的编解码器,而不是微软)。您可能会发现较低的延迟,并且,对于不错的视频长度(1小时),没有什么麻烦。

答案 1 :(得分:0)

简单的方法是处理音频和音频。分段视频文件,比如缩短30分钟的视频和音频。由于流是非同步的,你可以使用ffmpeg来控制它,参见指南herehere,好的是你不需要两个文件(流),因为ffmpeg可以使用来自SAME的源代码文件。

找出延迟后,重复下一段,依此类推。

有时音频可能超过30分钟,比如33分钟。然后我会使用'Audacity'将长度缩回到合并之前的30分钟。