📄 一句话概括
容器是盒子、编码是里面的东西:同一个 MP4 里可能是 H.264 也可能是 H.265,要看的是【里面装了什么】。
📝 本节和前面几节的关系
2.2.3 讲了怎么把数据压小,这一节讲压缩后的码流怎么被装进一个文件。
一、容器是什么
一条视频其实有两条流:视频流和音频流。 它们各自被编码压缩,然后需要装进同一个文件里一起传输、一起播放。 这个【装】的格式就是容器,也叫封装格式——MP4、FLV、MKV、TS 都是容器。
二、容器里装了什么
容器不只是打包,它还存了播放需要的元信息: 每条流用什么编码、分辨率和帧率是多少; 音频的采样率和声道数; 时间戳——有了它,音视频才能对齐。 所以把流从容器里【拆出来】再【装进去】(封装转换)通常很快,因为内容没有被重新编码。
三、常见容器的使用场景
MP4:兼容性最好,点播、短视频、本地文件都用它。 FLV:早期网页直播的主力,延迟低、实现简单。 MKV:能装多音轨多字幕,本地高清片源最常用。 TS:电视广播和 HLS 切片的基础,抗丢包能力强。 选容器看场景:要兼容选 MP4,要广播选 TS,要直播低延迟可选 FLV。
四、两个概念别混
【换容器】和【换编码】是完全不同量级的两件事: 换容器:把流拆出来重新打包,快,几乎不损画质。 换编码:把流解码再按新标准编码,慢,会有画质损失。 日常说的【转格式】多半指后者——这才是真正耗 CPU 的那一步。
五、动手 Demo:容器是盒子,编码是里面的东西
一条视频其实由两条流(视频、音频)打包而成。 容器决定【怎么装】,编码决定【里面是什么】。
boxes = [
("MP4", "H.264 / H.265", "AAC", "点播、短视频"),
("FLV", "H.264", "AAC / MP3", "网页直播"),
("MKV", "H.264 / H.265", "AAC / AC-3", "本地高清片源"),
("TS", "H.264 / H.265", "AAC", "电视广播、HLS"),
]
for box, v, a, scene in boxes:
print("%-4s 视频:%-14s 音频:%-12s %s" % (box, v, a, scene))
实跑输出:
--------------------------------------------------------------------
容器是盒子,编码是里面的东西
--------------------------------------------------------------------
一条视频其实由两条流(视频、音频)打包而成。
容器决定【怎么装】,编码决定【里面是什么】。
容器 常用视频编码 常用音频编码 典型场景
----------------------------------------------------------
MP4 H.264 / H.265 AAC 点播、短视频
FLV H.264 AAC / MP3 网页直播
MKV H.264 / H.265 AAC / AC-3 本地高清片源
TS H.264 / H.265 AAC 电视广播、HLS
记一句话:**容器可以换,编码也可以换,两件事分开看。**
同一个 MP4 里可能是 H.264,也可能是 H.265——要看的是【里面装了什么】。
同一个 MP4 里可能是 H.264,也可能是 H.265——要看的永远是【里面装了什么】。 换容器(封装转换)很快,换编码(转码)很慢——这是两件完全不同的事。
30 秒实验
- 随便找一个 MP4,用系统属性或媒体信息工具看它的容器、视频编码、音频编码三项。
- 再找一个 MKV 对比,看同一套内容可以有多少种装法。
常见误区
- 把 MP4 当成一种编码。它是容器,不是编码。
- 以为【转格式】只是改后缀。改后缀什么都不会变,还会让文件打不开。
自测三问(点开对答案)
1. 容器的作用是什么? —— 把编码后的视频流和音频流装进一个文件,并保存播放所需的元信息。 2. 换容器和换编码有什么区别? —— 换容器只是重新打包,快且几乎无损;换编码要重新编,慢且有损。 3. 直播常用哪个容器,为什么? —— FLV 或 TS——实现简单、延迟低,TS 还抗丢包。- ☐ 下一节(2.3.1 媒体)
相关笔记
- 音视频编码 — 盒子里装的东西
- 媒体 — 换个角度:媒体这个词的全貌
- 🌐 计算机网络 · 索引 — 文件是怎么在网络上传输的
- 🎬 FFmpeg入门详解 · 索引