Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 如何避免ffmpeg在声音和原始视频数据之间产生越来越大的延迟?_Video_Opencv_Ffmpeg_Pipe_Delay - Fatal编程技术网

Video 如何避免ffmpeg在声音和原始视频数据之间产生越来越大的延迟?

Video 如何避免ffmpeg在声音和原始视频数据之间产生越来越大的延迟?,video,opencv,ffmpeg,pipe,delay,Video,Opencv,Ffmpeg,Pipe,Delay,大家好,谢谢你们的阅读 这是我的问题:我有一个程序将原始视频帧传输到标准输出。该程序使用OpenCV捕获和处理视频,并直接输出处理后的帧。循环将同步到我选择的帧速率。我使用ffmpeg读取标准输入,视频的一切都很好。 但是现在我添加了声音,我有一个大问题:越来越多的延迟正在发生,我真的需要摆脱它。这是我的想法,但我真的需要你的帮助: 我必须找到一种方法,将时间戳信息包含到原始视频中。为了便于ffmpeg理解,它需要是一个已知的原始视频兼容容器。然后,我需要使用容器API并将其传输到程序中的标准输

大家好,谢谢你们的阅读

这是我的问题:我有一个程序将原始视频帧传输到标准输出。该程序使用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;
非常感谢你


罗兰

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

简单的解决方法是分段处理音频和视频文件,例如剪切30分钟的视频和音频。由于流是去同步的,您可以使用ffmpeg控制它,请参阅指南,或者,好处是您不需要两个文件(流),因为ffmpeg可以使用来自同一文件的源

计算出延迟后,重复下一段,以此类推


有时音频可能超过30分钟,比如说33分钟。然后,在合并之前,我会使用“”将长度压缩回30分钟

谢谢你,阿尔文,你的链接非常有用!但我忘了告诉大家的是,我使用ffmpeg流媒体。。。在最后一个应用程序中,我将用一个rtmp url替换flv文件名,因此我负担不起使用audacity进行后期处理。但在您的链接中,人们谈论ffmpeg的“异步”选项,根据ffmpeg文档,该选项“拉伸/压缩”音频流以匹配时间戳”。你知道如何在我的原始视频输入中包含时间戳吗?我没有处理音频流的实时“拉伸/压缩”,因此它超出了我的知识范围(我已经看过一些例子,但无法立即记住该站点,也无法亲自尝试。继续搜索它)。