如何使用ffprobe提取关于流、数据包、帧和容器格式的信息?

如你所知,ffprobe能够提供输入视频的每个流、数据包和帧的大量相关信息。为了获取这些信息,你必须执行下列命令:

1. 获取每个流的信息:-show_streams

2. 获取容器格式信息:-show_format

3. 获取每个数据包的信息:-show_packets

4. 获取帧的信息:-show_frames

使用ffprobe获取每个流的信息

让我们使用 -show_streams 说明符获取所有流的信息。

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_streams simpsons_1080p2398_clip.mp4

[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1001/48000
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=800
coded_width=1920
coded_height=800
closed_captions=0
has_b_frames=1
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p
level=41
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=24000/1001
avg_frame_rate=24000/1001
time_base=1/24000
start_pts=48000
start_time=2.000000
duration_ts=433433
duration=18.059708
bit_rate=5277205
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=433
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=und
TAG:handler_name=GPAC ISO Video Handler
TAG:vendor_id=[0][0][0][0]
[/STREAM]

上面的输出包含了很多关于流的关键信息。你可以查看视频高度、宽度、帧率、码率、视频大小、编解码器、编解码器级别和配置文件、像素格式、B帧的呈现等。

我们再进一步,接下来获取每个数据包的信息怎么样?

使用ffprobe获取每个数据包的信息

使用下列命令,你可以获取视频中每个数据包的信息,即使用-show_packets。出于演示目的,我只展示了其中一个数据包。你可以看到,它包含了pts、dts、duration和size等的详细信息。

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_packets simpsons_1080p2398_clip.mp4
.
.
.
[PACKET]
codec_type=video
stream_index=0
pts=72024
pts_time=3.001000
dts=72024
dts_time=3.001000
duration=1001
duration_time=0.041708
convergence_duration=N/A
convergence_duration_time=N/A
size=1094
pos=738626
flags=__
[/PACKET]
.
.

是不是很棒?现在我们再深入一步来获取帧的信息。

使用ffprobe获取每帧信息

现在,让我们使用-show_frames获取每一帧的信息。输出包含大量信息:时间戳、宽度、高度、像素格式、图像类型(I帧、P帧和B帧)、图像序号(显示顺序和解码顺序)、色彩空间、帧是否为隔行扫描、帧是顶场优先还是底场优先,是否为关键帧等。无数关于帧的信息,对吧?

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_frames simpsons_1080p2398_clip.mp4
[FRAME]
media_type=video
stream_index=0
key_frame=0
pkt_pts=53005
pkt_pts_time=2.208542
pkt_dts=53005
pkt_dts_time=2.208542
best_effort_timestamp=53005
best_effort_timestamp_time=2.208542
pkt_duration=1001
pkt_duration_time=0.041708
pkt_pos=283117
pkt_size=33853
width=1920
height=800
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=P
coded_picture_number=2
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
color_range=unknown
color_space=unknown
color_primaries=unknown
color_transfer=unknown
chroma_location=left
[/FRAME]

使用ffprobe获取容器格式信息

你也可以使用ffprobe命令行中的-show_format选项获取容器格式信息。你可以看到,它包含容器的所有信息、持续时间、视频大小、码率和容器附带的任何标签。


$$ ffprobe -v error -hide_banner -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4
[FORMAT]
filename=simpsons_1080p2398_clip.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.007007
duration=19.993000
size=12242914
bit_rate=4898880
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:title=The Simpsons Movie - Trailer
TAG:artist=20th Century Fox
TAG:date=2007
TAG:encoder=Lavf58.56.100
TAG:genre=Trailer
[/FORMAT]

相关阅读:

ffprobe是什么(7 个ffprobe示例教程)

使用 ffprobe 提取帧数(视频中的帧数)

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论