🎬 第五章 视频基础
📄 一句话概括

封装是【把各路流装进一个文件】,解封装是【把它拆出来】——它们都不碰编码,不压缩也不解压,只负责搬运和整理。

📝 本节和前面几节的关系

5.1 讲的是视频本身,5.2 换一个角度:视频与音频怎么被装进同一个文件。

一、封装是什么

编码之后,视频是一路数据、音频是另一路数据,它们各自独立。 封装就是给这两路(或多路)套一个共同的壳,再加上索引与元信息。 所以封装做的事,本质是整理与编排,不是压缩。

二、解封装是什么

播放时反过来:先读壳,把各路流分开,再分别送给对应的解码器。 这一步叫解封装(demux)。 它要能回答:这个文件里有几路流、每一路是什么编码、数据块都在什么位置。

三、为什么【不碰编码】很关键

这是理解视频处理成本的一把钥匙: 换封装:只整理壳,几乎不耗算力; 换编码:要把每一帧解出来、再重新压一遍,非常耗算力。 两者可能相差几十倍的耗时——所以动手前先分清是哪一种。

四、和文件系统的类比

用一个熟悉的类比:封装像【把文件放进压缩包之外的文件夹】。 文件夹本身不改变文件内容,只是把它们组织在一起并标好位置。 换文件夹很快,但要重新压缩里面的文件就很慢——道理完全一样。

五、动手 Demo:封装和解封装,一进一出

封装是【把各路流装进一个文件】,解封装是【把它拆出来】。

rows = [("写入", "封装", "把视频流、音频流按格式拼成文件"),
        ("读取", "解封装", "从文件里分辨出各路流并交给解码器")]
for a, b, c in rows:
    print("%-4s %-8s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
封装和解封装,一进一出
--------------------------------------------------------------------

封装是【把各路流装进一个文件】,解封装是【把它拆出来】。

  方向     叫什么     做的事
  -----------------------------------------------------
  写入     封装       把视频流、音频流按格式拼成文件
  读取     解封装     从文件里分辨出各路流并交给解码器

  两者的关系很像【打包】与【拆包】——
  而且**它们都不碰编码**:不压缩、不解压,只负责搬运和整理。

两者的关系很像【打包】与【拆包】—— 而且它们都不碰编码:不压缩、不解压,只负责搬运和整理。

30 秒实验

  1. 用 ffmpeg -i in.mp4 -c copy out.mkv 把一个文件换个容器。
  2. 注意命令用了 -c copy——这就是【不碰编码】的意思。

常见误区

  1. 把封装当成压缩。它一点都不压缩,只是换了个壳。
  2. 以为换容器一定要重编码。加 -c copy 就是纯搬运。
自测三问(点开对答案) 1. 封装和解封装分别做什么? —— 封装把各路流装进一个文件,解封装把它拆出来交给解码器。 2. 为什么封装不耗算力? —— 因为它不碰编码,只做搬运算和整理。 3. 换容器与换编码的耗时差多少? —— 可能相差几十倍——换容器几乎不耗时,换编码要逐帧解了重压。

相关笔记