如果你这周传过语音消息、参加过视频通话、或在 YouTube 上看过任何东西,你就用过 Opus。以流数量算,它大概是世界上使用最多的音频编解码器,而音频工程圈以外几乎没人听过它——一部分因为它能用,一部分因为它通常藏在一个叫别的名字的文件里。
音频压缩以前是两件分开的工作,由两个分开的编解码器家族负责。
语音编解码器是为电话设计的。它们在低比特率下效率极高,因为它们专门对人声建模——但把音乐丢进去,出来会是一团颤抖的烂泥,因为音乐跟人声一点都不像。
音乐编解码器像 MP3 和 AAC 是为录音设计的。它们什么都能处理,但需要更多数据,而且关键是它们会造成延迟:MP3 编码器以大约 26 毫秒的块工作而且需要前瞻,所以等声音从另一端出来,已经过了足够让即时对话变得尴尬的时间。
所以一个两者都要承载的应用——一通有音乐在播的通话、一个在讲话和歌曲之间切换的流——只能要么挑一个然后做得很烂,要么在流中途换编解码器。
Opus 用一个编解码器同时做到两件事,而且会随着内容改变自动在它的语音模式和音乐模式之间切换。它赢的原因就是这个。
Opus 做对的第二件事是延迟。它的帧可以短到 2.5 毫秒,典型的即时配置端到端大约 20 毫秒——低到两个人可以自然地打断彼此,而那才是一通语音通话感觉活不活的真正测试。
它也降得很漂亮。在真实网络上包一直在掉,而 Opus 可以重建短的空隙,并随着连接变化即时调整比特率。一通在某人走出 Wi-Fi 范围时还听得懂的通话,就是在做这件事。
好得有意义,而且差距在最要紧的地方最大——低比特率。
它免版税,而且是开放的 IETF 标准,这是它扩散的另一半解释:一个通讯软件可以直接附带它,不必谈授权。
这就是 Opus 从隐形的成功变成实际麻烦的地方。
Opus 是编解码器,不是文件格式——这个区分解释了大部分的播放失败。它必须住在一个容器里,而它通常住在这几个之一:
.opus——装着 Opus 轨的 Ogg 容器。导出的语音消息通常就是这个。.ogg——同一个容器,较旧的扩展名。.caf——Apple 的容器,某些 iOS 语音录音会用。结果就是那个熟悉的烦恼:你导出一则语音消息、拿到一个 .opus 文件,而你的播放器拒收——但同一段音频在通讯软件里播得好好的,因为它自己带了解码器。那个文件没有坏。播放器只是不认得 Opus。
把 Opus 转成 MP3 是兼容性决定,不是质量决定。Opus 本身已经是有损的,所以重新编成 MP3 等于先解码再压一次——第二次只能损失更多。结果永远不会比你手上的 Opus 好,而如果你挑了低比特率的 MP3,它会明显更差。
所以非转不可时再转——要交文件给用旧软件的人、要导进读不了它的剪辑软件、要上传到拒收这个格式的地方——而且转的时候用宽松的比特率,音乐就 192 kbps 以上。多出来的文件大小,跟你救不回来的听得见的损伤比起来什么都不是。
如果你只是要听,用一个原生支持 Opus 的播放器,就完全避开了这个损失。
诚实的总结:技术上 Opus 几乎到哪都是比较好的选择,而当你管不到谁会打开那个文件时,MP3 仍然是比较安全的那个。
.opus、.ogg、WebM、MKV 或 .caf 里——编解码器不等于扩展名