Iフレームを画像に素早く抽出

Iフレームを画像に素早く抽出

FFmpeg を使用して MKV/MP4 ファイルからすべての I フレームを抽出しましたが、FFmpeg はすべてのフレームをデコードして実行するようです。そのため、ビデオ ファイルが 1080p で 10 分を超える場合は非常に長い時間がかかります。I フレームから I フレームにジャンプして、それらを JPG/PNG ファイルにダンプするだけです。また、I フレームのタイムスタンプを知る必要があります。

他のオプションは、FFprobe を使用してすべての I フレームのタイムスタンプを取得することですが、これによりファイル全体がデコードされます。

私は Avidemux に似たことをやろうとしています。Avidemux では、上矢印キーまたは下矢印キーを押すだけで各 I フレームに非常に高速に移動できますが、すべての B/P フレームをデコードせずに実行されます。

答え1

使用

ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png

skip_frameデコーダーにキーフレームのみを処理するように指示します。-vsync 0(このコマンドでは) タイムスタンプを保持します。-frame_pts出力イメージ ファイル名の数字部分をタイムスタンプを表すように設定します。数字の解釈にはフレームレートが必要です。たとえば、フレームレートが 30 の場合、イメージ名 out75 は 75/30 = 2.50 秒のタイムスタンプに対応します。-r 1000数字でミリ秒を表す場合は、追加できます。

関連情報