使用 ffmpeg 获取特定帧的帧类型
Get frame type for specific frame using ffmpeg
我需要获取 x264 编码电影的特定帧编号的帧类型 (I/B/P)。
如何使用 ffmpeg/ffprobe 执行此操作?
我也对其他解决方案持开放态度。
我找到了使用 ffprobe
和 grep
的方法:
$ 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
,而不是编码。
我需要获取 x264 编码电影的特定帧编号的帧类型 (I/B/P)。
如何使用 ffmpeg/ffprobe 执行此操作? 我也对其他解决方案持开放态度。
我找到了使用 ffprobe
和 grep
的方法:
$ 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
,而不是编码。