有损音频编码器(MP3/AAC/Opus)测试与对比
本文发布于 827 天前,其中的部分信息可能已经失效或过时。
由于博客使用了 PJAX 可能导致 APlayer 出现 BUG 不显示,如果发现看不见播放器的话请使用 Ctrl + F5 键强制刷新页面即可。

最近在准备搬家整理东西的时候意外翻出了一个之前想找却找不到的 JBL 的小音箱,这个东西音质很不错但是连蓝牙的话只支持 SBC 协议,所以我准备插卡放歌。无奈这个东西不支持 WAV 格式,FLAC 格式虽然可以放但是不知道为啥会卡顿,这样就只能用有损压缩格式了,这篇文章主要用来记录一下我折腾下来的结论,顺便给后来者一点建议。

  • 主流的有损压缩格式
  • MP3

全称 MPEG-1 Audio Layer 3,元老级的有损格式,由MPEG小组制定于1992年,如今专利权都已经过期了却仍然经久不衰。后缀名.mp3兼容性最好,然而由于规范化时间实在是太早了(同时期的视频编码还是 H.263),因此限制也很多,例如最高只有 48000Hz 16bit 采样格式,最高码率只有 320K,只有双声道且无法有效保留18KHz以上的高频信息等,不过由于使用的非常广泛,本文中也会进行一定测试。(注:本文编码时使用的是 -q 0 ,即最慢的预设,通常情况下并不会使用(比 Opus 编码还慢),因此日常的 MP3 音质会比本文里还要略差一点)

MP3的升级版称为 MP3Pro ,该格式已基本被弃用,主要改进是使用频谱复制技术降低码率需求。

  • AAC

全称 Advanced Audio Codec,与AVC(H.264)同时代,是随着 MPEG-4 标准而在1997年推出的音频编码格式,于2000年进行了一次规范扩展。后缀名 .m4a/.aac ,设计时作为 MP3 的替代品提出,虽然在如今的视频领域取得了较大的使用占比,然而在纯音频领域没有能取代 MP3。有四个子格式(LC-AAC/LD-AAC/HE-AAC/HE-AAC V2),后两个子格式使用频谱复制和声道复制技术提高低码率下的音质。LC-AAC 即为默认的 AAC 子格式,其支持到最高 96000Hz 32bit 采样格式,48个声道,准全频谱(0-21KHz)保留(LC-AAC 并非无条件的全频谱保留,在低码率下依然会舍弃高频信息来保护中低频音质),每声道最高 256K 码率。(部分编码器仅支持到最高 160Kbps 每声道,而HE-AAC V2最高只有 64K 码率)

2016年,一个新的衍生编码格式 xHE-AAC 由一家私人公司推出,主要注重优化中低码率下的音质,然而目前没有配套的开源编解码器放出故无法测试。

  • Opus

相比起上面两个相当新且好用的一款编码,由 Xiph.Org 基金会开发,本质上是 Vorbis 与 Speex 的杂交升级版本。通过融合 CELT 和 SILK 技术实现低延迟和高音质的无缝切换,使其同时在音乐编码和低延迟应用(例如 VoIP 等)上同时拥有竞争力,唯一的缺点是编解码复杂度高,对嵌入式设备并不友好。于 2020年升级到 1.3 版规范,后缀名 .opus/.ogg 。不同于以上两个编码器,Opus 是开放格式,因此不需要缴纳专利费即可使用。Opus 支持最高 96000Hz 32bit 采样格式(官方编码器仅支持到 48000Hz 32bit),完全全频谱保留,完全 VBR 编码,单一声道最高 256K 码率,低延迟模式(LD)下可将延迟降低到 5ms 。

  • 同一编码格式音质一定相同吗?

同一编码格式可以有很多不一样的编码器实现,每个编码器都有自己的特点,音质也不相同。举个例子,光是AAC编码格式就有 FAAC/FDK-AAC/QAAC/NeroAAC/FFMpeg-AAC 五种不同的开源编码器,更别提闭源的编解码器了。不同的编码器有自己的侧重点,尽管差异不像不同格式那么巨大,同码率下的听感也有出入(低码率下尤其明显)。多项盲听测试指出AAC编码器中最好的是 QAAC ,其次是 FDK-AAC。在 Opus 那边,由于官方提供了编码器实现并且打磨的相当不错所以就没有其余的开源编码器实现了(除了 FFMpeg 官方写了一个并不好使的半成品)。在本篇文章中,测试音频使用的编码器和编码命令如下:

MP3:LAME MP3 Encoder 源码版本 3.100.1 X64-Windows 自行编译
64Kbps/96Kbps/192Kbps:lame.exe --abr <码率> -q 0 输入 输出
128Kbps/256Kbps:lame.exe -v <质量> -q 0 输入 输出
AAC:QAAC Encoder ,从 iTunes 中提取 CoreAudioToolbox 版本 7.10.9.0,CLI 界面由 nu774/QAAC 开源项目提供,版本 2.76
qaac64.exe -v <码率> -q 2 --no-smart-padding 输入 输出
Opus:Xiph.Org 官方 Demo(opus-tools) 开源实现,CLI界面版本 0.2,编码库版本1.3.1
opusenc.exe --vbr --bitrate <码率> --comp 10 输入 输出
  • 测试与对比
测试部分非常长,如果不想看的话可以直接跳到最后一段看结论。不过为了你能切身体会到不同码率下几个编码格式的差异,还是建议看完。

本文的测试分为客观对比和主观对比,客观对比通过比较音频的无损版本和压缩后版本的频谱图差异来判断压缩时舍去了多少细节内容(使用 Beyond Compare 比较频谱图截图,容差设置为30)(由于64K和部分96K下差异很容易听出来,所以这两组没有频谱图对比),主观对比由我个人听音测试,看看能否听出有损与无损版本音频的区别。所有测试用的音频都将放出,大家也可以自行听音对比(推荐佩戴耳机,如果要外放的话请用正经的扬声器,我测试时使用的是 JBL Flip 6 )。

上方为一张频谱图的例子(第二首歌无损版本的),上方为左声道,下方为右声道,横轴为时间,纵轴为频率,具体的频率标尺在右侧,后续的对比图中没有标尺,所以在这里放一个例子供大家对照。

由于很低的码率对我来说并没有价值,超过听觉透明阈值的码率也没有主观对比的意义,同时为了降低工作量,我将测试用的码率定为 64Kbps/96Kbps/128Kbps/192Kbps/256Kbps 五组,每组都将测试3首音乐,其中 64Kbps 一组将测试 LC-AAC HE-AAC 两种不同的AAC子格式,其余组只测试 LC-AAC 一种。

由于测试中三种格式都使用 VBR/CVBR 编码,因此码率会有上下浮动,我会控制幅度在 +-5% 之内。

  • 无损版本:
  • 第一首
格式:FLAC无损
采样率:44100Hz
位深:24位整数(32位浮点)
平均码率:1739Kbps/文件大小:66MB
长度:5分14秒
  • 第二首
格式:FLAC无损
采样率:48000Hz
位深:16位整数
平均码率:1186Kbps/文件大小:23MB
长度:2分40秒
  • 第三首
格式:FLAC无损
采样率:48000Hz
位深:24位整数(32位浮点)
平均码率:1789Kbps/文件大小:45MB
长度:3分29秒
  • 64Kbps版本:

由于64K下三个编码格式音质非常容易听出好坏,就不放频谱图的对比了。

  • MP3

警告:音质差到精神污染,请谨慎收听

由于在编码时舍去了 11KHz 以上的全部信息,因此整体的人声听感十分发闷,并且即使已经丢弃了所有的高频信息,在中低频上的表现也不尽如人意,从1分08秒开始到结尾人声和伴奏就几乎一直糊在一起。真的让我好奇十几年网络上的音频都是这种码率时,人们是怎么听得下去的。

这次MP3编码器选择扔掉了12KHz 以上的全部信息,不过由于是纯音乐,因此发闷的感觉比第一首要好,整体听下来一开始居然感觉还行,不过到2分钟左右复杂度上来后一下子就绷不住了。MP3格式在这首上的表现比我想象的要好不少。

同样是舍弃掉了 11KHz 以上的全部高频信息,不过神奇的是这首歌发闷的程度竟然是在变化的,能听得出编码器确实是在努力了,但是由于码率太低音质还是属于不能听的那种。不过好歹这首歌的人声和伴奏没有糊在一起了(代价是和声几乎没有了)。

  • LC-AAC

QAAC编码器舍弃了 12.5KHz 以上的全部高频信息,因此发闷的感觉比MP3要好(不过还是挺明显的),整体上除了几个地方之外人声没有变糊,虽然伴奏的细节是一塌糊涂,好几种辅助乐器的声音直接消失了,不过这么低的码率下还能听出来这是首歌就不错了还要什么自行车

奇怪的是这次QAAC竟然扔掉了 11KHz 以上的高频信息,舍弃的比 MP3 还要多。因为是纯音乐,如果不听无损版本直接听的话会感觉还可以,但是一对比的话差异还是很明显的,尤其是12秒开始无损版的高音是鹤立鸡群到几乎有点刺耳的那种,但是有损版就变得一点都不突出并且明显偏掉了。

这首歌 QAAC 扔掉了 13KHz 以上的信息,单论这点表现比 MP3 好,不过发闷的感觉还是不需要对比就能听出来,而且音量不知道为啥比无损版低了不少。AAC 另一个进步是把和声留住了,不过作为代价伴奏里鼓点声的高频部分全没了,感觉像是在拿低音炮听歌一样的。

  • HE-AAC

我个人并不喜欢 HE-AAC 的设计,因为不同于其他编码格式是尽力在给定的码率下还原音频本身的样子,HE-AAC 则是通过 SBR(频谱复制技术) 这样的奇技淫巧尝试糊弄耳朵,虽然你不可否认它在低码率(64Kbps下还不是很明显,如果更低的话对比更鲜明)下确实能提供相对不错的声音,但这样的话就背离音频编码的初衷了,所以在这里我不会对它的表现做像其他编码器一样详细的评价。HE-AAC 的声音乍一听可能感觉很好,但是仔细听的话还是能听出使用 SBR 带来的细节(尤其是高频细节)上的失真的。所以在更高的码率上 HE-AAC 很少应用,因为 Opus 在 128Kbps 以上的码率下已经超过它了。

另外说一句,HE-AAC 唯一的好处就是它是强制保留高频到 20KHz 的,所以声音不会发闷。

  • Opus

与其他格式不同,Opus 即使是低码率下也是无条件的保留全频谱的(低码率下保留至20KHz,码率充足时最高至23KHz),所以你会发现它的声音在 64Kbps 下比其他的编码格式都要更亮,虽然代价是它的中低频表现可能比不上扔掉了一大半高频信息的 AAC,不过整体的听感我个人觉得反而更好。

另外虽然 Opus 理论上支持44100Hz的采样率,但官方的编码器并没有提供,理由是:(原话)与其分散精力,不如尽力将一个采样率打磨到完美,并且与有损压缩带来的损失相比,一个优秀的重采样算法造成的音质损失已经可以忽略不记了。

最开头那一小段其实已经比较难听出区别了,不过1分02秒之后对比着听还是能听的比较明显的。原因是 Opus 虽然保留了全频谱,不过在码率不足时仍然优先照顾低频细节,所以高频部分也就是比没有要好一点,细节什么的还是免谈的(即使是这样还是有乐器的声音不见了),不过相较于前两位至少声音整体上不闷了听着比较舒服。

说实在的,Opus 在这首音乐上的表现比我想得要好太多了,以至于我第一遍听的时候还以为自己开错文件了。个人认为最容易听出来区别的是在48秒之后的位置上,声音不要放太大的话能听出背景里的伴奏糊掉了(不过因为鼓点比较响可能被盖住),这还是非常仔细的听了几遍才听出来的,我真的怀疑码率再高一点之后还能不能听得出区别了。

又是一个差点没听出区别的,单论人声方面几乎和无损版本没有区别。比较容易听出区别的地方在1分钟之后的副歌部分里无损版本在背景里有一个很轻的辅助乐器的声音,这个在有损版本里是听不到的。另外在2分43秒处的“好”字有一点点失真,除此之外我觉得没啥大差别了。

  • 96Kbps版本
  • MP3

LAME编码器放弃了15KHz以上的高频细节,所以这次听感上比 64K 要好不少(起码不精神污染了)。然而仔细听的话在1分02秒后的高潮部分还是能比较轻松地辨别出人声的高频部分有失真,此外伴奏里的细节也同样是缺失的。我的评价是音质还是属于不太能听的级别。

可能是因为这首歌本身就是合成的音乐并且节奏感太强了所以比较难听出差异,我听出来的区别在26秒后高频部分有杂音出现。另外奇怪的一点是压缩版的声音明显比无损版要小,还有这首歌复杂度应该是比上一首低的但是 LAME 却扔掉了14.5KHz 以上的信息,比上一首还多。MP3在这首歌上表现还不错,我估计128K码率下就听不出差别了。

同样是丢弃了 15KHz 以上的信息,MP3 在这个码率上确实还有点力不从心,不用对比就可以从13秒开始在人声的高音部分比较明显地听出失真,更别提伴奏部分了(不过优先低频策略下保留的鼓点确实有效地盖住了一部分伴奏的失真,可是盖不住人声啊)。

  • AAC(LC-AAC)

AAC 比较意外的和 MP3 一样选择丢弃 15KHz 以上的高频信息(我一开始以为 AAC 会保留得多一点,比如到 16KHz 之类的),所以高频部分与 MP3 相比进步不明显,整体依然略微发闷。人声的处理上倒是好了不少,代价是背景里乐器糊成了一片,不过好歹该有的乐器声音是模模糊糊都有了(从2分48秒开始最明显,稍微对比一下就听得出了)。

抱歉的是我没法听出来差别,这首歌鼓点实在太响,很难听到背景里声音的细节所以我只能放频谱图的对比了。如果有人听出来差别了请在评论区告诉我。

红色部分即为有损版丢失的细节,蓝色的地方为差异在容差范围内的部分(亦可能是误差),黑色为完全没有区别。可以看到高频部分一条红,说明全部丢弃了,中低频部分也不好,只有 1KHz 以下的部分还可以(不知道哪里对应多少赫兹的可以看一下上面的频谱图示例,对照一下)。

还是丢弃了 15KHz 以上的信息(这是和 15KHz 杠上了还是怎么回事啊),不过相比 MP3 进步在人声部分没有明显可见的失真了(虽然还是能感受到略显闷)。背景部分则得益于这首歌的伴奏并不复杂,所以能感受的细节本身就不多,比较明显的瑕疵在1分50秒开始的部分,原本比较明显的男生和声明显变弱甚至没有了。

  • Opus

Opus 确实厉害,在全频谱保留的同时还能够在中低频上达到甚至略微超过 AAC 的表现,人声部分几乎没有失真了,不过缺点也跟 AAC 大差不差,如果 1分02秒 左右还不是很明显的话可以听一下2分50秒开始的部分,背景伴奏很明显的糊在了一起(不过感觉上好像比AAC好一点,虽然也好不了多少)

Opus这里同样我没法听出明显的差异所以就放频谱图对比了。

可以发现 Opus 编码器仍然处于码率不足状态下的保留至20KHz状态,并且在保留了更多高频的同时它在中低频区域里的表现也比AAC好了很多,红色部分肉眼可见的变少了。尤其是在 2KHz 以下的部分保留的不错,但是高频部分还是一塌糊涂(这也是没办法的事情)。

整体听感比 AAC 略好,主要的问题出在 1分50秒 后,同样是男生和声的声音变弱了(不太明显),不过因为本身女生的声音更响也更亮所以很巧妙在部分地方的盖住了男声导致比较难听出来。但是一点一点对比着听的话还是能听出来差异的。

  • 128Kbps

128K码率已经接近Opus编码器在扬声器下 48000Hz 16Bit 音乐的听感透明阈值了(本测试中第一首和第三首是 24bit 的),耳机可能更高一些,AAC的扬声器下听感透明阈值大概在160K左右,MP3则要更高。

同时 128Kbps 的码率也是很多平台的“标准音质”,例如网易云音乐的是 128Kbps 的MP3,而苹果的 iTunes 则是 128Kbps -q 1 的AAC(本文编码时使用的 -q 2 ,音质会略高一些,速度则更慢),Bilibili 默认也是 128K 的AAC (不过质量会比苹果的略差)。

  • MP3

由于这里还是能听出差异来的所以就不放频谱图对比了,MP3舍弃了 17KHz 以上的高频部分,不过由于人耳对高频声音实在是不敏感,所以光论这点已经较难听出来差别了。最大的不足在于 MP3 并不会放弃一定的伴奏细节来保全人声(要糊大家一起糊),因此整体表现甚至不如 96K 的 AAC 好,人声还是勉强能听出模糊,背景更不用说了(毕竟还是老格式了啊)

同样听不出来区别,直接上频谱图对比。

整体表现比 96K 下的 AAC 要好一点,高频部分依然是丢弃了17KHz以上的部分(最后一小段不知道怎么回事不太对劲,请忽略)。能看出 2KHz 及以下的部分表现不错,损失已经很小了,但是中高频上看着比 96K 的 Opus 还要略差(何况 Opus 还是保留到20KHz的)

还是放弃了 17KHz 及以上的高频信息,问题也和之前基本相同,在 1分钟 以后的部分和声仍然可见的变小甚至没有了,整体上听感和 96K 的 AAC 基本相同。不过因为差异已经较小,防止有人听不出我在这里同样放一下频谱图的对比。

可以看到除了依然不能看的高频部分外,整体的表现居然还行,在 3KHz 及以下的损失已经很小了,这可能就是比较难听出差异的原因。

  • AAC(LC-AAC)

编码器放弃了17.5KHz以上的部分(有意思的是AAC从13KHz以上开始编码质量就逐渐下降了,而不像MP3一样是一下子掐断的)。进步的地方在于人声部分已经听不出来差距了,看上方的频谱图对比也可以发现在人声集中的 1KHz 以下已经很少损失了,而在 3KHz 以下的部分表现都可以接受,但是高频部分又是绷不住(毕竟码率摆在这里),所以仍然并不是完全听不出差异,仔细对比会发现伴奏里还是有模糊的现象,不过比 96K 已经算好了很多了。

注:这首歌的频谱对比出问题了,不知道怎么回事比 96K 还差,我看了半天没明白是哪里的问题,容我研究清楚再补充这里。

经过检查,发现 AAC 在编码某些歌曲时会因不明原因导致音频时间出现细微的变化,虽然只有零点几秒的差距但是会在对比时造成横轴无法对齐,并且尝试了所有开源 AAC 编码器都有这个问题,所以后续的 AAC 编码器有无法对齐的会直接放出频谱图原图。

AAC 终于把男生的和声留住了(泪目),这次我没能听出除了伴奏里的一点瑕疵之外的其他区别了。

  • Opus

注:因为 Opus-Tools 编码器不支持 44100Hz 采样率,所以用于对比的源文件是重采样至 48000Hz 的无损版本,因此Audition中显示的纵轴高度会与其他格式有一点点不同。

128K 的 Opus 已经开始逐步转为全频谱编码了,可以看到除了最顶上有细细一条之外其于全部保留了。低频部分表现不错,2KHz 以下损失已经很小了,高频部分则比 AAC 好上不少(虽然损失依然比较大)。整体的听感也更加完善,人声几乎没有差别,而背景伴奏里除了少数几个位置(主要集中于2分48秒开始的高潮部分)已经很难听出瑕疵了。

同样是放弃了最上面一条的 21KHz 以上的部分(这首歌最高到 23KHz),Opus 大概是因为没有检测到人声所以没有过分偏袒低频部分,整体频率由低到高质量基本呈现递减的趋势(对比一下上一首歌就知道了,上一首歌质量在 3KHz 附近有明显的突然下降)。当然啦我还是听不出区别来。

Opus同样是扔掉了最上面一条,另外非常有意思的一点是 Opus 的编码质量在大概 15KHz 的位置上能很明显的看出一道分水岭,大概是优先照顾人耳更敏感的 15KHz 以下的部分去了。当然这么做的效果也是很明显的,分水岭以下的部分表现得很不错(对于这个码率来说),理论上都已经很难听出差异了。分水岭以上的部分虽然相对比较差,但至少还是比 MP3 的高频要好的。

  • 192Kbps
  • MP3

我原本以为 192K 的码率下,MP3应该至少能保留声音到 20KHz 了,没想到编码器似乎觉得优先照顾中低频比较重要所以还是直接砍掉了 18KHz 以上的信息,这直接导致 192K 下的 MP3 依然算不上听觉透明。不过这样的好处是在 3KHz 以下的部分已经几乎没有区别了,3KHz以上的中频部分也表现的比 128K 下的任何编码格式都要好。可以说除了高频保留之外,192K 的 MP3 即使不是听觉透明也很难听出区别了。

MP3编码器又一次直接扔掉了 18KHz 以上的信息(我不理解.jpg),并用这个损失换来了不错的中低频表现。不过 MP3 编码器好像不管什么时候都是质量随频率变高而递减,不会像 Opus 那样随着音频内容动态调节。高频上被保留部分的损失还是有点大,我对 MP3 在这个码率上对这首歌的编码表现不是很满意。

MP3依旧是丢了18KHz以上的信息,不过这次它丢也没丢干净,最高频率一直在 18KHz 和 19KHz 之间反复横跳,让人看着很不爽。除了这个通病之外整体表现不错,中频上差异已经非常小,而低频上甚至连容差范围内差异都快没有了。应该可以算作听觉无损了。

  • AAC(LC-AAC)

AAC 的表现还不错,只在最高的部分上丢了细细一条(类似于 Opus 的处理方式)。高频部分上比 MP3 要好一些(但并没有太多),低频上和 MP3 的表现持平。不过这首歌也同样存在横轴有点略微对不齐的问题(虽然不是很明显),所以上面这张图仅供参考。

由于横轴对不齐的问题这首歌只能上频谱图原图了,除了高频同样被剪了之外我也没有办法做太多的点评。

同样没法对齐,直接上频谱原图,大家可以自己用肉眼对比一下。

  • Opus

你不得不承认 Opus 确实强的离谱,无论是高频还是中低频都保留的无可挑剔(起码是在这个码率下)。高频部分还是丢了细细一条,不过这次编码器没有在高潮部分偏袒 2KHz 以下的部分了(估计是码率够了,反正都是听觉无损了,也不用偏袒了)。

由于 AAC 那边有横轴对不齐的问题所以只能和 MP3 比了,高频部分还是丢掉了 20.5KHz 以上的部分,比上面两个都要好不少。不过很神奇的一点在于虽然它的中高频保留确实比 MP3 好了一些,但是却并不像低码率下进步那么明显(可能是因为这首歌确实比较复杂吧),这首歌上 Opus 同样没有偏袒低频部分

(兄弟们,有挂) 这样的表现说是全方位碾压 MP3 一点也不为过吧。

  • 256Kbps

最常用的码率之一(另一个是128K),很多软件的默认音频码率。这个码率下所有编码都可以做到听感无损,所以我主要集中于客观对比上(AAC 由于上面说过的原因没法正常参赛)

  • MP3

MP3 似乎很看重低频的质量啊,宁可放弃高频上面的一大条也要努力在低频上保留更多细节。不过这样做的效果也确实是有的,肉眼可见的在低频上甚至连容差范围(蓝色)内的差异都要没了,虽然上面那一条红让人担心耳朵真的厉害的人是不是还是能听出差异来(虽然我是不可能了)。

MP3啊,你既然要丢高频就丢干净吧,为什么老是留一条似丢非丢的半吊子在那里啊(恼)。除开前面这个小问题,MP3 的表现还不错,低频部分继续发扬传统留的好过头了,高频部分也还能让人接受(比 192K Opus 好,至少没被越级碾压)

中低频上同样出色的有点过头的发挥,高频部分同样奇怪的小问题(又一次留了但没完全留住)。MP3 的特征看了这么多相信大家也都看出来了。

  • AAC(LC-AAC)

AAC 终于留住高频了(泪目啊)!开头一小段的表现好得出奇,连容差范围内差异都快完全没有了(可能是因为用的是 CVBR 而不是完全 VBR,开头那一小节完全用不着那么高的码率),后面因为横轴对齐的问题仅供参考,不过还是可以明显感觉出来整体表现比 MP3 好

因为横轴对齐问题这两首歌还请大家自行肉眼对比一下。

  • Opus

什么叫开挂啊(战术后仰)Opus 在几乎没有舍弃高频信息的情况下,在中低频上达到了与 MP3 相同甚至更好的水平。当然因为 Opus 在这个码率下已经不偏袒低频了,所以不会像 MP3 那样在 1KHz 以下的部分用力过猛的现象,整体的编码质量比相当平稳。

除了高频没有像 MP3 那样让人看着难受外,基本上和上面两个格式相比进步不是很大。

除了最上面的一条红色之外,其余的部分已经几乎看不到红色了(除了几个零散的红点)。整体上与原曲的差异即使在客观上也可以忽略不计了。不过由于码率上来了,实际上和 MP3 的差异也就是高频的保留,至于中低频部分 Opus 也只能比 MP3 好一点。

  • 结论

总的来说,对于 MP3 ,因为它实在是不擅长对付高频信息,要能做到听感无损,那么最好使用不低于 192Kbps 的码率进行编码;对于 AAC (LC-AAC)来说,建议至少使用 160Kbps 以上,最好也要到 192Kbps;对于 Opus,得益于最新的心理声学模型,在 128Kbps 下就能够获得可听的音质了,如果还是不放心的话可以提到 160Kbps。不过从上面的对比中可以看出,不同歌曲对于码率的需求是不同的,而且差异一点也不小。因此出现一首歌 128K 就够了,另一首歌 160K 还是不够用也是很正常的。如果需要编码的歌较少,大可以逐一进行尝试,但如果是批量编码的话,可以直接套用上面的推荐码率。

新的格式(例如 Opus 和本文没有测试的 xHE-AAC),重点改善的其实是中低码率/低延迟场景下的编码质量,当然不是说其他方面就没有进步,不过随着码率的提高,新旧格式之间的差距会越来越小,到256Kbps 以上之后,现有的几个主流格式之间的差距真的已经很小了(除了 MP3,那家伙实在太老了)。

至于说兼容性,MP3 和 AAC 是不用担心的(部分很旧的嵌入式设备,如音响等,可能不支持 AAC)。Opus 在现代的手机和电脑上,只要用的是正常的播放器,也同样不应该出现兼容性问题(而且 Youtube 很早就换用 Opus 做主要编码器了),至于说嵌入式设备支持的仍然较少,使用前请注意确认(按理说 Opus 不用版权费,用的应该更多才对,大概还是太新了)。

如果你是追求尽可能的保留细节,那么推荐直接上 320Kbps 码率的 Opus,我测试下来在容差30的情况下是完全没有红点了。不过如果你是真的追求极致音质的人,那为什么不直接用 FLAC 之类的无损格式呢

另外我真的要多说一句,随着码率的提高,尤其是本文没有测试的更高的码率上,问题已经不是歌曲本身了,而是你用来听歌的设备,蓝牙的传输协议等等外部环境,毕竟歌还是要扬声器放出来才能被你听见的。与其在这里纠结用哪个格式才好,还不如去买个好点的音响或耳机带来的音质进步大。

以上

若没有特殊说明,这篇文章 《有损音频编码器(MP3/AAC/Opus)测试与对比》最先发表在NanNan's Blog。本文采用BY-CC-SA 4.0协议授权,禁止未经授权用于商业用途,如需非商业转载,请注明本文链接 https://blog.nannan.cool/archives/293/

评论

  1. dd
    Windows Chrome
    2年前
    2022-12-13 17:34:25

    赞,因我收藏音乐,这几年搜索过几次MP3AACOPUS比较的中文测试文章,您这篇是最专业、最详尽的!

    • 博主
      dd
      Windows Chrome
      2年前
      2022-12-13 20:02:02

      收藏音乐的话最好还是用无损算法(FLAC之类的),有损就算再先进还是有损失的啊。

  2. qdwang
    Windows Chrome
    已编辑
    2年前
    2023-4-12 21:29:23

    最近正好也在做这方面的研究。我使用的的方法是,写了个python脚本,针对无损与压缩后的wav文件,做两种余弦相似度的对比。需要注意的是,不同频谱显示程序,对不同编码的解码效果完全不一样,建议先用foobar这样比较安全的软件全部转换成wav再对比。(比如Reaper最新版,仍然会在解码AAC的时候,出现时间轴缩放问题)
    一种是整体的余弦相似度对比,同比特率下,AAC比OPUS好很多,甚至OPUS 512kbps仍然不高。另一个是波形数据先做相邻点的差值,再做余弦相似度对比。这种情况下,OPUS在所有码率下都会压AAC一头。
    我自己的结论,opus在波形的细节形态重构上,会好于aac。但是整体会有一些偏移导致整体余弦相似度不如aac。
    推荐可以把把波形放到最大,直到可以看到每个点的情况下,并排对比几个压缩后的文件与无损wav。你就能直观看到,这些算法到底会造成了什么损失,影响了哪些值的偏移。
    另外你可以试试用好的重采样算法看一下44.1khz -> 48khz -> 44.1khz 后的波形与源文件的对比,这个影响极大,得到的2个分数,都远不如上面的压缩算法。对比波形图,重采样的后的文件,可以说真的是把波形很大地改变了。所以我觉得opus的强制重采样,还是有一些不好的。
    当然这些都是数据层面,能不能听出来就另说了。

    • 博主
      qdwang
      Windows Chrome
      2年前
      2023-4-13 4:13:57

      感谢你的留言,Opus(包括新的xHE-AAC)和其他压缩算法不同的地方在于它更注重于听感(尤其是低码率下的听感)而不是技术上的数值,而针对听感的人工调优工作量是很大的,作为一个非盈利的开放格式,Opus强制48kHz采样率极大的可以降低人工调优的难度,而且现在大部分的音频都是以该采样率制作的;即使不是,相较于有损编码的损失,重采样的损失也可以忽略不计(至少在听感上是)。
      此外已经有很多研究指出在高码率下几乎所有编码都可以做到听感无损,差距几乎没有。因此 Opus 主要的发力点在于对流式传输的友好,即低码率下较大的质量优势,再加上它对听感的偏重,这确实会导致极端高的码率下某些技术数值会被 AAC 等超过,但是这样的码率非常鸡肋,几乎不会被用到。如果确实需要技术无损,我想大部分人还是会用 FLAC 之类的无损算法的。

      • qdwang
        NanNan
        Windows Chrome
        已编辑
        2年前
        2023-4-13 12:50:47

        我又用SoX做了一下测试,opus的重采样算法非常好,与sox的重采样算法非常接近。看来这不是一个问题。
        另外我做了一个2个wav的所有波数据相差大于0.5dB(人耳分辨极限)的计算,发现256kbps的AAC一般在0.5%的波数据差值大于0.5dB,opus则一般在4%。然而相邻差值余弦相似度又是opus比较好。
        于是,我感觉可以得到下面的结论:

        1. AAC更趋向于还原原本的wav数据,对于损失的数据,弥补能力不如opus。
        2. opus更擅长创造新的数据来弥补损失,使其波形与原wav相同,但是补的能力太强,导致整体会偏离一些原本的wav。

        可以有这样一个猜想。
        算法还原 -> opus -> AI生成
        aac处于“尽力用算法还原原始数据”的阶段。
        opus处于“尽力用算法还原原始数据”与“用AI生成好听数据”中间的情况。这就说明了,为什么opus的整体与原wav偏差比aac大,但是波形细节又比aac更好的原因。
        我在hydrogenaud.io看到一些对opus算法的解释,似乎也说明了这点。
        我想这应该就是对“对听感的偏重”的优化吧。

  3. yatra
    Windows Chrome
    1年前
    2023-9-14 21:34:45

    你好,想问下这个频谱对比是用的什么软件呢

    • yatra
      yatra
      Windows Chrome
      1年前
      2023-9-14 21:38:08

      好吧,看见了audition

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇