AAC和MP3在码率压缩上的一些事

对于我们APP而言,是在线语音课程,所以我们两者都要兼顾,要文件尽可能小,并且要保真音质不会发生明显变化,我们确定选择64kbps的AAC文件作为我们播放的格式。这个参数下,我们的音频课程音质变化不明显,音质可以兼顾到,提交从50M的原文件被压缩到了10M,相当于2分钟的音乐用1M的大小,这样大大节省了用户的流量。并最大可能保证音质。

AAC和MP3在码率压缩上的一些事
最近公司App用户反馈,我们使用的mp3文件太耗流量。显然是我们mp3的体积太大。 怎么处理?
  • 我们准备了一个20分钟的音频原文件
  • 准备一个音频处理软件(Mac版) Adobe Audition CC 2017  密码:2uqj

下面我们看一个表格,这个表示对比,这是我对同一音频,进行压缩对比后的结果。


压缩测数据

现在我们讲解下表格,有表格可以看出,我们现场录制的22分钟原文件的mp3大小是52.9M,这个体积已经很大了。

第三方压缩提供个我们线上的mp3大小是31.7M。(ps:其实也不小)

那我自己用软件压缩,不同的码率,压缩后,体积依次减小。

现在可以看出,我们52.9M的文件可以被压缩到3.4M

那么问题来了,我们为什么不直接压缩到3.4M呢,这样体积小,加载快,省流量,省时间。其实问题很简单,小体积,音质差啊,不能让用户听音质太差的音频啊。那什么是合理区间呢?

下面我们看看mp3压缩后,图谱变化:
  • MP3:192kbps:如图发生范围超过10KHz,高音区保存完整。
192kbps的mp3图谱

MP3:128kbps:如图发生范围超过10KHz,高音区保存完整,看不错区别。

128kbps的mp3图谱

MP3:64kbps:我们跳过96kbps,直接看64kbps,如图发生范围超过10KHz,高音区部分丢失,10KHz的地方有一条齐齐的线,有点像小草苗被割草机去掉了头,长的高的,脑袋没有了,如果看不清,请看下面20kbps的。

这里写图片描述

MP3:20kbps:如图发生范围超过10KHz,高音区失去了,在4kHz的以上的频率全部被舍弃,保留了4KHz以下的音频信息,这个更像被割过的小草吧,脑袋一个不剩,齐刷刷的。被割去的就是高音部分,所以听着声音是低沉的,高音不存在了。

这里写图片描述
看完了mp3的,我们来看看aac的把,

AAC:192kbps:如图10KHz左右都保存完好,音质无变化。

这里写图片描述

AAC:64kbps:如图我们跳过128kbps,96kbps,直接到64kbps,还记得我们MP3的64kbps吗?MP3在10KHz以上的部分有失去信息,而AAC保存了下来。

这里写图片描述

AAC:20kbps:如图我们跳到了20kbps,高音区忍让有所保留,所以音质变化不太明显,相比MP3的变化就很明显,因为失去了大量的高音区。

这里写图片描述

那么为什么回事这样的,这个与MP3和AAC的压缩算法有关,压缩,一定是要失去一部分信息的,也就是我们把192kbps的信息在单位时间内压缩到20kbps,也就是我们所说的码率懂192降到了20,所以我们文件的体积从30M减少到了3M多,码率降低10倍,体积也降低10倍。码率降低一定是会失去音频写的的信息的,但是因为压缩算法不同,抛弃的信息就不同。那aac在压缩10倍后,音质是不是没有变差,不是的,音质也差了,但是相比MP3不是那么明显。如果用耳朵去听,64kbps的AAC和92kbps的音质区别,很难分辨出来,或者说分辨不出。

那么如果你是听音乐,为了更好的听觉体验,建议192kbps-128kbps的文件,当然再大点也没问题。这样可以尽量保存完整的低音和高音信息,可以带来更好的听觉体验。不建议使用128kbps以下的MP3或者AAC,或丢失音乐信息。

那么演讲或者课程类的语言文件呢?这个要看人所能听到的频率范围。那一个人能听到的频率范围是多少呢?

28岁时,22——17000Hz
40岁时,25——14000Hz
60岁时,35——11000Hz

可以看出一个人能听到的频率是在:20 ---20KHZ,所以我们10kHz左右的信息是不可以失去的,如果大量失去,我们就能感知到。

结论

我们说了这么多,总要有个结论吧,对于我们APP而言,是在线语音课程,所以我们两者都要兼顾,要文件尽可能小,并且要保真音质不会发生明显变化,我们确定选择64kbps的AAC文件作为我们播放的格式。这个参数下,我们的音频课程音质变化不明显,音质可以兼顾到,提交从50M的原文件被压缩到了10M,相当于2分钟的音乐用1M的大小,这样大大节省了用户的流量。并最大可能保证音质。(ps:如果你们觉得只要音质不保险,那96kbps,最够保险了;如果是MP3,那就用96kbps吧,如果质量优先,体积第二,那就128kbps吧)