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
数字でミリ秒を表す場合は、追加できます。