🎬 第四章 音频基础
📄 一句话概括

无损压缩的天花板只有 2 倍左右;有损能到十几二十倍,靠的是丢掉听不出来的部分。

📝 本节和前面几节的关系

4.1 把音频本身过了一遍,4.2 开始进入压缩与编码。

一、为什么必须压缩

4.1.2 算过:CD 音质一分钟原始数据约 10.1 MB。 一首 4 分钟的歌就是 40 MB,一张 CD 七百多兆,而网络传输要的是秒级完成。 所以压缩不是【为了省点空间】,而是从【能不能传】这一步开始的刚需。

二、两条天花板

无损压缩:只利用统计冗余,天花板大约 2 倍。FLAC 的 700 kbps 就是这条线。 有损压缩:还能利用感知冗余,能到十几倍甚至二十倍。 这个差距说明一件事:真正省下空间的是【丢】,不是【压】。

三、能压掉什么:两类冗余

统计冗余——数据里有重复与规律,可以用更短的码表示。 比如相邻采样点高度相关,那就只存差值;这就是预测编码的思路。 感知冗余——有些信息人耳本来就听不到,存下来也没人听得见。 比如强音附近的弱音会被掩蔽,那一段直接丢掉,一分钱不花。 无损只能动第一类,有损两类都能动——差距就出在这里。

四、压缩的本质是取舍

压缩比的另一面是质量、体积、算力三者之间的平衡。 要压得狠,就得算得更复杂(算力上去),或者丢得更多(质量下来)。 所以没有【最大压缩比】这种指标——只有【在这个码率下,质量还能不能接受】。 带着这个视角去看 4.2 后面的内容,会顺很多。

五、动手 Demo:音频能被压掉多少

拿 CD 音质做基准,看有损编码把它压到什么程度。

raw = 44100 * 2 * 2 * 8 / 1000.0        # kbps
print("原始 PCM:%.0f kbps" % raw)
for name, br in [("FLAC", 700), ("MP3 320", 320),
                 ("AAC 128", 128), ("Opus 64", 64)]:
    print("%-9s %5d kbps  压缩比 %5.1f : 1  相对原始 %3.0f%%"
          % (name, br, raw / br, br * 100.0 / raw))

实跑输出:

--------------------------------------------------------------------
音频能被压掉多少
--------------------------------------------------------------------

拿 CD 音质做基准,看有损编码把它压到什么程度。

  原始 PCM:1411 kbps

  格式        码率(kbps)     压缩比       相对原始
  -------------------------------------------------
  FLAC        700            2.0 : 1      50%
  MP3 320     320            4.4 : 1      23%
  AAC 128     128            11.0 : 1     9%
  Opus 64     64             22.1 : 1     5%

  FLAC 是无损,压缩比只有 2 倍左右——**无损的天花板就在这儿**。
  有损能到十几倍二十倍,**靠的是【丢掉听不出来的部分】**,这正是 4.2 节的主题。

FLAC 是无损,压缩比只有 2 倍左右——无损的天花板就在这儿。 有损能到十几倍二十倍,靠的是【丢掉听不出来的部分】,这正是 4.2 节的主题。

30 秒实验

  1. 拿一首 4 分钟的 WAV 估算体积,再和同曲的 MP3 对比。
  2. 算一下这个倍数,它对应的就是【被丢掉的那部分】。

常见误区

  1. 以为无损压缩能压很多。它只利用统计冗余,天花板在 2 倍左右。
  2. 觉得有损就是【糊】。做得好的有损,人耳分辨不出来。
自测三问(点开对答案) 1. 无损压缩为什么只能压到 2 倍左右? —— 它一点信息都不丢,只能靠统计冗余压缩,天花板有限。 2. 有损为什么能压到 20 倍? —— 它还能利用感知冗余,丢掉人耳听不出来的部分。 3. 压缩的本质是什么? —— 是质量、体积、算力三者之间的取舍,不存在单纯的最大压缩比。

相关笔记