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

Dam*_*sia 3 ffmpeg x264 ffprobe

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

如何使用ffmpeg / ffprobe执行此操作?我也欢迎其他解决方案。

Dim*_*ski 5

我找到了使用ffprobe和的方法grep

$ ffprobe video.mp4 -show_frames | grep -E 'pict_type|coded_picture_number'
Run Code Online (Sandbox Code Playgroud)

这将产生如下输出:

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
...
Run Code Online (Sandbox Code Playgroud)

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

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

pict_type=P
coded_picture_number=8
Run Code Online (Sandbox Code Playgroud)


Gya*_*yan 4

可以直接使用ffmpeg

ffmpeg -i input.mp4 -vf select='eq(n,334)',showinfo -f null -
Run Code Online (Sandbox Code Playgroud)

以上将产生视频第 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]
Run Code Online (Sandbox Code Playgroud)

您可以跳过选择过滤器并获取所有帧的输出,然后像 @incBrain 一样使用 grep 。请注意,您需要display picture number, 而不是编码。