FFmpeg的多媒体分析器ffprobe

ffmpeg的多媒体分析器ffprobe

ffprobe也是FFmpeg源码编辑后生成的一个可执行程序。ffprobe是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流获得你想要了解的媒体信息,比如音频的参数,视频的参数,媒体容器的参数信息等。

例如它可以帮助分析某个媒体容器中的音频是什么编码格式,视频是什么编码格式,同时还可以得到媒体文件中媒体的总时长,复合码率等信息。

使用ffprobe可以分析媒体文件中每个包的长度,包的类型,帧的信息等。后面将会与ffprobe进行详细的介绍,下面列举一个简单的例子,以对ffprobe有一个基本的概念:

./ffprobe -show_streams inuput

命令执行之后将会输出如下内容:

[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_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
coded_width=1920
coded_height=1080
closed_captions=0
has_b_frames=2
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p
level=30
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/12800
start_pts=0
start_time=0.000000
duration_ts=460288
duration=35.960000
bit_rate=4894867
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=899
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
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:creation_time=2019-09-06T07:16:53.000000Z
TAG:language=und
TAG:handler_name=VideoHandler
TAG:vendor_id=[0][0][0][0]
[/STREAM]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_tag_string=mp4a
codec_tag=0x6134706d
sample_fmt=fltp
sample_rate=48000
channels=2
channel_layout=stereo
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/48000
start_pts=0
start_time=0.000000
duration_ts=1725456
duration=35.947000
bit_rate=139636
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1687
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
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:creation_time=2019-09-06T07:16:53.000000Z
TAG:language=eng
TAG:handler_name=SoundHandler
TAG:vendor_id=[0][0][0][0]
[/STREAM]

根据输出内容可以看到,使用ffprobe能够查看MP4文件容器中的流的信息,其中包含了一个视频流,由于该文件中只有视频流,流相关的信息是通过[STREAM][/STREAM]的方式展现出来的,在[STREAM]与[STREAM]之间的信息即为该mp4文件的视频流信息,当视频文件容器中包含音频流与视频流或者更多路流时,会通过[STREAM]与[/STREAM]进行多个流的分隔,分隔后采用index来进行流的索引信息的区分。

本文福利,免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓

 

ffprobe基本命令

首先用ffprobe查看一个音频的文件:

ffprobe inuput

返回信息:

Duration: 00:05:14:83,start:0.000000,bitrate:64kb/start:start:s
Stream#0:0 Audio: mp3, 24000HZ, stereo,s16p,64kb/start:start:s

第一行信息表示,该音频文件的时长是5分14秒零830毫秒,开始播放时间是0,整个媒体文件的比特率是64Kbit/s,然后看下一行信息表示,第一个流是音频流,编码格式是MP3格式,采样率是24kHZ,声道是立体声,采样表示公司是Slnt16(short)的planner(平铺格式),这路流的比特率是64kbit/s。

ffprobe查看一个视频的文件

ffprobe inuput

返回信息:

Metadata:
major_brand: isom
minor_version: 512
compatible_brands: isoomiso2avc1mp41
encoder: Lavf55.12.100

这行信息表明了该文件的Metadata信息,比如encoder是Lavff55.12.100,其中Lavf代表的是FFmpeg输出的文件,后面的编号代表了FFmpeg的版本号,接下来的一行信息如下:

Duration: 00:04:34.56 start:0.023220,bitrate:577kb/s
Stream#0:0 (un): Video:h264(avc1/0x31637661).yuv420p,480*480, 508kb/s, 24fps
stream#0:1(und): Audio:acc(LC) (mp4a/0x6134706D0), 441000HZ,stereo,fltp,63kb/s

上面第一行的内容表示Duration是4分34秒560毫秒,开始播放的时间是从23ms开始播放的,整个文件的比特率是577Kbit/s,紧接着再来看下一行;

第二行信息表示第一个stream是视频流,编码方式是H264的格式(封装格式是AVC1),每一帧的数据表示是Yuv420P的格式,分辨率是480写80,这路流的比特率是508kbit/s。帧率是每秒钟24帧(fps是24),

紧接着看下一行数据表示第二个stream是音频流,编码方式是AAC(封装格式是MP4A),并且采用的Profile是LC规格,采样率是44100HZ,声道数是立体声,数据表示格式是浮点型,这路音频流的比特率是63kit/s。

ffprobe高级用法:

ffprobe -show_format inuput

上述命令可以输出格式信息format_name,时间长度duration,文件大小size,比特率bit_rate,六点数目nb_streams等

ffprobe -print_format json -show_streams inuput

上述命令可以以JSON格式的形式输出具体每一个流最详细的信息,视频中会有视频的宽高信息,是否有B帧,视频帧的总数目,视频的编码格式,显示比例,比特率等信息,音频中会有音频的编码格式,表示格式,声道数,时间长度,比特率,帧的总数目等信息。

显示帧信息的命令如下:

ffprobe -show_frames input

查看包信息的命令如下:

ffporbe -show_packets input

 原文链接:FFmpeg的多媒体分析器ffprobe - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛

本文福利,免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/125680978