6.1.2 压缩何以可能:四类冗余(Four Types of Redundancy)
上一节的编年史告诉我们,视频编码四十年只做一件事:压缩。但压缩的空间从哪里来?一段未经压缩的 1080p 视频码率约 622 Mbit/s,编码器能把它压到几 Mbit/s 而不怎么 "露馅"——被省掉的比特并非信息,而是冗余。
冗余(Redundancy) 指的是数据中 可以被预测、可以被忽略、或者重复出现 的部分。视频编码的一切技术,都建立在对四类冗余的系统利用上。这四类冗余其实并不陌生——本书前面的章节已经分别与它们打过照面,本节做一次集中归拢。
空间冗余(Spatial Redundancy):相邻像素彼此相似
单帧图像内部,相邻像素的颜色通常高度相关:一片天空是相近的蓝,一面墙是均匀的白。逐像素直接存储,等于把 "差不多的值" 重复存了成千上万遍。
利用空间冗余的两条主线,我们在第三章都已见过:预测(用已编码的邻域像素外推当前块,即帧内预测的思想雏形)与 变换(用 3.5 的 DCT 把能量集中到少数低频系数上)。第三章 3.4 节的标题就叫 "空域冗余控制"——从光流到色度处理,都是这条战线上的武器。
时间冗余(Temporal Redundancy):相邻帧彼此相似
视频是时间轴上的图像序列,而相邻帧之间的差异往往小得惊人。我们在 5.3.2 实测过:场景内部的帧差强度只有 0.002~0.01,绝大多数像素在帧间几乎不动;真正 "整体替换" 的时刻——场景切点——在几分钟的视频里也屈指可数。
这就是 帧间预测(Inter Prediction) 的立足点:与其存一帧完整画面,不如存 "上一帧的哪块内容移动到了哪里"。运动补偿(Motion Compensation)所瞄准的,便是时间冗余。
统计冗余(Statistical Redundancy):符号出现的概率并不均匀
经过预测与变换之后,残差数据的取值分布会呈现极强的偏斜:小值极多,大值极少;量化之后更是大量系数归零。若用等长编码表示每个符号,平均码长就被迫对齐 "最坏情况"——这是浪费。
信息论告诉我们,信源平均码长的理论下限是其 信息熵(Entropy) [7] :
其中 为符号 出现的概率。熵编码(Entropy Coding) 的任务就是逼近这个下限:给高频符号分配短码字、给低频符号分配长码字。我们在 1.6.3 学过的哈夫曼编码就是经典方案;现代编码器则普遍采用压缩效率更高的算术编码家族(6.2.4 的 CABAC 即是代表)。
视觉冗余(Psychovisual Redundancy):人眼并不是什么都能看见
前三类冗余的利用都 "不伤画质",第四类则激进得多:人眼不敏感的信息,可以直接扔掉。
- 人眼对 色度 的分辨力远低于亮度 → 2.6.3 的 YUV 色度降采样(4:2:0 直接砍掉 3/4 的色度数据)
- 人眼对 高频细节 的误差不敏感 → 量化时对高频系数 "下重手"
这类 "借感知之名、行删减之实" 的操作,集中体现在编码四环中的 量化 环节——它是整个编码流程中 唯一不可逆的有损环节,也是画质与码率博弈的主战场。
小结:冗余即空间
四类冗余与压缩手段的对应关系,可以浓缩为一张表:
| 冗余类型 | 来源 | 主要利用手段 | 有损? |
|---|---|---|---|
| 空间冗余 | 帧内相邻像素相关 | 帧内预测、变换编码 | 否 |
| 时间冗余 | 帧间内容相似 | 帧间预测、运动补偿 | 否 |
| 统计冗余 | 符号概率分布不均 | 熵编码 | 否 |
| 视觉冗余 | 人眼感知局限 | 色度降采样、量化 | 是 |
值得记住的是:预测、变换、熵编码本身都是可逆的——它们负责榨取信息论意义上的压缩潜力;真正决定 "损失多少画质、换多少码率" 的,只有量化。这也是为什么每一代编码规格的演进,都围绕着 "把预测做得更准、把变换做得更贴、把熵编码做得更狠" 展开,好让量化手里有更多的余粮。
有了四类冗余这张地图,编码四环的设计逻辑就呼之欲出了。下一节,我们把它组装成完整的混合编码框架。