ffmpeg提取单个关键帧到图像并获取关键帧的时间戳

ffmpeg extract single keyframe to image and get timestamp of keyframe

在视频中搜索与图像匹配的帧后,得到以下输出

[Parsed_blackframe_1 @ 0x55a8513722c0] frame:884 pblack:99 pts:452608 t:35.360000 type:B last_keyframe:864

如何在上述 864 的情况下提取 last_keyframe 的图像?

在上面的例子864中如何获取last_keyframe的时间戳?

How to extract an image of a the last_keyframe in the case above 864?

ffmpeg -i input -vf select=eq(pict_type\,I)*gt(n\,864) -update 1 -vsync 0 last.png
  • select 过滤器仅保留 #864
  • 以上的关键 (I) 帧和 (*) 帧
  • -update 1discards/overwrites前一帧,所以最后一帧被保存
  • -vsync 0 防止编码器不必要地复制关键帧来填补时间

How to get the timestamp of the last_keyframe in the case above 864?

我不知道在 FFmpeg 中是否有办法做到这一点,但使用 FFprobe 可以运行以下获取所有关键帧时间戳:

ffprobe -skip_frame nokey -select_streams v:0 -show_entries frame=pts_time

参考文献: