不同的音频格式具有不同的后缀,其压缩原理、单位时间的文件大小也不尽相同,总的来说,音频格式分为无压缩、无损压缩、有损压缩三类。
无压缩
无压缩格式以最简单粗暴的编码方式存储数据,描述声波的每一个方面都满打满算去数据化表示,其比特率恒定,不因声音的复杂度而灵活变通,因而体积庞大。主流的无压缩格式采用脉冲编码调制(PCM),原理可参考 本文,相当直观。
无压缩的典型代表是 WAV。通常一首三四分钟的歌曲,其 CD 规格的 WAV 格式能够达到 50~60 MiB 的体积。由于其在存储、传输方面的劣势,目前虽然还在「常见」范畴,但在消费端并不多用。
无损压缩
无损压缩的原理可参考 本文,无损压缩的一大特点是,压缩解压无限次,数据不会有一分一毫的变动,和一开始一模一样。
无损压缩的典型代表是 FLAC,它专为解码优化,所以在编码侧表现稍微逊色一些。一般来说,FLAC 的压缩率能达到一半左右,如上所述的歌曲,如果转换成 FLAC 格式,那就只有 20~30 MiB 了,只要你的设备支持播放,就能多存一倍的歌,听起来是不是很棒?
FLAC 可以自定义压缩等级,从 0 到 8,数字越大,压缩越强力,当然耗时也会增加。默认值是 5,因为它被认为是压缩比和压缩耗时的平衡点,再往上加,编码所需的额外时长与体积的进一步缩减不成比例,下面是一个我的实测数据,素材是购自 Mora,24/96 规格的 KOKIA – クリスマスの響き
,其无压 FLAC 原始体积为 254.3 MB,我将之转码为 WAV,然后以 WAV 为基础,开始各压缩等级的耗时测试。
压缩等级 | 压缩后体积(字节) | 压缩后与压缩前的体积之比 | 编码耗时(秒) | 版本号 |
---|---|---|---|---|
0 | 179998197 | 0.691 | 3.8592799 | 1.3.3 |
1 | 175878117 | 0.675 | 3.9855685 | 1.3.3 |
2 | 175576172 | 0.674 | 4.4076948 | 1.3.3 |
3 | 170616801 | 0.655 | 2.9340091 | 1.3.3 |
4 | 167614137 | 0.643 | 3.2959506 | 1.3.3 |
5 | 166629741 | 0.640 | 3.7879323 | 1.3.3 |
6 | 165323275 | 0.635 | 4.7092874 | 1.3.3 |
7 | 165014728 | 0.633 | 5.4718311 | 1.3.3 |
8 | 164675608 | 0.632 | 6.5338620 | 1.3.3 |
8 | 159371294 | 0.612 | 9.1464783 | 1.4.2 |
我所使用的 PowerShell 命令是 Measure-Command {flac -压缩等级数值 "源文件路径"}
,它会报告给我如下内容:
|
|
非常方便。
分析结果可知,压缩比逐步提高,耗时也是呈上升趋势的(虽然不知道为什么,到了 3 级突然耗时减少了不少,而且测试了好两次都是这样的结果)。我测试使用的 CPU 是 i7-6700HQ
,很多年前的移动端臭弟弟,如果你用的 CPU 更强悍,所需时间一定会更短。从绝对值上看,8 级的耗时比最短的 3 级也只多了 150% 左右。所以我个人倾向于无脑开 8 级,追求极致压缩,反正不会有丝毫数据损失,体积自然是越小越好,编码耗时,洒洒水而已。
iOS 等果子家的系统,其原生音乐软件不支持 FLAC 播放,但文件管理器又能,不过并不方便,所以只能依靠第三方软件来播放 FLAC。
FLAC,永远的神!
2022 年 11 月更新:测试了 FLAC 1.4.2 的压缩能力,控制变量,仅升级版本,数据已追加在表末行。
2025 年 2 月更新:测试了 FLAC 1.5.0 的压缩能力,该版本的重大升级是支持多线程压缩,能极大提高压缩效率。
由于电脑换了,有些数据需要重新测试。以下测试的压缩等级全部为 8,CPU 型号为 Intel Core i5-13600KF。本轮测试所使用的 PowerShell 命令是 Measure-Command {flac -压缩等级数值 "源文件路径" -j 线程数 -o "输出文件路径"}
,测试结果如下:
压缩后体积(字节) | 编码耗时(秒) | 版本号 | 线程数 | 压缩速度 |
---|---|---|---|---|
159371294 | 6.1766693 | 1.4.2 | 1 | - |
159371292 | 5.4804722 | 1.4.3 | 1 | - |
159371651 | 5.6419393 | 1.5.0 | 1 | 1.00× |
159371651 | 2.2495094 | 1.5.0 | 2 | 2.50× |
159371651 | 1.5604985 | 1.5.0 | 3 | 3.61× |
159371651 | 1.1826829 | 1.5.0 | 4 | 4.77× |
159371651 | 0.9661305 | 1.5.0 | 5 | 5.84× |
159371651 | 0.8313405 | 1.5.0 | 6 | 6.79× |
159371651 | 0.8013473 | 1.5.0 | 7 | 7.04× |
159371651 | 0.7391102 | 1.5.0 | 8 | 7.63× |
159371651 | 0.6677898 | 1.5.0 | 9 | 8.45× |
159371651 | 0.6495750 | 1.5.0 | 10 | 8.69× |
159371651 | 0.6383374 | 1.5.0 | 11 | 8.84× |
159371651 | 0.5941032 | 1.5.0 | 12 | 9.50× |
159371651 | 0.5914292 | 1.5.0 | 13 | 9.54× |
159371651 | 0.5900009 | 1.5.0 | 14 | 9.56× |
159371651 | 0.5897171 | 1.5.0 | 15 | 9.57× |
159371651 | 0.5647285 | 1.5.0 | 16 | 9.99× |
159371651 | 0.5790064 | 1.5.0 | 17 | 9.74× |
159371651 | 0.5821852 | 1.5.0 | 18 | 9.69× |
159371651 | 0.5725500 | 1.5.0 | 19 | 9.85× |
159371651 | 0.5798338 | 1.5.0 | 20 | 9.73× |
由于没有多次压缩取平均,所以上述数据仅供参考,了解大概的趋势。可以看到线程数增加对提速存在边际效应,提速上限大致是十倍。
有损压缩
MP3,随身听,这是广大 80 后 90 后的共同记忆了吧。有损压缩的奥义就是,在保证听感的前提下,尽可能多地节省空间,为此,不惜抛弃一部分数据,这也是「有损」的原因所在;也正因为它勇敢地作出了取舍,导致其压缩比相较于无损压缩更进一步,能干到四分之一左右,也就是说,之前提到的歌曲,如果转码到高品质 MP3,体积只有 10+ MiB,听起来真不错。MP3 压缩音频的原理解读可以看 这个视频。
于是有的人犯嘀咕了:这有损了,肯定影响听感吧?我不和这类人争辩,先做一轮 foobar2000 ABX 盲听测试指南,心中自有答案。
况乎 视频压制 也是有损压缩,怎么没见有谁抱怨说哪个小组出品的高质量压制观感和原盘有较大差异呀?合着眼睛不如耳朵敏锐是吧。老老实实承认人类感官确实比较迟钝,就完事了。因为喜欢无损听无损,这是个人偏好和自由,没有任何问题;但若是鼓吹说能听出有损无损有「一耳朵」的区别,那就……建议去报名声学实验室的志愿者嗯。
所以我们可以知道,有损压缩的好处就是极大地节约了空间,而且可以「忽悠」人的听觉。此外 MP3 的兼容性极佳,各种设备都能完美支持。
LAME 是目前最棒的 MP3 编码器,我最推荐的压缩等级是 V0,采用可变比特率,不仅效果好,体积也小。