使用 ffmpeg 获取特定帧的帧类型

Get frame type for specific frame using ffmpeg

我需要获取 x264 编码电影的特定帧编号的帧类型 (I/B/P)。

如何使用 ffmpeg/ffprobe 执行此操作? 我也对其他解决方案持开放态度。

我找到了使用 ffprobegrep 的方法:

$ ffprobe video.mp4 -show_frames | grep -E 'pict_type|coded_picture_number'

这会产生如下输出:

pict_type=I
coded_picture_number=0
pict_type=B
coded_picture_number=3
pict_type=B
coded_picture_number=2
pict_type=P
coded_picture_number=1
pict_type=B
coded_picture_number=6
...

要获取特定帧(例如第 8 帧)的帧类型,您可以将其扩展为:

$ ffprobe video.mp4 -show_frames | grep -w -E 'coded_picture_number=8' -B 1

pict_type=P
coded_picture_number=8

可以直接使用ffmpeg

ffmpeg -i input.mp4 -vf select='eq(n,334)',showinfo -f null -

以上将产生视频第 335 帧的输出

n: 0 pts: 171008 pts_time:11.1333 pos:  1090471 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:A72D197D plane_checksum:[9008E835 680AC49A 6CD66C90] mean:[136 122 134] stdev:[65.4 7.0 9.5]

您可以跳过 select 过滤器并获取所有帧的输出,然后像 @incBrain 那样进行 grep。请注意,您想要 display picture number,而不是编码。