同步捕捉多个摄像头

同步捕捉多个摄像头

如何同步捕获多个网络摄像头流?我尝试使用 FFMPEG,将输出映射到同一命令行中的不同文件,但这仍然导致 2 个不同步的视频,甚至长度也不同。

(我偶然发现了一个与 IP 摄像机类似的问题,但我的不是 overIP,所以延迟是由于不同的原因造成的。)

命令:

ffmpeg -f dshow -i video="@device_pnp_\\?\usb#vid_5986&pid_111c&mi_00#6&104790c2&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -f dshow -i video="@device_pnp_\\?\usb#vid_5986&pid_111c&mi_00#6&104790c2&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -map 0 -vcodec copy out2.mp4 -map 1 -vcodec copy out1.mp4

答案1

因此,经过几天的努力,我找到了一个解决方案:显然,在使用时-f dshow,这会分配一个实时缓冲区。虽然此缓冲区允许您以更高的分辨率对视频进行编码,但这会停止视频与实时的同步,因为它们是从不包含任何时间戳的缓冲区读取的。

相反,分配一个较小的实时缓冲区,如果它不是接近实时,它将迫使 ffmpeg 丢弃帧。

ffmpeg -f dshow -rtbufsize 1M -r 30 -i video="@device_pnp_\\?\usb#vid_045e&pid_075d&mi_00#6&eb52b6a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -f dshow -rtbufsize 1M -r 30 -i video="@device_pnp_\\?\usb#vid_045e&pid_075d&mi_00#8&46f2efb&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -framerate 30 -map 0 -c:v libx264 -preset ultrafast -y C:\1\output1_1.mp4 -framerate 30 -map 1 -c:v libx264 -preset ultrafast -y C:\1\output2_1.mp4

相关内容