FFmpeg 9.1 的新 AAC 编码器
摘要
宣布对 FFmpeg 的 AAC 编码器进行全面重写,声称相比其他编码器具有更优品质,并提供了详细的技术改进和性能对比。
暂无内容
查看缓存全文
缓存时间: 2026/07/01 17:01
# FFmpeg 9.1 的新 AAC 编码器
来源:https://hydrogenaudio.org/index.php/topic,129691.0.html
ASopH (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&action=profile;u=134180)、lynne (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&action=profile;u=172104) 以及 32 位访客正在浏览此主题。
##### https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083529#msg1083529 2026-06-30 10:31:23
大家好,我最近对 FFmpeg 的 AAC 编码器进行了全面重写。从码率控制、RDO(率失真优化)到所有编码工具(PNS、TNS、I/S 和 M/S)都重新设计。从指标上看(Google 的 Zimtohrli (https://github.com/google/zimtohrli)、ViSQOL (https://github.com/google/visqol),以及我本人的听感),这显然是目前最好的 AAC 编码器,与 qaac 和 fdk-aac 相比:
**kbps** **8.1 fast** **8.1 twoloop** **nmr** **fdk-aac** **apple** **libopus**
64 0.01315 / 2.65 0.00696 / 3.24 0.00309 / 3.83 0.00322 / 3.69 0.00612 / 3.29 0.00100 / 4.59
96 0.00338 / 3.77 0.00268 / 3.99 0.00134 / 4.04 0.00153 / 3.98 0.00175 / 3.87 0.00039 / 4.62
128 0.00229 / 4.10 0.00170 / 4.28 0.00072 / 4.47 0.00143 / 4.27 0.00081 / 4.44 0.00020 / 4.68
160 0.00129 / 4.30 0.00108 / 4.44 0.00051 / 4.56 0.00065 / 4.31 0.00117 / 4.51 0.00084 / 4.68
256 0.00105 / 4.41 0.00121 / 4.55 0.00031 / 4.61 0.00103 / 4.45 0.00067 / 4.63 0.00002 / 4.73
分别是 Zim/ViS 指标,越低/越高越好。
这个重写版本 (https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23430) 今天将会合并。你可以从源码编译,或者下载 BtbN 的最新 nightly 构建版本 (https://github.com/BtbN/FFmpeg-Builds/releases/tag/latest)(合并后他们会更新)进行测试。
一些具体说明:
- 新编码器**严格**为 CBR(固定码率),码率变化极小。拥有比特预算目标对编码有很大帮助。不建议使用 `-q:a`(真正的 VBR 模式)。
- 其他编码器除了 TNS 外不使用任何编码工具。所以,我首先仅使用 TNS 就公平地击败了它们,然后在此基础上重新实现了 PNS、I/S 和 M/S,最终彻底碾压。
- 我逆向分析了 qaac,发现它没有做任何感知优化。它只是使用带能量配合一个偏向高频的比特分配曲线。我改进了这一点:采用类似的曲线,但在 RDO 中使用了掩蔽带能量。
- FFmpeg 的 AAC **解**码器在立体声 PNS 方面有缺陷,这个 bug 可能也存在于其他 AAC 解码器中,因此我们在编码器中做了规避。由于之前没有其他编码器使用 PNS,这个 bug 直到现在才被发现。
- 特别关注了高码率。I/S 和 PNS 等编码工具在编码器自身表现良好以维持码率时,会自动关闭。
- 所有编码工具(PNS、TNS、I/S 和 M/S)都处于 RDO 循环中。我们不会使用照搬的启发式规则或任意码率截止值。如果一个工具能够被使用,它就会被使用。
- 如果你打算进行下混或期望输出被下混,请使用 `-aac_is 0 -aac_pns 0` 以保持原始信号相位。
- 编码器主要针对 48kHz 音频进行优化。**接受这个事实吧**。现在是 2026 年,重采样是免费的,48kHz 是标准。44.1kHz 可以工作,96kHz 也可以,但如果你想要最好的质量,请使用 48kHz。
- 如果你看频谱图,会发现我们留了很多空洞。**这是有意为之**。被掩蔽的频带会被清零或使用 PNS,因为相邻频带足够响,可以避免让人注意到缺失的频带。只对可听频带进行良好编码,比糟糕地编码所有频带要好。
我期待用户的 A/B 测试。我在 3000 首曲目(我的音乐收藏)上测试过,不过语音内容测试很少,因此可能需要在语音方面进行一些优化。
编码器在 uninit 时会打印额外的统计数据:`Qavg: 207.975 Tr: 5.3% TNS(L): 4.8% TNS(S): 36.9% M/S: 3.9% I/S: 10.0% PNS: 5.1%` 读取方法如下:
- 平均 lambda 值(值越高表示编码器维持码率的难度越大)
- 短块
- TNS 在长帧上的使用率
- TNS 在短帧上的使用率
- Mid/Side 编码使用率
- Intensity 立体声编码使用率
- 感知噪声替换使用率
如果你发现恼人的伪影,请发布原始输入样本和那行统计信息,以便我进行调查。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #1 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083531#msg1083531) – 2026-06-30 10:37:12
“编码器主要针对 48kHz 音频进行优化。接受这个事实吧。现在是 2026 年,重采样是免费的,48kHz 是标准。44.1kHz 可以工作,96kHz 也可以,但如果你想要最好的质量,请使用 48kHz。”
然而,世界上大多数音频都是 44kHz……
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #2 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083536#msg1083536) – 2026-06-30 10:53:44
> “编码器主要针对 48kHz 音频进行优化。接受这个事实吧。现在是 2026 年,重采样是免费的,48kHz 是标准。44.1kHz 可以工作,96kHz 也可以,但如果你想要最好的质量,请使用 48kHz。”
> 然而,世界上大多数音频都是 44kHz……
我发布的基准测试主要是在 44.1kHz 上完成的。不过我是用 48kHz 数据通过耳朵调音的,因此一些加窗/瞬态逻辑与 48kHz 相关。它在 44.1kHz 上表现足够好,我就保持了原样,因为时序差异并不大。
如果你要进行有损编码,不如重采样到 48kHz,这样解码端就不需要再做重采样了。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #3 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083538#msg1083538) – 2026-06-30 11:28:45
你说的“通过耳朵调音”是什么意思?具体调了哪些东西?
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #4 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083541#msg1083541) – 2026-06-30 12:14:21
我有一些非常棒的 FLAC 样本,可以清楚显示旧的 AAC 编码器质量有多低。希望新编码器好得多。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #5 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083556#msg1083556) – 2026-06-30 16:00:40
哦,Lynne 在 HA 上!欢迎!
对于不了解的人:Lynne 还为 FFmpeg 编写了原生的 USAC 解码器,如果我没记错的话,全是她写的。有点跑题,但是:Lynne,你注意到 USAC 在寻找时的播放卡顿问题吗?这里讨论了很多,例如:
https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&/topic,129641.msg1083064.html#msg1083064
和
https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&/topic,129641.msg1083087.html#msg1083087
我同意 Mycroft 的观点,FFmpeg 旧的 AAC 编码器性能“不太理想”,我认为这在 Kamedo2 的听力测试结果中也得到了证实:
https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&/topic,119861.0.html
Chris
- 最后编辑:2026-06-30 16:03:22 由 C.R.Helmrich
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #6 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083557#msg1083557) – 2026-06-30 16:55:06
可惜,我目前正在测试 FFmpeg AAC 编码器版本 N-124995-gbb6de744cc(2026 年 6 月 13 日星期六 19:08:10)。你完全重写的版本不会包含在即将进行的 ABC/HR 听力测试结果中(目前完成度 19%)。
`aac_mf` 是通过 MediaFoundation 的 AAC(Windows 10 和 11 可用)。
``
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a libopus -b:a 89k out.opus
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a opus -strict experimental -b:a 96k out.opus
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a libfdk_aac -b:a 96k out.mp4
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a aac -b:a 96k out.mp4
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a aac_mf -b:a 96k out.mp4
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a libmp3lame -b:a 96k out.mp3
$ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a ac3 -b:a 96k out.ac3
``
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #7 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083585#msg1083585) – 今天 13:33
> 这个重写版本 (https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23430) 今天将会合并。
好吧,事实证明它确实在*今天*合并了。
只是……不是指 2026 年 6 月 30 日那个今天。
是的。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #8 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083586#msg1083586) – 今天 14:52
> 哦,Lynne 在 HA 上!欢迎!
> 对于不了解的人:Lynne 还为 FFmpeg 编写了原生的 USAC 解码器,如果我没记错的话,全是她写的。有点跑题,但是:Lynne,你注意到 USAC 在寻找时的播放卡顿问题吗?这里讨论了很多,例如:
> https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&/topic,129641.msg1083064.html#msg1083064
> 和
> https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&/topic,129641.msg1083087.html#msg1083087
> 我同意 Mycroft 的观点,FFmpeg 旧的 AAC 编码器性能“不太理想”,我认为这在 Kamedo2 的听力测试结果中也得到了证实:
> https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&/topic,119861.0.html
> Chris
应该不会比 HE-AAC 的寻址问题更差吧?我们 FFmpeg 还没有正确处理 preroll,因为 HE-AAC 的延迟导致 preroll 增长了很多。
> 可惜,我目前正在测试 FFmpeg AAC 编码器版本 N-124995-gbb6de744cc(2026 年 6 月 13 日星期六 19:08:10)。你完全重写的版本不会包含在即将进行的 ABC/HR 听力测试结果中(目前完成度 19%)。
我认为你不应该取消正在进行的测试,但如果可以的话,能否进行快速比较而不是完整的 A/B 测试?
顺便说一下,关于指标,Zim 是更好的指标,但在高码率下会饱和,因此用 ViS 作为决胜局。按照这个规则,我们在所有对比中获胜(除了 Opus,因为它是最好的)。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #9 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083592#msg1083592) – 今天 15:35
测试了新 AAC 编码器。
编码质量确实扎实。我只测试了一首歌(**Burn the Boats** 来自 **Marathon [Vol. II]: They are Waiting (Original Game Soundtrack)**),但按照 lynne 的要求使用了 `-b:a` 模式。
测试了以下码率:64kbps、134kbps、200kbps。64k 表现不错,尽管有一些伪影。不确定是否是 ffmpeg AAC PNS 解码器 bug(用 ffplay 播放的)还是*别的什么原因*。134k 和 200k 听起来非常出色。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #10 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083593#msg1083593) – 今天 16:08
能否给 fb2k 提供一些命令行帮助?非常感兴趣,只是没有太多时间,也不怎么喜欢 ffmpeg 命令行。
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #11 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083594#msg1083594) – 今天 16:24
示例 1:
``
ffmpeg -i input.flac -map 0:0 -c:a aac -b:a 128000 output.m4a
``
示例 2:
``
ffmpeg -i input.flac -map 0:0 -c:a aac -aac_is 0 -b:a 128000 output.m4a
``
示例 3:
``
ffmpeg -i input.flac -map 0:0 -c:a aac -aac_pns 0 -b:a 128000 output.m4a
``
---
## 回复:FFmpeg 9.1 的新 AAC 编码器
##### 回复 #12 (https://hydrogenaudio.org/index.php?PHPSESSID=9om5a86tl072hk8489mku0mqg5&topic=129691.msg1083595#msg1083595) – 今天 17:22
决定将 128Kbs 的带宽降低到 16kHz,160kbps+ 的带宽降低到 18kHz。你可以使用 `-cutoff 16000`,或者等待版本更新。
相似文章
FFmpeg 9.0
FFmpeg 9.0 是流行的开源多媒体框架的重大版本发布,提供用于音频、视频、字幕和元数据处理的库和命令行工具。
AV2 v1.0.0 规范
开放媒体联盟(Alliance for Open Media)发布了 AV2 v1.0.0 规范,这是一种新一代视频编码标准,为流媒体、广播和实时视频会议提供卓越的压缩效率。
FRAPPE: 使用投影追踪编码器的完整输入残差输出自编码
FRAPPE是一种新颖的自编码框架,使用投影追踪编码器从完整输入预测残差,实现了高效的变速率图像压缩和快速的CPU编码。在高压缩比下,FRAPPE-Image在感知质量上优于AVIF,编码速度快47倍,使得仅使用CPU即可实现实时1080p 30fps编码。
@inco_ai: 希望您喜欢我们的首次发布!(更多精彩即将呈现)
Inco AI 宣布 DFlash 2,这是一项下一代解码技术,可在 M5 Max MacBook Pro 上为 Qwen3.8-27B 实现高达 4.6 倍的速度提升,提高效率而不改变输出。
@kadirnardev: 从现在开始,我将专注于加速 LFM2.5-Audio-1.5B 模型。我还将致力于强化学习方法和合成数据…
开发者宣布计划加速 LFM2.5-Audio-1.5B 模型,采用强化学习方法和合成数据,重点关注英语,并分享了 Mimi 编解码器模型的优化,以提升开源发布的速度和质量。