web-dev-qa-db-ja.com

複数のカメラを同期してキャプチャする

同期された複数のWebカメラストリームをキャプチャするにはどうすればよいですか?同じコマンドラインで出力を異なるファイルにマッピングして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
2
Ido Kessler

それで、数日間それを使って作業した後、私は解決策を見つけました:どうやら-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
2
Ido Kessler