快速提取 I 帧图像

Hin*_*d-D 4 ffmpeg

我使用 FFmpeg 从 MKV/MP4 文件中提取所有 I 帧,但 FFmpeg 似乎解码所有帧来执行此操作,因此如果视频文件为 1080p 且超过 10 分钟,则需要很长时间。我只希望它从 I 帧跳到 I 帧并将它们转储到 JPG/PNG 文件。另外,我需要知道 I 帧的时间戳。

另一种选择是使用 FFprobe 来获取所有 I 帧的时间戳,但这也会对整个文件进行解码。

我正在尝试做一些类似于 Avidemux 的事情。在 Avidemux 中,您只需按向上或向下箭头键即可非常快地步进到每个 I 帧,但它不会解码所有 B/P 帧。

Gya*_*yan 8

ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png
Run Code Online (Sandbox Code Playgroud)

skip_frame告诉解码器只处理关键帧。-vsync 0(在此命令中)保留时间戳。-frame_pts设置输出图像文件名的数字部分来表示时间戳。数字的解释要求您知道帧速率,例如,如果帧速率为 30,则图像名称 out75 对应于 75/30 = 2.50 秒的时间戳。-r 1000如果您希望数字代表毫秒,您可以添加。