ffmpeg/ffprobe查看音频视频文件信息并输出为json格式
1
|
ffprobe -i 输入视频路径 -v quiet -print_format json -show_format -show_streams |
./ffprobe -select_streams v -show_packets -of json 1.ts
如果是音频,改 -select_streams a
如果要选择音轨,可以这样 -select_streams a:0
./ffprobe -select_streams a:0 -show_packets -of json 1.ts
--------------------
ffprobe主要用来查看多媒体文件的信息。本文带领大家学习ffprobe的常用命令。
常用参数比较多,可以使用ffprobe --help来查看详细的帮助信息image.png
上图输出的帮助信息即使ffprobe的常用的操作参数,也是ffprobe的基础参数。例如查看log,查看每一个音频数据包含信息或者视频数据包信息,查看每一个流有多少帧以及每一个流有多少音视频包,查看视频像素点的格式等等。
下面根据以上的输出参数重点举几个栗子:
-show_packets 和 -show_data
使用ffprobe -show_packets input.mp4:
-show_packets查看的多媒体数据包信息使用PACKET标签扩起来了,其中包含的信息内容如下表所示:packet字段说明
字段 | 说明 |
---|---|
codec_type | 多媒体类型,如视频包、音频包等 |
stream_index | 多媒体的stream索引 |
pts | 多媒体的显示时间值 |
pts_time | 根据不同格式计算过的多媒体的显示时间 |
dts | 多媒体解码时间值 |
dts_time | 根据不同格式计算后的多媒体解码时间值 |
duration | 多媒体包占用的时间值 |
duration_time | 根据不同格式计算后的多媒体包占用的时间值 |
size | 多媒体包的大小 |
pos | 多媒体包所在的文件偏移位置 |
flags | 多媒体包标记,如关键包与非关键包的标记 |
除了以上字段和信息之外,还可以通过ffprobe -show_data -show_packets input.mp4组合参数来查看包中的具体数据,输出结果我就不截图展示了,就是在每个packet数据下面有一段data数据。
通过ffprobe读取packets来进行对应的数据分析,使用-show_packets和-show_data配合可以进行更加精确的分析
-show_format命令
通过ffprobe -show_format 命令可以查看多媒体饿封装格式,其使用FORMAT标签扩起来显示:
对输出信息关键字段说明:
字段 | 说明 |
---|---|
filename | 文件名 |
nb_stream | 多媒体中包含的流的个数 |
nb_programs | 节目数 |
format_name | 使用的封装模块的名称 |
format_long_name | 封装的完整的名称 |
start_time | 媒体文件的起始时间 |
duration | 媒体文件的总时间长度 |
size | 媒体文件的大小 |
bit_rate | 媒体文件的码率 |
-show_frames
通过ffprobe -show_frames 命令可以查看视频文件中的帧信息,输出的帧信息使用FRAME标签扩起来:
字段 | 说明 |
---|---|
media_type | 帧的类型(视频、音频、字幕等) |
key_frame | 是否关键帧 |
pkt_pts | Frame包的pts |
pkt_pts_time | Frame包的pts的时间显示 |
pkt_dts | Frame包的dts |
pkt_duration | Frame包的时长 |
pkt_pos | Frame包所在文件的偏移位置 |
width | 帧显示的宽度 |
height | 帧显示的高度 |
pix_fmt | 帧的图像色彩格式 |
pict_type | 帧类型 |
-show_streams
通过ffprobe -show_frames 命令可以查看视频文件中的帧信息,输出的帧信息使用STREAM标签扩起来:
字段 | 说明 |
---|---|
index | 流所在的索引区域 |
codec_name | 编码名 |
codec_long_name | 编码全名 |
profile | 编码的profile |
level | 编码的level |
has_b_frame | 包含B帧信息 |
codec_type | 编码类型 |
codec_time_base | 编码的时间戳计算基础单位 |
pix_fmt | 图像显示的色彩格式 |
coded_width | 图像的宽度 |
coded_height | 图像的高度 |
codec_tag_string | 编码的标签数据 |
r_frame_rate | 实际帧率 |
avg_frame_rate | 平均帧率 |
time_base | 时间基数(用来计算timestamp) |
bit_rate | 码率 |
max_bit_rate | 最大码率 |
nb_frames | 帧数 |
格式化 ffprobe的命令的输出格式
默认的输出格式都是以key - value的格式的显示方式,由于每个人的阅读习惯不一样,有人认为方便有人认为不方便;ffprobe支持多种格式的输出,包括XML、INI、JSON、CSV、FLAT等。
如何定制输出格式呢,ffprobe -print_format 或者 ffprobe -of 来格式化。举个栗子:
ffprobe -of xml -show_streams input.mp4