开源多媒体框架 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.00170 | 4.28 |
| FFmpeg 新版(nmr) | 0.00072 | 4.47 |
| fdk-aac | 0.00143 | 4.27 |
| Apple qaac | 0.00081 | 4.44 |
| libopus | 0.00020 | 4.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 才会消失;另一位用户反馈低码率下某些样本比旧编码器更“金属味”、更糊。这些问题是代码合并当天就冒出来的,说明这是一次刚出炉、尚未经过大规模验证的重写,还不是可以立刻替代现有方案的成品。
