4. 编码原理总览

一段 1080p、30fps、8bit 的原始视频,每秒数据量约为 1920×1080×3×30 ≈ 186 MB,一分钟就超过 11 GB。如果不做压缩,无论是网络传输、磁盘存储还是内存解码,都无法承受。视频编码的本质,就是在“尽量不被人眼察觉”的前提下,把视频数据量降低两到三个数量级。要做到这一点,编码器必须系统性地消除视频中存在的多种冗余。

一、视频中的四类冗余

原始视频之所以“可压缩”,是因为它包含大量重复和可预测的信息。这些重复信息被称为冗余,主要分为四类:

  • 空间冗余:同一帧画面内相邻像素高度相似。例如一面白墙、一片天空,相邻像素值几乎相同,直接逐像素存储是浪费。
  • 时间冗余:相邻帧之间内容变化很小。30fps 下,前后两帧往往只有少量物体移动,大部分背景完全一致。
  • 视觉冗余:人眼对亮度敏感、对色度不敏感,对低频细节敏感、对高频细节不敏感,对静止区域敏感、对快速运动区域不敏感。超出人眼感知能力的信息可以被丢弃。
  • 统计冗余:像素值或变换系数的出现概率并不均匀,某些符号出现频率远高于其他符号,可以用变长编码进一步压缩。
核心思想:视频编码不是“随便丢数据”,而是有依据地去除冗余。空间冗余靠帧内预测和变换,时间冗余靠帧间预测和运动补偿,视觉冗余靠量化,统计冗余靠熵编码。

二、有损压缩与无损压缩

无损压缩只去除统计冗余,解码后可以完全恢复原始像素,典型代表是 Huffman 编码、算术编码、游程编码。无损压缩的压缩比通常只有 2:1 到 3:1,远不能满足视频需求。

有损压缩则允许解码结果与原始像素存在差异,只要差异在人眼可接受范围内即可。H.264/H.265 属于有损压缩,其压缩比可达 100:1 甚至更高。有损压缩的关键在于“量化”:把变换后的小系数直接置零或粗化,从而大幅减少需要编码的数据。量化越粗,压缩比越高,但画质损失越大。

压缩类型 是否可完全恢复 典型压缩比 主要手段 在 H.264/H.265 中的位置
无损压缩 可以 2:1 ~ 3:1 熵编码、游程编码 CABAC/CAVLC 熵编码阶段
有损压缩 不可以 50:1 ~ 200:1 量化、预测、变换 预测、变换、量化阶段

三、混合编码框架的基本组成

H.264 和 H.265 都采用“混合编码框架”,即把预测编码、变换编码和熵编码组合在一起。其基本流程可以概括为:输入帧先被划分为宏块或编码树单元,然后依次经过预测、变换、量化、熵编码,最终形成码流。解码则是逆过程。

下面这张图展示了混合编码框架的核心数据流与模块关系:

H.264 / H.265 混合编码框架数据流 输入视频帧 YUV 4:2:0 分块 / CTU 划分 宏块 / 编码树单元 预测编码 帧内 / 帧间预测 变换 + 量化 DCT / DST + QP 熵编码 CABAC / CAVLC 输出码流 NAL 单元 残差 原始 - 预测 参考帧缓存 已重建帧 运动估计 MV / 参考索引 反量化 + 反变换 重建残差 重建帧 预测 + 残差 环路滤波 去块 / SAO 关键说明: 1. 预测编码消除空间冗余(帧内)和时间冗余(帧间);2. 变换将残差能量集中到低频,量化丢弃视觉不敏感的高频信息; 3. 熵编码消除统计冗余;4. 环路滤波改善重建帧质量,避免预测误差累积;5. 解码器按相反顺序执行,保证编解码一致。

四、案例:一帧画面如何被压缩

假设有一帧 1920×1080 的会议画面,背景是静止的白墙,人物头部有轻微移动。编码器大致会这样处理:

  1. 把画面划分为若干 CTU,每个 CTU 再递归划分为更小的 CU。
  2. 对背景区域,帧间预测发现与前一帧几乎相同,运动矢量接近 (0,0),残差接近零。
  3. 对人物头部区域,帧间预测找到匹配块,记录运动矢量,残差只包含头部边缘的少量变化。
  4. 对残差做 DCT 变换,能量集中在左上角低频系数。
  5. 量化时,大量高频系数被置零,只保留少数非零系数。
  6. 熵编码对非零系数、运动矢量、预测模式进行算术编码,最终码流可能只有原始数据的 1/100。
理解混合编码框架的关键:编码器内部有一个“解码回路”。它必须用与解码器完全相同的方式重建图像,否则后续帧的预测会越来越偏。因此反量化、反变换、环路滤波不是可选项,而是编码器的一部分。

五、常见误区与复盘

  • 误区一:压缩比越高越好。压缩比过高意味着量化过粗,会出现块效应、模糊、振铃等失真。实际编码需要在码率和质量之间做权衡。
  • 误区二:无损压缩可以解决视频存储问题。无损压缩比通常只有 2:1 到 3:1,对原始视频来说杯水车薪,必须依赖有损压缩。
  • 误区三:帧间预测只记录“移动了多少”。帧间预测还包括参考帧选择、亚像素插值、加权预测等复杂机制,运动矢量只是其中一部分。
  • 误区四:量化只是简单除法。量化步长由 QP 控制,QP 与码率、画质呈非线性关系,是编码器最核心的调节旋钮之一。

总结来看,视频编码之所以必要,是因为原始视频数据量远超传输和存储能力;而视频之所以能被大幅压缩,是因为它同时存在空间、时间、视觉和统计四类冗余。H.264/H.265 的混合编码框架,正是围绕这四类冗余设计的系统性解决方案:预测去空间和时间冗余,变换与量化去视觉冗余,熵编码去统计冗余。理解这条主线,后续学习帧内预测、帧间预测、变换量化、熵编码和环路滤波时,就能清楚每个模块在整个框架中的位置和作用。