本文主要是介绍通过ffprobe查看多媒体文件的信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
./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:
image.png
如上图所示: -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标签扩起来显示:
image.png
对输出信息关键字段说明:
| 字段 | 说明 |
|---|---|
| filename | 文件名 |
| nb_stream | 多媒体中包含的流的个数 |
| nb_programs | 节目数 |
| format_name | 使用的封装模块的名称 |
| format_long_name | 封装的完整的名称 |
| start_time | 媒体文件的起始时间 |
| duration | 媒体文件的总时间长度 |
| size | 媒体文件的大小 |
| bit_rate | 媒体文件的码率 |
-show_frames
通过ffprobe -show_frames 命令可以查看视频文件中的帧信息,输出的帧信息使用FRAME标签扩起来:
image.png
| 字段 | 说明 |
|---|---|
| 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标签扩起来:
image.png
| 字段 | 说明 |
|---|---|
| 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
image.png
这篇关于通过ffprobe查看多媒体文件的信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!





