专栏首页悟空被FFmpeg玩FFmpeg使用手册 - ffprobe 的常用命令

FFmpeg使用手册 - ffprobe 的常用命令

在FFMpeg套件中,出了ffmpeg还有ffprobe,ffprobe主要用来查看多媒体文件的信息,下面看一下ffprobe中常见的基本命令. 5.1 ffprobe 常用参数 ffprobe常用参数比较多,可以用过ffprobe --help来查看详细的信息:

5.2 下面重点聚几个例子: 5.2.1 使用show_packets查看多媒体报信息:

show_packets查看的多媒体包信息使用PACKET标签所包括起来,其中包含的信息主要如下: codec_type: 多媒体类型,例如视频包,音频包等; stream_index:  多媒体的stream索引; pts: 多媒体的显示时间值 pts_time: 根据不同格式计算过后的多媒体的显示时间 dts: 多媒体解码时间值 dts_time: 根据不同格式计算过后的多媒体解码时间 duration: 多媒体包占用的时间值 duration_time: 根据不同格式计算过后的多媒体包占用的时间值 size: 多媒体包的大小 pos: 多媒体包所在的文件偏移位置 flags: 多媒体包标记,关键包与非关键包的标记 packets包中除了以上的字段和信息外,还可以通过show_data与show_packets组合来显示包中的具体的数据:

图中看到了多媒体包中包含的数据,初始信息为0000 01b6 51e0 47ff,那么我们可以根据图中的pos,也就是文件偏移位置查看,根据图中,pos的值为3273,通过转换为16进制,位置为0x00000cc9,与data的数据是可以对应的:

通过ffprobe读取packets来进行对应的数据分析,使用show_packets与show_data配合可以更加精确的分析。 5.2.2 除了packets与data外,ffprobe还可以分析多媒体的封装格式,通过show_format参数可以查看多媒体的封装格式,封装可是使用FORMAT标签括起来显示:

通过读取format信息,可以看到这个视频文件只有一个流通道,起始时间是0.000000,长度为85.867000,文件大小为2377700字节,码率为221523字节每秒,这个文件有可能是一个mov、有可能是mp4、有可能是m4a、有可能是3gp、有可能是3g2、也有可能是mj2,之所以ffprobe会这么输出,是因为这几种封装格式在ffmpeg中所识别的标签基本相同,所以才会这么多种显示方式,而其他种封装格式不一定是这样的,下面我们再看一个wmv的封装格式

这个input.wmv文件中包含两个流通道,文件封装格式为asf。 5.2.3 通过ffprobe的show_frame的参数可以查看视频文件中的帧信息,输出的帧信息使用FRAME标签括起来

通过-show_frame参数查看到如图的信息,能够看到每一帧的信息,下面介绍一下重要的信息

属性

说明

media_type

帧的类型(视频、音频、字幕等)

video

stream_index

帧所在的索引区域

0

Key_frame

是否是关键帧

1

Pkt_pts

Frame包的pts

0

Pkt_pts_time

Frame包的pts的时间显示

0.000000

Pkt_dts

Frame包的dts

0

Pkt_dts_time

Frame包的dts的时间显示

0.000000

Pkt_duration

Frame包的时长

1024

Pkt_duration_tine

Frame包的时长时间显示

0.066667

Pkt_pos

Frame包所在文件的偏移位置

44

Width

帧显示的宽度

608

height

帧显示的高度

320

Pix_fmt

帧的图像色彩格式

Yuv420p

Pict_type

帧类型

I

在windows下常用的Elecard Stream Eye打开查看mp4时,会看到很直观的帧类型显示,每一帧的判断,用ffprobe的pict_type同样可以看到,每一帧的大小,也同样可以通过ffprobe的pkt_size看到,pict_type可以或得到视频的帧是I帧、P帧或者B帧。 通过-show_streams参数可以查看到多媒体文件中的流信息,流的信息使用STREAMS标签括起来:

如图所示,可以看到流的信息:

属性

说明

Index

流所在的索引区域

0

Codec_name

编码名

Mpeg4

Codec_long_name

编码全名

MPEG-4 part 2

profile

编码的profile

Simple Profile

level

编码的level

1

Has_b_frames

包含B帧信息

0

Codec_tyoe

编码类型

Video

Codec_time_base

编码的时间戳计算基础单位

1/15

Pix_fmt

图像显示图像色彩格式

Yuv420p

Coded_width

图像的宽度

608

Coded_height

图像的高度

320

Codec_tag_string

编码的标签数据

Mp4v

除了以上这些信息,还有更多信息

下面再介绍一下图中这些信息

属性

说明

R_frame_rate

实际帧率

15/1

Avg_frame_rate

平均帧率

15/1

Time_base

时间基数(用来做timestamp计算)

1/15360

Bit_rate

码率

220914

Max_bit_rate

最大码率

220914

Nb_frames

帧数

1288

5.3 ffprobe使用前面的参数可以获得到对应的key-value,但是阅读起来因习惯不同所以有的人认为方便,有的人认为不方便,这样就需要用到ffprobe的print_format参数来进行相应的格式输出,下面举几种输出的例子: 5.3.1 XML格式输出:

5.3.2 ini格式输出

5.3.3 flat格式输出

5.3.4 json格式输出

5.3.5 csv格式输出

通过各种格式输出,可以使用对应的绘图方式绘制出可视化的图形: csv格式输出后使用excel打开表格形式

将表格中的数据以图形方式绘制出来

图形绘制出来的时候,可以看到对应的图形与Elecard Stream Eye基本相同。

5.4 如果只查看音频流或视频流,使用select_streams参数即可,例如只查看视频流的frames信息:

ffprobe -show_frames -select_streams v -of xml input.mp4

命令行执行后可以看到输出的信息如下,全部为视频的frames信息:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FFmpeg使用手册 - FFmpeg 的编译安装

    FFMpeg在官方网站中提供了已经编译好的可执行文件,用FFmpeg的人很多,因为FFmpeg是开源的,并且可以自己DIY,而且很强大,所以,FF...

    用户3765803
  • RPM包制作方法

    最近有同学问我制作RPM包相关的问题,我发现我以前做过,但是忘记记录了,现在记录一下:

    用户3765803
  • http+cgi实现(使用lighttp)

    做法比较简单 首先将lighttpd配置好 然后修改一下配置文件

    用户3765803
  • 搭建nginx https服务

    openssl genrsa -des3 -out server.key 2048

    随心助手
  • 四年一度的世界杯,没有这个几个小程序你还看个球啊

    知晓君
  • 您的世界杯诈骗套餐已上线!

    然而,当所有的真假球迷都沉浸在足球带来的狂欢中时,一大波骗子也正在向你靠近,千方百计地利用世界杯的名头“勾引”你进入他们下好的圈套。

    用户6966869
  • 警惕SNMP默认团体名导致的网络入侵

    *本文作者:ipenox;本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

    FB客服
  • python BeautifulSoup

    用户2398817
  • 【批处理学习笔记】第十七课:截取字符串

        在批处理中,set的功能有点繁杂:设置变量、显示环境变量的名及值、做算术运算、等待用户的输入、字符串截取、替换字符串,是我们常用的命令之一。   在字...

    Angel_Kitty
  • 苹果将有大动作?其AR/VR团队已扩充至数百人

    VRPinea

扫码关注云+社区

领取腾讯云代金券