3

FFMPEG.exe を使用して、さまざまなビデオからフレームを抽出しています。これはプログラムによる解決策であり、(ffprobe を使用して) 合計フレーム数や期間を取得するのは難しいことが判明する可能性があるため、コンソール出力を使用して個々のフレームのタイムスタンプを検出できると考えていますが、N フレームごとに 1 つの出力行を取得しています。このような:

frame=   20 fps=0.0 q=0.0 size=       0kB time=00:00:01.72 bitrate=   0.0kbits/s
frame=   40 fps= 38 q=0.0 size=       0kB time=00:00:04.02 bitrate=   0.0kbits/s
frame=   60 fps= 39 q=0.0 size=       0kB time=00:00:06.14 bitrate=   0.0kbits/s
frame=   70 fps= 38 q=0.0 Lsize=       0kB time=00:00:07.86 bitrate=   0.0kbits/s

すべてのフレームの出力を強制するコマンド ライン オプションはありますか? もしそうなら、私はそのtime=部分を抽出することができました。これは現在使用されているコマンド ラインです。

ffmpeg.exe -i video.avi -y -threads 0 -vsync 2 %10d.jpeg

理想的には、フレームのタイムスタンプを書き込む他の形式に置き換える%10d.jpegことですが、これは存在しないと思います。

4

2 に答える 2

6

タイムスタンプを取得する方法が間違っています。タイムスタンプを取得するには、ffprobe -show_packets または ffprobe -show_frames を使用して出力を解析します。ffmpeg パイプラインの時間は、フレームごとではなく、数ミリ秒ごとに更新されます\

EDIT ffprobe は、ファイル上で実行されるため、可能な限り高速に実行されます。表示されるタイムスタンプは、ファイルが再生された場合のフレームの実際の表示タイムスタンプとデコード タイムスタンプです。

ffmpeg の実行中にタイムスタンプが必要な場合は、 ffmpeg のコードを変更します。do_video_stats という関数があり、すべてが ffmpeg.c に出力されます。好みに合わせて操作できるはずです。

于 2012-09-06T06:55:48.073 に答える