私は Windows PC に接続するフレームグラバーを持っています。キャプチャ入力デバイスは 1080p、60fps、4:4:4 の RAW ビデオです。これをテスト セットアップで使用して、ユーザーに既存の Windows アプリケーションで作業してもらい、画像圧縮、解像度の低下、フレーム レートの低下を導入してもらいます。目的は、ユーザー エクスペリエンスを調べ、ユーザーにさまざまな設定を評価してもらうことです。私のアイデアは、ffmpeg を使用して RAW 入力ストリームを取得し、遅延を導入して、MJPEG にトランスコードし、さまざまな JPEG レベルを追加して遅延を追加することです。キャプチャ デバイスにアクセスして解像度を変更し、フレーム レートを下げることはすでにできますが、遅延を導入できるかどうかはわかりません。ほとんどの場合、ユーザーはオーディオ遅延を考慮してビデオ遅延を導入するか、意図的にビデオ遅延を追加するのではなく、ビデオ遅延を削減したいからです :-) 現在、ストリームを処理する方法は次のとおりです。
ffmpeg -f dshow -i video="framegrabber_capture_1" -vf format=yuv420p,scale=1280x1024,fps=5 -f sdl test
補足: テスト設定では純粋なビデオのみが必要で、オーディオは必要ありません。
MJPEG へのトランスコード方法がわかりませんでしたが、おそらく可能だと思います。ビデオの遅延に関する情報はまったく見つかりませんでした。これは、ストリームがどこかにキャッシュされていることを意味するからです。誰かが正しい方向を示してくれるとありがたいです。
ありがとう!
J.
答え1
FFmpeg はビデオ プレーヤーではないため、表示されるビデオを遅延するようには設計されていません。
カメラからのビデオの前に短いビデオを連結することで、FFmpegにビデオを遅らせるように強制することができます。連結フィルター
も追加する必要がありますリアルタイムフィルター。FFmpeg に出力レートを入力レートに一致させるように強制します (このフィルターがない場合、FFmpeg はビデオを可能な限り高速に送信します)。
MJPEG エンコーディングでは を使用できないため-f sdl test
、FFmpeg 出力を FFplay にパイプしてビデオを表示します。
キャプチャしたビデオを 5 秒遅らせる例:
ffmpeg -an -f dshow -rtbufsize 1G -i video="framegrabber_capture_1" -filter_complex "color=white:size=1280x1024:rate=5:duration=5[w];[0:v]scale=1280x1024,setsar=1,fps=5[v0];[w][v0]concat,realtime=limit=10" -c:v mjpeg -pix_fmt yuvj420p -f mjpeg pipe: | ffplay pipe:
-rtbufsize 1G
- 入力バッファのサイズを 1 GByte に増やします (「多数の」入力ビデオ フレームを保存できます)。color=white:size=1280x1024:rate=5:duration=5[w]
- 長さ 5 秒、レート 5fps の合成ホワイト ビデオを作成します。 に保存します[w]
。[0:v]scale=1280x1024,setsar=1,fps=5
- 入力ビデオをスケーリングし、フレームレートを設定します。 に保存します[v0]
。[w][v0]concat
- 5 秒間の白いビデオをスケーリングされた入力ビデオと連結します (5 秒間の白いビデオが最初になります)。realtime=limit=10
- 出力レートを入力レートまで遅くします(limit=10
一時停止の制限)。-c:v mjpeg -f mjpeg
- 出力ビデオを MJPEG コーデックでエンコードし、MJPEG コンテナ形式で保存します。pipe:
- 出力として stdout を使用します。| ffplay pipe:
FFmpeg からの stdout パイプを FFplay の stdin パイプ (入力として使用) に渡します。
注:
追加の遅延が組み込まれているため、遅延は正確ではありません。
setpts=0
より高いフレームレートを使用し、 FFplay コマンドに追加することで、遅延の精度を向上させることができます (改善を試みることもできます)。
ffmpeg -an -f dshow -rtbufsize 1G -i video="Microsoft® LifeCam HD-3000" -filter_complex "color=white:size=1280x1024:rate=25:duration=5[w];[0:v]scale=1280x1024,setsar=1,fps=25[v0];[w][v0]concat,realtime=limit=10" -c:v mjpeg -pix_fmt yuvj420p -f mjpeg pipe: | ffplay -vf setpts=0 pipe: