在FFMpeg套件中,除了ffmpeg作为多媒体处理工具之外,还有ffprobe多媒体信息查看工具,ffprobe主要用来查看多媒体文件的信息,下面就来看一下ffprobe中常见的基本命令
ffprobe常用的参数比较多,可以通过ffprobe --help来查看详细的帮助信息:
ffprobe --help的输出信息即是ffprobe常用的操作参数,也是ffporbe的基本参数,例如查看log,查看每一个音频数据包信息或者视频数据包信息,查看节目信息,查看流信息,查看每一个流有多少帧以及每一个帧有多少个音视频包,查看视频像素点的格式等。
示例:
查看多媒体数据包信息:
ffprobe -show_packets inuput.flv
[PACKET] codec_type=video stream_index=0 pts=459776 pts_time=35.920000 dts=458752 dts_time=35.840000 duration=512 duration_time=0.040000 size=9253 pos=22648137 flags=__ [/PACKET] [PACKET] 通过show_packets查看的多媒体数据包信息使用PACKET标签括起来,其中包含信息主要如果表:
PACKET字段说明:
除了了以上字段和信息之外,还可以通过组合参数来查看包的具体数据:
示例:
ffprobe -show_data -show_packets inuput.flv
从输出的内容中可以看到多媒体包中包含的数据,初始信息为000000103019e6174,那么我们可以搞基上述输出内容中的pos,也就是文件偏移位置来查看,pos的值为20994,将其转换为十六进制,位置为0x00005202.刚好等于FLVTAG的数据在FLV文件的偏移位置,可以使用Linux下的xxd input.flv命令进行查看:
通过ffprobe读取PACKETS来进行对应的数据分析,使用show_packets与show_data配合可以进行更精确的分析。
除了packets与data之外,ffprobe还可以分析多媒体的封装格式,
ffprobe -show_format output.mp4
上述命令可以查看多媒体的封装格式,其使用FORMAT标签括起来显示:
下面对输出信息关键字字段进行说明:
format字段说明:
通过字段来解析输出,可以看到这个视频文件只有1个流通道,起始时间是0.000000,总时间长度达到10.080000,文件大小为212111字节,码率为168342bit/s,这个文件的格式有可能是MOV,MP4,M4A,3GP,3G2或者MJ2,之所以ffprobe会这么输出,是因为这几种封装格式在ffprobe中所识别的标签基本相同,所以才会这么多种显示方式,而其他几种封装格式不一定是这样的,下面我们再来看一下WMV的封装格式:
ffprobe -show_format output.wmv
这个input.wav文件中包含一个流通道,文件封装格式为ASF。
查看视频文件中的帧信息,输出的帧信息使用FRAME标签括起来:
ffprobe -show_frames inuput.flv
通过-show_frames参数可以查看每一帧的信息,下面就来介绍一下其中重要的信息
frame字段说明
在windows下常用的Elecard StreamEye工具中打开MP4时,会很直观地看到帧类型显示,用ffprobe的pict_type同样可以看到视频的帧是I帧,P帧或者B帧;每一帧的大小同样也可以通过ffprobe的pkt_size查看到。
查看多媒体文件中的流信息,流的信息将使用STREAM标签括起来:
ffprobe -show_streams inuput
如以上输出内容所示,从中可以看到流的信息,
stream字段说明
除了以上这些信息,还有更多信息,具体如下:
下面在来介绍一下多输出的这些信息,
stream字段其他说明
ffprobe使用前面的参数可以获得key-value格式的显示方式,但是阅读起来因习惯不同,可能有的人会认为方便,有的人认为不方便;如果要进行格式的显示,这样就需用到ffprobe -print_format或者ffprobe-of参数来进行相应的格式输出。而-print_format支持多种格式输出,包括XML,INIm,JSON,CSV,FLAT等。下面列举几种常见的格式输出的例子。
通过以小得到XML输出格式命令如下:
ffprobe -of xml -show_streams inuput.xml
从输出的内容可以看出,输出的内容格式为xml格式,如果原有的业务本身就可以解析xml格式,那么就不需要更改解析引擎,直接将输出内容为XML格式即可,解析引擎Packet信息时会很方便
通过以下命令得到INI格式的输出:
ffprobe -of ini-show_streams inuput.flv
从输出内容可以看到输出的内容为INI格式,这种格式可以用于擅长解析INI格式的项目中。
通过以下命令输出JSON格式:
ffprobe -of json -show_packets inuput.flv
从输出内容可以看到,内容信息还是Packetd 信息,但是输出的形式为JSON的格式,这种格式的数据可以用在以JSON解析为主的业务中。
通过以下命令输出CSV格式
fforobe -of csv -show_packets inuput.flv
通过各种格式的输出,可以使用对应的绘图方式绘图出可视化图形
CSV格式输出后可使用EXCEL打开表格形象,如图
使用Excel查看媒体信息CSV格式的输出
将表格的数据以图形的方式绘制出来
Excel查看媒体信息CSV转换图表格式输出
可以看到,下图所示图形与Elecard StreamEye的可视化图形基本相同。
图 ELecard Stream Eye查看流媒体帧信息可视化图
使用select_streams可查看音频(a),视频(v),字幕(s)的信息,例如配合show_frames查看视频的frames信息;
ffprobe -show_frames -select_streams v -of xml inuput.mp4
命令执行后可以看到输出如下:
从以上的输出内容可以看到,输出的frame信息全部为视频相关的信息。
极速赛车稳赚4码息,具体如下:下面在来介绍一下多输出的这些信息,
stream字段其他说明
ffprobe使用前面的参数可以获得key-value格式的显示方式,但是阅读起来因习惯不同,可能有的人会认为方便,有的人认为不方便;如果要进行格式的显示,这样就需用到ffprobe -print_format或者ffprobe-of参数来进行相应的格式输出。而-print_format支持多种格式输出,包括XML,INIm,JSON,CSV,FLAT等。下面列举几种常见的格式输出的例子。
通过以小得到XML输出格式命令如下:
ffprobe -of xml -show_streams inuput.xml
从输出的内容可以看出,输出的内容格式为xml格式,如果原有的业务本身就可以解析xml格式,那么就不需要更改解析引擎,直接将输出内容为XML格式即可,解析引擎Packet信息时会很方便
通过以下命令得到INI格式的输出:
ffprobe -of ini-show_streams inuput.flv
从输出内容可以看到输出的内容为INI格式,这种格式可以用于擅长解析INI格式的项目中。
通过以下命令输出JSON格式:
ffprobe -of json -show_packets inuput.flv
从输出内容可以看到,内容信息还是Packetd 信息,但是输出的形式为JSON的格式,这种格式的数据可以用在以JSON解析为主的业务中。
通过以下命令输出CSV格式
fforobe -of csv -show_packets inuput.flv
通过各种格式的输出,可以使用对应的绘图方式绘图出可视化图形
CSV格式输出后可使用EXCEL打开表格形象,如图
使用Excel查看媒体信息CSV格式的输出
将表格的数据以图形的方式绘制出来
Excel查看媒体信息CSV转换图表格式输出
可以看到,下图所示图形与Elecard StreamEye的可视化图形基本相同。
图 ELecard Stream Eye查看流媒体帧信息可视化图
使用select_streams可查看音频(a),视频(v),字幕(s)的信息,例如配合show_frames查看视频的frames信息;
ffprobe -show_frames -select_streams v -of xml inuput.mp4
命令执行后可以看到输出如下:
从以上的输出内容可以看到,输出的frame信息全部为视频相关的信息。