FFmpeg:同步来自两个网络摄像头的流

FFmpeg:同步来自两个网络摄像头的流

制作一个包含两个视频流的 MP4 文件,每个视频流来自不同的网络摄像头,如下所示:

ffmpeg -f v4l2 -thread_queue_size 32 -video_size 1920x1080 -input_format mjpeg -i /dev/video6 \
 -f v4l2 -thread_queue_size 32 -video_size 1920x1080 -input_format mjpeg -i /dev/video0 \
 -map 0:v -map 1:v -c:v libx264 -preset superfast test.mp4

在生成的文件中,来自名为 first 的摄像头的流将始终比来自名为 second 的摄像头的流晚约 0.5 秒。因此,在上面的示例中,来自 的流/dev/video6将晚于 的流/dev/video0。如果我在命令中交换两个设备,来自 的流/dev/video0将晚于 。因此,命令行上的位置很重要。

可以通过增加第二个输入来粗略地补偿差异-itsoffset 0.5。但 0.5 秒只是猜测,甚至可能取决于实际硬件。

有没有办法自动同步这两个流?

更新 1(和部分解决方案): -copyts导致同步,但现在视频播放器控件不起作用(无法在视频中来回移动)。使用 后-copyts -start_at_zero,控件恢复,但同步消失了。因此可能(使用-copyts),但我需要让播放控件再次工作。我实际上找到了一种方法来做到这一点:使用录制-copyts。然后再次运行整个过程ffmpeg,仅使用-start_at_zero

ffmpeg -i test.mp4 -start_at_zero -map 0:v -c:v copy test2.mp4

不幸的是,下一个问题是添加声音。我的音频设备报告的开始时间戳完全偏离,与摄像头报告的不匹配。我为此提出了一个单独的问题:FFmpeg:音频开始时间偏离

更新 2:似乎与同时同步捕获多个 RTSP 流ffserver那里建议使用一个解决方案,但没有提供任何细节,而且ffserver不再维护。

更新 3(完整解决方案):请参见FFmpeg:音频开始时间偏离获得完整的解决方案,其中还解释了如何添加音频。

相关内容