3. 视频压缩原理
视频之所以能被压缩到原始数据量的几十分之一甚至几百分之一,根本原因在于原始视频中存在大量“冗余”。编码器的任务,就是把这些冗余识别出来、去掉,再用尽量紧凑的方式重新表达。理解空间冗余、时间冗余、视觉冗余这三类冗余,以及变换、量化、熵编码这三步核心流程,是理解 H.264 与 H.265 差异的基础。
一、三类冗余:压缩的“原料”
空间冗余指同一帧画面内部相邻像素之间的强相关性。例如一面白墙、一片天空,相邻像素亮度几乎相同,直接逐像素存储非常浪费。编码器通过帧内预测,用已编码的邻近像素去“猜”当前块,只记录残差,从而消除空间冗余。
时间冗余指相邻帧之间内容高度相似。摄像机每秒 25/30 帧,多数情况下画面只是轻微移动。编码器通过帧间预测,在参考帧中搜索最匹配的块,只记录运动矢量与残差,而不是整帧重传。这是视频压缩收益最大的来源。
视觉冗余指人眼对某些信息不敏感。人眼对亮度远比对色度敏感,对低频轮廓比对高频细节敏感,对静止区域比对运动区域敏感。因此可以色度下采样、对高频系数粗量化,用“看不出来”的代价换取码率下降。
二、核心流程:预测 → 变换 → 量化 → 熵编码
无论 H.264 还是 H.265,主流程都可归纳为一条混合编码流水线:先把图像划分成块,做预测得到残差,再对残差做变换,然后量化,最后熵编码输出码流。解码端则反向执行。
三、各环节的基本思想
- 预测:不直接编码像素,而是编码“预测值 + 残差”。预测越准,残差越小,后续编码越省码率。帧内预测利用同帧已重建的邻居,帧间预测利用参考帧中匹配块。
- 变换:把残差从空间域转到频率域。能量集中在低频少数系数上,便于后续压缩。H.264 使用 4×4/8×8 整数 DCT,H.265 使用 4×4 到 32×32 的整数变换。
- 量化:用 QP(量化参数)控制每个变换系数的精度。QP 越大,量化越粗,系数被压得越小甚至归零,码率下降但失真增加。这是唯一不可逆的有损环节。
- 熵编码:对量化后的系数、运动矢量、预测模式等做无损压缩。H.264 支持 CAVLC 与 CABAC,H.265 仅保留 CABAC 并增强上下文建模,压缩效率更高。
四、参数与效果对照
| 环节 | 作用 | 关键参数 | 对码率/质量的影响 |
|---|---|---|---|
| 帧内预测 | 消除空间冗余 | 预测模式、块大小 | 模式越丰富,残差越小,码率越低 |
| 帧间预测 | 消除时间冗余 | 运动矢量精度、参考帧数 | 搜索越精细,残差越小,但计算量上升 |
| 变换 | 能量集中 | 变换块尺寸 | 大块利于平坦区,小块利于细节区 |
| 量化 | 有损压缩核心 | QP | QP 每增 6,码率约减半,质量下降 |
| 熵编码 | 无损压缩 | CABAC/CAVLC | CABAC 比 CAVLC 省约 10%~15% 码率 |
五、案例与场景
以一段 1080p、25fps 的会议视频为例。画面中人物基本静止,背景固定。编码器对背景区域大量使用帧间预测,运动矢量接近零,残差极小;对人物面部细节使用较小变换块和较细量化,保证清晰度;对大面积纯色背景使用大块变换并粗量化,系数大量归零。最终码率可从原始约 1.5Gbps 降到 2~4Mbps。
典型编码参数示例(H.264):
profile = High
level = 4.1
QP = 26
GOP = 50
参考帧数 = 3
熵编码 = CABAC
六、常见误区与复盘
误区一:压缩就是“丢帧”。 实际上帧间预测保留的是运动信息与残差,帧并没有被简单丢弃,而是被更紧凑地表达。
误区二:QP 越小越好。 QP 过小会导致码率暴涨,带宽和存储无法承受;应根据目标码率和画质要求折中。
误区三:变换和量化是一回事。 变换本身可逆,量化才是有损环节。把两者混为一谈,容易误判画质损失的来源。
复盘时可按“预测是否准确 → 变换块是否匹配内容 → QP 是否合理 → 熵编码是否高效”的顺序排查。多数码率异常,根源在预测与量化,而非熵编码本身。
掌握这三类冗余与四步流程后,再对比 H.264 与 H.265 时就能看清:H.265 的收益主要来自更灵活的块划分、更丰富的帧内预测模式、更精细的运动补偿以及更强的 CABAC 上下文建模,而底层思想仍然是“预测 + 变换 + 量化 + 熵编码”这条主线。