“它就是个 MP4 啊,为什么播不出来?”是最常见也最令人困惑的视频问题之一,而它只有一个解释:扩展名告诉你的是那个盒子,不是盒子里的东西。
一个视频文件有两个分开的层次,而几乎没有人被告知过第二层。
容器是盒子。MP4、MOV、MKV、AVI、WebM 都是容器。容器的工作是组织性的:它装着一条视频轨、一条或多条音频轨,可能还有字幕、章节标记和元数据,并记录它们在时间上如何对齐,好让声音跟着画面走。
编解码器是画面本身被压缩的方式。H.264、H.265(又叫 HEVC)、AV1、VP9 是视频编解码器。AAC、MP3、Opus 是音频编解码器。编解码器才是那个把好几小时的原始帧变成可管理大小的实际算法,也是播放器必须看得懂、才能显示出任何东西的那个东西。
所以两个同样叫 .mp4 的文件,内部可以完全不同。一个装着 H.264 视频和 AAC 音频,在十五年前的笔记本上都能播。另一个装着 AV1 视频和 Opus 音频,在解不了码的设备上就是一片黑。一样的扩展名、一样的图标、不一样的结果。
视频播不出来时,通常的原因是播放器支持那个容器、但不支持里面的编解码器。播放器成功打开了盒子、找到了轨道、读了时间对齐——然后完全不知道该怎么把那些压缩过的视频数据变成画面。
一旦你知道症状的意思,它们其实很好认:
如果一个文件得在你管不到的设备上播出来——客户、观众、上传——用:
MP4 容器 + H.264 视频 + AAC 音频。
这个组合基本上被过去十五年内出产的每一个浏览器、手机、电视、剪辑软件和平台解码,而且几乎到哪都有硬件加速。它不是现有最有效率的选项,而那不重要——你买的是兼容性。
音频这边:AAC 是安全的默认值,Opus 每千字节的表现更好但较新,MP3 到处都支持但老了。
这个区分能把一件漫长的工作变成瞬间完成,而且它直接从“盒子与内容物”推出来。
Remux(重新封装)是把现有的轨道搬进另一个容器,完全不碰压缩数据。视频没有被重新压缩——它只是从一个盒子里拿出来,放进另一个。就算是大文件也只要几秒,而且完全无损。
重新编码是把视频解码回画面,再用另一个编解码器压一次。要花几分钟或几小时,而且一定会损失一些画质,因为你是在压缩已经被压过一次的数据。
重点来了:“MOV 转 MP4”非常常常就只是一次 remux。来自 iPhone 或相机的 MOV 经常装的就是 H.264 视频和 AAC 音频——正是 MP4 会装的东西。这两个容器关系很近,而且都接受那些轨道。没有任何东西需要重新压缩;轨道只是搬个家。
所以如果这类转档磨了二十分钟,而结果看起来比原档略差,那就是执行了错的操作。同样的逻辑适用于 MKV 转 MP4(通常也是 remux),以及抽出音频轨(那根本不该需要重新编码)。
真正必须重新编码的,只有编解码器本身得换的时候——为了兼容性把 HEVC 转成 H.264,或为了体积把任何东西转成 AV1——或者你要改分辨率、要帧精准地剪切、要把字幕烧进去。
在转任何东西之前,先看你手上实际有的是什么。任何会报告视频文件信息的工具都会列出容器,连同视频编解码器、音频编解码器、分辨率、帧率和比特率。
那一次检查回答了真正要紧的问题:我需要重新编码吗,还是只要换个盒子就好?多数时候诚实的答案是后者,而且快得多。
.mp4 文件内部可以完全不同