认识封装格式:什么是容器?MP4、MKV、AVI、TS、FLV 的区别与适用场景
做封装格式转换这么多年,我经常被问到同一个问题:「老师,MP4 和 MKV 到底哪个画质好?」
每次听到这个,我都得先叹口气。因为问这个问题的人,还没搞明白一件事——封装格式根本不决定画质。
它就是个盒子。你往盒子里放什么,才是关键。
容器到底是什么?
说白了,容器就是「打包工具」。它把视频流、音频流、字幕、章节信息这些东西,按某种规则塞进一个文件里。
你可以把它想象成一个快递箱:
- 视频流 = 箱子里的大件商品
- 音频流 = 另一件商品
- 字幕 = 说明书
- 元数据 = 快递单上的地址
箱子本身不改变商品的质量。你拿 MP4 装 H.264,和拿 MKV 装 H.264,画质一模一样。
核心概念:容器 ≠ 编码。容器只管「怎么装」,编码管「怎么压缩」。这是新手最容易踩的第一个坑。
我记得有一次,一个客户非说「MKV 比 MP4 清晰」,还跟我争了半天。我让他把同一个源文件分别封装成 MP4 和 MKV,然后逐帧对比。结果他沉默了。嗯,从那以后我再也不跟人争论这个了——直接上对比工具。
主流容器格式一览
市面上容器格式少说几十种,但真正常用的,也就下面这几个。我按自己的使用频率排个序:
| 格式 | 全称 | 诞生年份 | 核心特点 |
|---|---|---|---|
| MP4 | MPEG-4 Part 14 | 2001 | 兼容性之王,几乎所有设备都认 |
| MKV | Matroska | 2002 | 开源、灵活、支持一切你能想到的功能 |
| AVI | Audio Video Interleave | 1992 | 老古董,兼容性好但效率低 |
| TS | MPEG Transport Stream | 1995 | 专为流媒体和广播设计,抗丢包 |
| FLV | Flash Video | 2003 | Flash 时代的产物,现在基本退场 |
逐个拆解:它们到底有什么区别?
MP4 —— 万金油选手
我个人习惯把 MP4 当作「交付格式」。为什么?因为它兼容性最好。从几千块的手机到几十万的播控服务器,没有不认 MP4 的。
但 MP4 有个硬伤:不支持多音轨和章节信息。你想在 MP4 里塞一条导演评论音轨?不行。你想加个章节跳转?也不行。
我的经验:如果你要给客户交付最终成片,选 MP4。如果你还在剪辑、调色、混音阶段,别碰 MP4——它会丢掉很多中间信息。
MKV —— 技术宅的最爱
MKV 是我个人做归档时的首选。它几乎什么都能装:任意编码的视频、任意编码的音频、任意格式的字幕、章节、附件……
你想想看,一个 MKV 文件里可以塞进:
- 正片视频(H.265 10bit)
- 导演评论音轨(FLAC 5.1)
- 原声音轨(DTS-HD MA)
- 中英双语字幕(ASS 特效字幕)
- 章节标记
- 封面图
MP4 能做到吗?做不到。这就是 MKV 不可替代的地方。
注意:MKV 的兼容性不如 MP4。某些老电视、车载播放器、在线平台,根本不认 MKV。我曾经在项目里用 MKV 交付,结果客户那边的播控系统直接黑屏……从那以后,我养成了「交付前先问播放环境」的习惯。
AVI —— 时代的眼泪
AVI 是 1992 年的东西。那时候 Windows 3.1 刚出来,大家还在用软盘。AVI 的设计思路非常原始:视频和音频交替存储,没有索引,没有元数据。
这意味着什么?
- 如果文件损坏,后半段全废
- 不支持 VBR(可变码率)
- 单个文件不能超过 2GB(老版本)
- 没有字幕轨道
我现在只在一种情况下用 AVI:处理老旧的监控录像。那些 DVR 设备只认 AVI,没得选。
TS —— 直播和广播的命根子
TS 全称是 Transport Stream,翻译过来就是「传输流」。它跟 MP4 最大的区别是:TS 可以边下载边播放。
为什么会这样?因为 TS 把数据切成一个个小包,每个包都能独立解码。哪怕丢了一两个包,画面也只是闪一下,不会卡死。
我在做直播项目时,推流协议几乎清一色用 TS 封装。HLS 协议里那些 .ts 片段,就是它。
避坑指南:TS 文件通常比同内容的 MP4 大 5%-10%。因为每个包都有额外的头部信息。如果你在录播场景下用 TS,记得后期转成 MP4 再存档。
FLV —— 曾经辉煌,如今落幕
FLV 是 Flash 时代的产物。2005-2015 年,YouTube、优酷、土豆全用 FLV。那时候浏览器不支持 HTML5 视频,全靠 Flash 插件撑着。
现在呢?Adobe 在 2020 年彻底停止支持 Flash。FLV 基本退出了历史舞台。
不过,FLV 有一个变种还活着:RTMP 直播协议底层用的就是 FLV 封装。如果你做低延迟直播,还是会碰到它。
一张图看懂容器选择逻辑
下面这张图是我自己总结的决策流程。每次做项目前,我都会过一遍:
实际项目中的选择策略
说了这么多理论,来点实际的。我一般按这个原则选:
- 交付给客户 → MP4(H.264 + AAC),兼容性第一
- 自己存档 → MKV(保留所有轨道,方便以后重新压制)
- 直播推流 → TS(HLS)或 FLV(RTMP)
- 老设备播放 → AVI(MPEG-4 Part 2 编码)
- 中间素材交换 → MOV(ProRes 或 DNxHD,虽然本章没讲,但它是专业领域的标准)
一个小技巧:如果你不确定用什么格式,先问自己三个问题——
- 这个文件要在什么设备上播放?
- 需要保留哪些轨道信息?
- 文件大小有没有限制?
答案出来了,格式也就定了。
常见误区汇总
这些年我见过太多人踩坑,列几个最常见的:
| 误区 | 真相 |
|---|---|
| 「MKV 画质比 MP4 好」 | 画质由编码参数决定,跟容器无关 |
| 「AVI 是最专业的格式」 | AVI 是 1992 年的标准,早已过时 |
| 「FLV 已经死了」 | RTMP 直播还在用,但确实在消亡 |
| 「TS 文件比 MP4 大,所以质量更好」 | TS 大是因为头部开销,不是画质更好 |
| 「封装格式转换会损失画质」 | 纯封装转换(remux)不损失任何画质 |
嗯,这一章就到这里。记住一句话:容器是盒子,编码是内容。别搞反了。