视频压缩原理:从像素冗余到码率控制

视频编码的本质是去除冗余信息。一段未经压缩的 1080p30 视频,每秒数据量约为 1920×1080×3×30 ≈ 186 MB(以 RGB 8bit 计),一分钟即超过 11 GB。而 HEVC/H.265 能将同等画质的码率压缩到原始体积的 1/100~1/200,靠的就是系统性地消除四类冗余:空间冗余、时间冗余、统计冗余、视觉冗余。

核心原理:编码器并不直接存储每个像素,而是将画面拆解为“结构信息 + 残差信息”。结构信息用帧内预测、帧间运动补偿来描述;残差信息经过变换、量化后,大部分高频细节被舍弃,再通过熵编码压缩成紧凑的比特流。解码端则按相反流程重建画面。

色彩空间:YUV 是 HEVC 的默认工作空间

人眼对亮度(Luma)的敏感度远高于色度(Chroma)。因此 HEVC 编码前,RGB 像素会被转换为 YUV(YCbCr) 色彩空间,并对色度通道进行下采样。最常见的格式是 4:2:0,即每 2×2 像素块共享一组 Cb/Cr 值,色度分辨率仅为亮度的一半。这一操作直接减少了一半以上的原始数据量,且人眼几乎无法察觉。

色彩采样格式亮度/色度分辨率比相对数据量典型应用
4:4:4每个像素独立色度100%专业调色、屏幕内容
4:2:2水平减半约 67%广播级采集、后期制作
4:2:0水平垂直均减半50%HEVC 主流消费级视频

HEVC 编码器内部始终以 YUV 处理数据,但输出容器(如 MP4)中会携带色彩空间元数据(colour_primaries、transfer_characteristics、matrix_coefficients),播放器据此将 YUV 还原为 RGB 显示。

帧类型与 GOP 结构

HEVC 定义了三种核心帧类型,它们在压缩效率和随机访问能力上各有取舍:

  • I 帧(帧内编码帧):仅利用当前帧自身像素进行预测,不依赖其他帧。压缩率最低,但可作为随机访问点和错误恢复点。
  • P 帧(前向预测帧):参考前面已编码的 I 帧或 P 帧,通过运动估计消除时间冗余。压缩率高于 I 帧。
  • B 帧(双向预测帧):同时参考前后两个方向的帧,可获得最高压缩率,但引入额外延迟,不适合实时低延迟场景。

GOP(Group of Pictures,图像组) 描述的是 I 帧之间的帧序列结构。一个典型的 GOP 可表示为:

GOP = I B B P B B P B B P B B P B B I
长度 = 16 帧,I 帧间隔 = 16,P 帧间隔 = 3

其中两个关键参数:GOP 长度(I 帧间隔)决定随机访问粒度和码率波动;P/B 帧间隔决定时间预测链的长度。HEVC 还引入了 分层 B 帧(Hierarchical B-frames) 结构,通过为不同层级的 B 帧分配不同的量化参数(QP),在码率分配上实现更精细的控制。

HEVC 编码流程与 GOP 帧结构示意 编码器核心流程 输入 YUV 帧 帧内/帧间 预测 变换 + 量化 (DCT + QP) 熵编码 (CABAC) HEVC 比特流 重建帧用于后续预测参考 GOP 帧序列示例(长度 12,含分层 B 帧) I 帧号 0 B 帧号 1 B 帧号 2 P 帧号 3 B 帧号 4 B 帧号 5 P 帧号 6 B 帧号 7 B 帧号 8 P 帧号 9 B 帧号 10 B 帧号 11 I 帧号 12 I 帧(随机访问点) P 帧(前向参考) B 帧(双向参考) GOP 长度 = 12 帧 | I 帧间隔 = 12 | 编码顺序 ≠ 显示顺序(B 帧需重排)

GOP 参数与编码场景的匹配

GOP 结构的选择直接影响码流特性,面试中常要求根据场景判断合适的 GOP 配置:

  • 视频会议 / 直播:要求低延迟,通常使用 全 I 帧或 IPPP 结构(无 B 帧),GOP 长度 1~2 秒,便于丢包恢复。
  • 短视频 / 点播:可接受较高延迟,采用 分层 B 帧,GOP 长度 2~5 秒,追求极致压缩率。
  • 广电 / 后期制作:需要精确到帧的剪辑,GOP 长度通常 ≤ 1 秒,且要求每个 GOP 独立可解码。

常见误区与面试要点

误区 1:认为 I 帧越多画质越好。 I 帧压缩率低,过多 I 帧会浪费码率,但能提升错误恢复能力。正确做法是:在带宽充足时增加 I 帧频率,带宽受限时优先保证 P/B 帧质量。

误区 2:混淆“编码顺序”与“显示顺序”。 B 帧需要参考未来的帧,因此编码器必须重排序:先编码参考帧,再编码 B 帧。例如显示顺序 1、2、3,编码顺序可能是 3、1、2。解码器通过 DTS/PTS 时间戳恢复显示顺序。

面试加分点:HEVC 相比 H.264 在 GOP 层面引入了 参考帧集(RPS) 机制,用更灵活的参考帧管理替代了 H.264 的滑动窗口,使得分层 B 帧结构可以做到任意层级的随机访问,同时保持更高的编码效率。

案例:从 YUV 到 HEVC 码流的完整链路

假设输入一段 1080p60 的屏幕录制视频(含大量静态区域),编码器处理流程如下:

  1. 将 RGB 转换为 YUV 4:2:0,色度数据量减半。
  2. 划分 CTU(编码树单元,最大 64×64),对静态区域使用 skip 模式,几乎不产生残差。
  3. 对动态区域进行运动估计,生成运动矢量;残差经 DCT 变换和量化后,大量高频系数归零。
  4. 使用 CABAC 熵编码,将量化系数、运动矢量、预测模式等压缩为二进制码流。
  5. 封装为 MP4 或 TS,携带 GOP 结构信息和色彩空间元数据。

最终码率可能从原始 1.5 Gbps 降至 8 Mbps,压缩比接近 200:1,而主观画质损失极小。这一过程的核心权衡始终围绕:码率、画质、延迟、复杂度 四者的平衡,也是 HEVC 面试中反复出现的考察主线。