快手 · 音视频技术入门课
刘歧
快手音视频首席架构师
4513 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 18 讲
快手 · 音视频技术入门课
15
15
1.0x
00:00/00:00
登录|注册

06|如何使用 ffprobe 分析音视频参数与内容?

你好,我是刘歧。
上一节课我们学习了如何使用 FFmpeg 和 OBS 做直播推流,当时我给你留了一个思考题,怎么确认播放的流是我们自己推的那个直播流呢?想回答这个问题,就需要用到我们今天要学习的这个视频信息分析神器——ffprobe。它是 FFmpeg 提供的一个工具,能够用来分析音视频容器格式、音视频流信息、音视频包以及音视频帧等信息,在我们做音视频转码、故障分析时,这个工具能提供很大的帮助。
下面,我们就来看看怎么使用 ffprobe 来分析音视频相关信息。

音视频容器格式分析

当我们拿到一个视频文件、一个视频直播 URL 链接时,通常的操作是播放,或者是分析其音视频容器格式的信息。播放操作比较简单,这里就不说了,如果想要分析音视频容器格式的信息,我们应该怎么做呢?
其实使用 ffprobe 的 -show_format 参数就能得到对应的信息了,我们看一下输出的内容。
[FORMAT]
filename=/Users/liuqi/Movies/Test/ToS-4k-1920.mov
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=734.167000
size=738876331
bit_rate=8051316
probe_score=100
TAG:major_brand=qt
TAG:minor_version=512
TAG:compatible_brands=qt
TAG:encoder=Lavf54.29.104
[/FORMAT]
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

使用ffprobe工具分析音视频文件是一项重要的技术,本文详细介绍了如何利用ffprobe工具来获取音视频容器格式的信息、音视频流的信息以及音视频包的信息。通过不同的参数,读者可以深入了解音视频文件的各个维度信息,包括帧类型、时间戳、位置和大小等。文章还提到了如何精准地获得自己需要的字段,以及音视频封装容器、音视频流、音视频包、音视频帧之间的对应关系。通过实际示例和命令展示了ffprobe工具的强大功能,对于音视频领域的技术人员具有重要的参考价值。总的来说,本文为读者提供了深入了解音视频文件分析的实用技术指导,帮助他们更好地进行音视频处理和故障分析。文章还提出了思考题,引发读者思考如何利用所学知识进行分片转码,为读者提供了进一步思考和探索的空间。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快手 · 音视频技术入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • peter
    请教老师姐问题: Q1:像素不是一个点吗?怎么会是矩形? 文中有这样一句话:“肯定有一个因素,就是像素点不是矩形的,不是 1 比 1 的单个像素点。这就产生了 Pixel Aspect Ratio(PAR)像素宽高比”。我以前一直认为像素就是一个点,难道实际上像素是按矩形处理的吗? Q2:文中最后一个图,关于H.264的,视频文件中是同时存在Video Packet和Video Frame吗?或者说,Video Packet和Video Frame只存在一种,图中两个都列出来只是为了说明? Q3:YUV格式能用来实际显示吗? 我的理解是:YUV不能用来显示,需要转换为RGB才能显示。 Q4:01讲中,YUV420的图中,Y4个字节,U和V各一个字节。总共6个字节。这六个字节表示几个像素?我认为是表示4个像素,不是6个像素。 Q5:YUV420格式,V是0,为什么还会有一个字节?按道理是0个字节啊。

    作者回复: 1 显示设备不同看到的不同,有的是矩形 有的是方块 只是我们现在见到的大多数是方块了,在一些超大屏幕上看到的还是有矩形的点的 2 正常情况下1个video packet对应一个video frame 该图只要是为了对应理解 3 有些设备输出是yuv,ycbcr这种规格,比如电视机现在应该还保留着这种规格的 还有小霸王游戏机的输出 4 yuv420 是2行2列四个像素点用4个y 一个uv 5 4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。 下面八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3] [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8] 存放的码流为:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8 映射出的像素点为:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7] [Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

    2022-08-06归属地:上海
    5
  • Geek_c9cd4c
    PPS 、SPS、VPS、SEI能介绍一下吗

    作者回复: VPS应该是HEVC开始引入的,而且并不一定会出现在stream里面,SPS是编码的序列参数集,用来记录编码规则的参数为主。PPS是图像编码参数,用来记录图像属性相关参数为主,SPS和PPS更常见一些,这两个切换后还需要IDR做一下刷新操作。SEI记录一些额外的信息,例如编码器自定义一些信息,或者用户在编码时候加一些私人定制的参数信息,具体的可以参考编码参考标准,里面描述比我们短短的回复详细很多

    2023-02-27归属地:上海
    1
  • askxionghu
    ffprobe 的 -show_formats改为-show_format

    作者回复: 👍

    2022-08-05归属地:上海
    1
  • Geek_c9cd4c
    I帧不是keyframe吗

    作者回复: 不一定,在OpenGOP编码情境下I不是IDR,也可以理解I不是keyframe

    2023-02-27归属地:上海
  • Geek_e2e4e9
    “因为分辨率是 1920x800 的,所以我们可以简单地称之为 1080p”这句话有问题,1080p应该是1920x1080的分辨率

    作者回复: 没问题,这种接近的你跟人家菜鸟说1920x800人家听着比较直接,但是你说是1080p 人家也能理解是高清的意思,请认真看内容哦

    2022-08-20归属地:北京
  • jcy
    这个得分通常用来确定使用哪个容器模块来解析这个 probe 文件 这里 这个 probe 文件 是不是应该是 这个 mov 文件?

    作者回复: 是的

    2022-08-12归属地:北京
  • 西格玛
    老师你好,经过做实验我发现和您的描述有点出入: ffprobe -show_frames -of xml xxx.mp4这个结果里面的pkt_pts和pkt_pts_time是不按照顺序的,但是 ffprobe -show_packets -of xml xxx.mp4的pts是按照顺序的

    作者回复: 加上select_streams v 只看视频流 如果音视频交错的话不一定能顺序

    2022-08-08归属地:北京
  • ifelse
    学习打卡
    2023-12-24归属地:浙江
  • 晓龙
    分片转码主要是根据video流特性进行分片转码,分片以gop作为划分点
    2022-09-20归属地:上海
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部