一句话定义
视频封装格式(container format)是“装视频的盒子”的规格,规定视频流、音频流、字幕、时间戳、封面等信息如何打包进一个文件。MP4、MOV、WebM 是三种常见盒子;盒子里东西怎么压缩,是另一件事,叫编码(codec)。
盒子和盒子里的话
打个寄快递的比方:封装格式是纸箱和面单,写着共几件、多长、先放哪个、如何拼起来;编码是箱内物品的压缩打包方式,视频常见 H.264、H.265(HEVC)、VP9、AV1,音频常见 AAC、Opus。
同一个纸箱能装不同东西:MP4 里通常是 H.264/H.265 + AAC,WebM 里通常是 VP9/AV1 + Opus。所以“这是什么格式”其实是两个问题:什么盒子,里面装什么编码。
播放器要做两步:先拆箱(demux,解封装)拿到音视频流,再解码(decode)还原画面。任一步不认识,文件就打不开。
三件容易混淆的事
- 改后缀不等于换格式。把 .webm 改名成 .mp4,只是换了面单,里面没动;播放器拆箱后发现打包方式不认识,照样报错。
- 转封装(remux)不等于转码(transcode)。remux 是换箱子、内容原样搬过去,快且基本无损;transcode 是解码后重新压缩,慢,还可能掉画质。批量处理时先试 remux,不行再 transcode(命令行工具的具体参数以官方文档为准)。
- 看后缀看不出编码。同一个 MP4 可以装 H.264、H.265 或 AV1。用 ffprobe 之类工具读真实流信息,别信文件名。
对实际工作的意义
浏览器能不能播,常常先卡在容器上。每个浏览器都有自己的“会拆哪些箱子”清单:WebM 是专为网页设计的开放容器,主流浏览器支持较好;MP4 + H.264 + AAC 目前兼容性最稳。Safari 对 WebM 的支持随版本变化,具体以官方页面为准。
另外两个常被忽略的点:服务器返回的 MIME 类型(Content-Type)写错,文件再标准也播不了;MP4 的索引(moov)若放在文件末尾,必须下完才能播,放到开头(常说的 faststart)才能边下边播——这纯粹是容器层面的事,跟编码无关。
对做 AI 数据管道的人:抽帧、切片、喂给多模态模型之前,先用 ffprobe 确认实际编码再选解码器;平台限制上传格式时,优先 remux,既省时间又保画质。
| 容器 | 出身 | 常见内部编码 | 典型场景 |
|---|---|---|---|
| MP4 | ISO 基础媒体文件格式(MPEG-4 Part 14) | H.264/H.265/AV1 + AAC | 兼容性最好,分发首选 |
| MOV | QuickTime,MP4 的前身 | H.264、ProRes 等 | 剪辑中间片、苹果生态 |
| WebM | Matroska 的子集,面向网页 | VP8/VP9/AV1 + Vorbis/Opus | 开放免版税,网页友好 |
| MKV | Matroska | 几乎什么都能装 | 多音轨多字幕,本地播放 |
