🎬 第三章 音视频开发常用工具
📄 一句话概括

拿到陌生文件的第一件事是搞清楚它是什么——MediaInfo 把输出分成容器、视频流、音频流三组,读一遍规格就全清楚了。

📝 本节和前面几节的关系

3.1 讲 VLC(播放与验证),这一节换一个更【客观】的工具:只读文件信息,不做判断。

一、MediaInfo 是什么

MediaInfo 是一款专门读取媒体文件规格的工具。 它不播放、不解码画面,只做一件事:把文件里的元信息读出来给你看。 名字里的 Info 就是它全部的工作——信息,不做别的。

二、输出分三组看

容器:格式、文件大小、时长、总码率——先看这四个。 视频流:编码、分辨率、帧率、码率——决定画面的规格。 音频流:编码、采样率、声道、码率——决定声音的规格。 三组读完,这个文件的全部规格就清楚了——而这是排查一切问题的起点。

三、为什么它是【第一把尺子】

遇到问题时的第一个问题永远是:我手上的东西到底是什么? 不看规格就动手,等于蒙着眼修表。 MediaInfo 的价值就在于它不猜测、不美化,只把元数据读出来。

四、一个实用习惯

养成一个习惯:任何陌生文件,先过一遍 MediaInfo 再动手。 三类信息里,最常出现意外的是【音频流】——很多人以为有画面就有声音。 提前看一眼,能省掉后面很多次【怎么没声音】的返工。

五、动手 Demo:MediaInfo 是怎么把一个文件说清楚的

拿到一个陌生文件,第一件事是搞清楚它到底是什么。 MediaInfo 的输出可以分三组来看:容器、视频流、音频流。

info = {
    "容器":  ["Format: MPEG-4", "Duration: 3m20s", "Bit rate: 5368 kb/s"],
    "视频流": ["Codec: AVC (H.264)", "Size: 1920x1080", "FPS: 30", "Bit rate: 5000 kb/s"],
    "音频流": ["Codec: AAC LC", "Sample rate: 44.1 kHz", "Channels: 2", "Bit rate: 128 kb/s"],
}
for group, rows in info.items():
    print("【%s】" % group)
    for r in rows:
        print("   ", r)

实跑输出:

--------------------------------------------------------------------
MediaInfo 是怎么把一个文件说清楚的
--------------------------------------------------------------------

拿到一个陌生文件,第一件事是搞清楚它到底是什么。
MediaInfo 的输出可以分三组来看:容器、视频流、音频流。

  【容器】
    格式          : MPEG-4
    文件大小      : 128 MiB
    时长          : 3 分 20 秒
    总码率        : 5 368 kb/s

  【视频流】
    编码          : AVC (H.264)
    分辨率        : 1920x1080
    帧率          : 30.000 FPS
    码率          : 5 000 kb/s

  【音频流】
    编码          : AAC LC
    采样率        : 44.1 kHz
    声道          : 2
    码率          : 128 kb/s

  一行行读下来,**这个文件的全部规格就清楚了**——而这正是排查问题的起点。

三组读完,文件的全部规格就清楚了——这是排查问题的起点。 最常出意外的是【音频流】:很多人以为有画面就有声音。

30 秒实验

  1. 拿一个你手上的视频,用 MediaInfo 过一遍,把三组信息各抄一行。
  2. 看有没有哪一项和你原本以为的不一样。

常见误区

  1. 以为 MediaInfo 能播放。它只读信息,不做播放和判断。
  2. 只看容器就动手。音频流的意外比视频流还多。
自测三问(点开对答案) 1. MediaInfo 的工作是什么? —— 读取并展示媒体文件的元信息,不播放、不解码。 2. 它的输出可以分哪三组看? —— 容器、视频流、音频流。 3. 为什么说它是【第一把尺子】? —— 遇到任何问题,第一步永远是先确认手上的东西到底是什么。

相关笔记