开源多媒体框架 FFmpeg 的核心开发者 Lynne 上周宣布,已完成对内置 AAC 编码器的全面重写,涉及码率控制、失真优化(RDO)以及全部感知编码工具。在 Google 新推出的 Zimtohrli 感知音质指标测试中,新编码器在 64kbps 到 256kbps 多档码率上全面压过 Apple 的 qaac 和 fdk-aac,只有 Opus 编码器仍能领先。

这件事值得关注,是因为 FFmpeg 自带的 AAC 编码器多年来被公认为“能用但不够好”——真正在意音质的人,要么单独编译带专利风险的 fdk-aac,要么干脆转投 Opus。如果这次重写真能兑现,FFmpeg 用户第一次不用绕远路就能拿到接近顶级的 AAC 音质。

发生了什么

Lynne 重写了码率控制、RDO,以及 PNS(感知噪声替代)、TNS(时域噪声整形)、强度立体声(I/S)、中侧立体声(M/S)四项编码工具,并把它们全部纳入统一的 RDO 决策循环,不再依赖固定码率阈值这类经验规则。

他还提到一个细节:自己逆向分析了 qaac,发现这个被不少人视为“黄金标准”的编码器其实没做真正的感知优化,只是用能量曲线偏向高频分配码率。新版 FFmpeg 在此基础上加了掩蔽计算,理论上更贴近人耳实际能不能听见某个频段。

128kbps 下的对比

128kbps 是苹果音乐和多数流媒体常用的 AAC 码率,也是 Lynne 公布数据里最有参考价值的一档。

编码器Zimtohrli(越低越好)ViSQOL(越高越好)
FFmpeg 旧版(twoloop)0.001704.28
FFmpeg 新版(nmr)0.000724.47
fdk-aac0.001434.27
Apple qaac0.000814.44
libopus0.000204.68

新版明显甩开旧版和 fdk-aac,与 qaac 打平甚至略胜。但 Opus 依旧是无可争议的最优解,这个位置十几年没换过人。

谁会用到,限制在哪

普通用户短期感知不强——新编码器要等 FFmpeg 9.1 正式发布才会随包分发,现在只能自己编译或用 BtbN 的 nightly 构建测试。真正实际受益的是做转码工具、播放器、剪辑软件的开发者:以后提供 AAC 输出,不必再纠结要不要打包有专利授权风险的 fdk-aac。

限制也很具体。Lynne 自己说编码器主要针对 48kHz 调校,44.1kHz(几乎所有 CD 和主流音乐文件的采样率)效果“够用但非最优”;目前只支持 CBR 恒定码率,不推荐用 -q:a 的 VBR 模式,这和过去十年编码器普遍转向 VBR 的行业惯例是反着来的。

社区测试很快跟上。用户 KrajzegaX 在 192kbps 测试中发现某些采样点有清晰可听的滴答声,关掉 TNS 才会消失;另一位用户反馈低码率下某些样本比旧编码器更“金属味”、更糊。这些问题是代码合并当天就冒出来的,说明这是一次刚出炉、尚未经过大规模验证的重写,还不是可以立刻替代现有方案的成品。