📄 一句话概括
封装是【把各路流装进一个文件】,解封装是【把它拆出来】——它们都不碰编码,不压缩也不解压,只负责搬运和整理。
📝 本节和前面几节的关系
5.1 讲的是视频本身,5.2 换一个角度:视频与音频怎么被装进同一个文件。
一、封装是什么
编码之后,视频是一路数据、音频是另一路数据,它们各自独立。 封装就是给这两路(或多路)套一个共同的壳,再加上索引与元信息。 所以封装做的事,本质是整理与编排,不是压缩。
二、解封装是什么
播放时反过来:先读壳,把各路流分开,再分别送给对应的解码器。 这一步叫解封装(demux)。 它要能回答:这个文件里有几路流、每一路是什么编码、数据块都在什么位置。
三、为什么【不碰编码】很关键
这是理解视频处理成本的一把钥匙: 换封装:只整理壳,几乎不耗算力; 换编码:要把每一帧解出来、再重新压一遍,非常耗算力。 两者可能相差几十倍的耗时——所以动手前先分清是哪一种。
四、和文件系统的类比
用一个熟悉的类比:封装像【把文件放进压缩包之外的文件夹】。 文件夹本身不改变文件内容,只是把它们组织在一起并标好位置。 换文件夹很快,但要重新压缩里面的文件就很慢——道理完全一样。
五、动手 Demo:封装和解封装,一进一出
封装是【把各路流装进一个文件】,解封装是【把它拆出来】。
rows = [("写入", "封装", "把视频流、音频流按格式拼成文件"),
("读取", "解封装", "从文件里分辨出各路流并交给解码器")]
for a, b, c in rows:
print("%-4s %-8s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
封装和解封装,一进一出
--------------------------------------------------------------------
封装是【把各路流装进一个文件】,解封装是【把它拆出来】。
方向 叫什么 做的事
-----------------------------------------------------
写入 封装 把视频流、音频流按格式拼成文件
读取 解封装 从文件里分辨出各路流并交给解码器
两者的关系很像【打包】与【拆包】——
而且**它们都不碰编码**:不压缩、不解压,只负责搬运和整理。
两者的关系很像【打包】与【拆包】—— 而且它们都不碰编码:不压缩、不解压,只负责搬运和整理。
30 秒实验
- 用
ffmpeg -i in.mp4 -c copy out.mkv把一个文件换个容器。 - 注意命令用了
-c copy——这就是【不碰编码】的意思。
常见误区
- 把封装当成压缩。它一点都不压缩,只是换了个壳。
- 以为换容器一定要重编码。加
-c copy就是纯搬运。
自测三问(点开对答案)
1. 封装和解封装分别做什么? —— 封装把各路流装进一个文件,解封装把它拆出来交给解码器。 2. 为什么封装不耗算力? —— 因为它不碰编码,只做搬运算和整理。 3. 换容器与换编码的耗时差多少? —— 可能相差几十倍——换容器几乎不耗时,换编码要逐帧解了重压。- ☐ 下一节(5.2.2 音视频的封装)
相关笔记
- 音视频的封装 — 两路流怎么对到一起
- 封装格式 — 常见的几种壳
- FFmpeg命令行 —
-c copy就是纯封装 - 🎬 FFmpeg入门详解 · 索引