我使用 FFmpeg 从 MKV/MP4 文件中提取所有 I 帧,但 FFmpeg 似乎解码所有帧来执行此操作,因此如果视频文件为 1080p 且超过 10 分钟,则需要很长时间。我只希望它从 I 帧跳到 I 帧并将它们转储到 JPG/PNG 文件。另外,我需要知道 I 帧的时间戳。
另一种选择是使用 FFprobe 获取所有 I 帧的时间戳,但这也会解码整个文件。
我正在尝试做类似于 Avidemux 的事情。在 Avidemux 中,您可以通过按向上或向下箭头键非常快速地进入每个 I 帧,但它不会解码所有 B/P 帧。
利用
skip_frame
告诉解码器只处理关键帧。-vsync 0
(在此命令中)保留时间戳。-frame_pts
设置输出图像文件名的数字部分来表示时间戳。对数字的解释需要您知道帧率,例如,如果帧率为 30,则图像名称 out75 对应于 75/30 = 2.50 秒的时间戳。-r 1000
如果你想让数字代表毫秒,你可以添加。