FFmpeg 9.1 的新 AAC 编码器

Hacker News Top 工具

摘要

宣布对 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

Hacker News Top

FFmpeg 9.0 是流行的开源多媒体框架的重大版本发布,提供用于音频、视频、字幕和元数据处理的库和命令行工具。

AV2 v1.0.0 规范

Lobsters Hottest

开放媒体联盟(Alliance for Open Media)发布了 AV2 v1.0.0 规范,这是一种新一代视频编码标准,为流媒体、广播和实时视频会议提供卓越的压缩效率。

FRAPPE: 使用投影追踪编码器的完整输入残差输出自编码

Hugging Face Daily Papers

FRAPPE是一种新颖的自编码框架,使用投影追踪编码器从完整输入预测残差,实现了高效的变速率图像压缩和快速的CPU编码。在高压缩比下,FRAPPE-Image在感知质量上优于AVIF,编码速度快47倍,使得仅使用CPU即可实现实时1080p 30fps编码。