视频压缩基础:从 MPEG-1 到 H.264/AVC
视频本质上是连续的图像帧序列。如果对每帧独立压缩(如 Motion JPEG),压缩效率很低,因为相邻帧之间通常存在极强的相似性——这就是时间冗余。
视频压缩的核心突破在于:不再独立编码每帧,而是利用帧间的时间相关性,只编码帧与帧之间的"变化"。这个思想催生了运动估计(Motion Estimation)和运动补偿(Motion Compensation)技术,使视频压缩比比单纯的空间压缩提高了 10–100 倍。
本篇将从视频压缩的基本概念讲起,系统讲解 MPEG-1 到 H.264/AVC 的演进,重点拆解 H.264 的完整编码架构。
1. 空间冗余(Spatial Redundancy):同一帧内相邻像素的相关性
2. 时间冗余(Temporal Redundancy):相邻帧之间像素的相关性
3. 视觉冗余(Visual Redundancy):人眼对某些信息不敏感
空间冗余的消除方法与图像压缩相同(DCT/小波变换 + 量化)。时间冗余的消除则需要帧间预测和运动估计。
视频编码将帧分为三种类型:
| 帧类型 | 名称 | 编码方式 | 特点 |
|---|---|---|---|
| I 帧 | Intra-coded | 仅帧内编码(类似 JPEG) | 独立解码,文件最大 |
| P 帧 | Predicted | 帧间预测(参考前面的帧) | 文件较小,需要参考帧 |
| B 帧 | Bi-directional | 双向预测(参考前后帧) | 文件最小,压缩比最高 |
GOP 定义了 I、P、B 帧的排列模式。一个典型的 GOP 结构:
I B B P B B P B B P B B I
GOP 的长度(两个 I 帧之间的帧数)通常为 12–30 帧。GOP 越长,压缩比越高(因为 P/B 帧占比更大),但随机访问能力越差(需要从最近的 I 帧开始解码)。
运动估计是视频压缩的核心技术。其基本思想:
1. 运动估计:在参考帧中搜索与当前块最匹配的区域,记录偏移量(运动矢量)
2. 运动补偿:用参考帧中匹配区域的像素作为当前块的预测值
3. 残差编码:只编码当前块与预测值之间的差值(残差)
运动矢量(Motion Vector, MV)描述了当前块在参考帧中的位移。如果运动估计准确,残差的能量远小于原始像素值,可以用很少的比特编码。
块匹配算法最常用的运动估计方法是块匹配(Block Matching)。对于当前帧中的每个块,在参考帧的搜索窗口内寻找最佳匹配:
常用的匹配准则:
- SAD(Sum of Absolute Differences):计算简单,最常用
- SATD(Sum of Absolute Transformed Differences):更准确,计算量稍大
- MSE(Mean Squared Error):数学性质好,但计算量大
搜索算法从全搜索(穷举所有可能的 MV)到快速搜索(三步搜索、菱形搜索等),在速度和精度之间权衡。
亚像素运动估计真实的运动往往不是整像素的整数倍。视频编码器支持亚像素精度的运动估计:
- 半像素:在整像素位置之间插值(H.264 使用 6-tap FIR 滤波器)
- 四分之一像素:在半像素位置之间进一步插值(H.264 支持)
亚像素插值提高了运动估计的精度,减少了残差能量。H.264 使用 6-tap 滤波器进行半像素插值,4-tap 滤波器进行四分之一像素插值。
运动估计的精度和速度由搜索算法决定。三种常用匹配准则的权衡:
| 准则 | 计算公式 | 精度 | 速度 |
|---|---|---|---|
| SAD | $\sum |I_c - I_r|$ | 中 | 最快 |
| SATD | $\sum |\text{HAD}(I_c - I_r)|$ | 高 | 中 |
| MSE | $\frac{1}{N^2}\sum (I_c - I_r)^2$ | 高 | 最慢 |
其中 $\text{HAD}$ 是 Hadamard 变换。SATD 在率失真意义上更接近最优,广泛用于 H.264/HEVC 的模式决策。
三步搜索(TSS)的步骤:1. 以当前块位置为中心,第一步搜索 8 个步长为 4 的候选位置
2. 找到最小 SAD 的位置作为新中心,第二步搜索步长为 2 的 8 个位置
3. 第三步搜索步长为 1 的 8 个位置
搜索范围(Search Range)通常为 ±16 到 ±64 像素。搜索范围越大压缩比越高,但计算量以 $O(SR^2)$ 增长。
菱形搜索(DS)利用运动矢量通常接近零的特点,优先搜索中心附近:1. 以当前块为中心,搜索大菱形模板(9 个点)的 SAD
2. 最小 SAD 点成为新中心;若最小点在菱形中心则进入小菱形模板
3. 重复直到中心为最小点
菱形搜索的平均搜索点数远少于 TSS,在自然视频中通常更高效。
MPEG-1 是第一个成功的视频压缩标准,用于 VCD(Video CD)和 CD-ROM 存储。
关键特征:
- 分辨率:352×240(NTSC)或 352×288(PAL)
- 码率:1.5 Mbps
- 帧类型:I、P、B
- 变换:8×8 DCT
- 运动补偿:16×16 宏块,半像素精度
- 熵编码:Huffman
MPEG-2 是 MPEG-1 的增强版,用于 DVD、数字电视和蓝光光盘。
关键改进:
- 支持隔行扫描视频
- 分辨率最高 1920×1080
- 码率最高 80 Mbps
- 更灵活的帧间预测(支持场预测和帧预测)
- 支持可变长编码
H.263 为低码率通信(如视频会议)设计。
关键改进:
- 更灵活的宏块划分(支持 8×8 块的运动补偿)
- 改进的运动预测(非限制运动矢量)
- 更高效的熵编码
MPEG-4 引入了基于对象的编码概念,但在实践中大多数实现仍使用基于块的编码。
H.264 是视频压缩的里程碑标准,由 ITU-T VCEG 和 ISO/IEC MPEG 联合开发(Joint Video Team, JVT)。它在 MPEG-2 的基础上提供了约 50% 的压缩效率提升,至今仍是使用最广泛的视频编码标准。
H.264 是一个混合编码器(Hybrid Codec),结合了帧内预测、帧间预测、变换、量化和熵编码:
输入帧 → 帧内/帧间预测 → 残差计算 → 整数 DCT 变换 → 量化 → 熵编码 → 码流
↑ |
└──── 反量化 → 反变换 → 重建帧 ←────┘
|
环路滤波 → 参考帧存储
H.264 以 16×16 宏块为基本编码单元。每个宏块可以进一步划分为更小的块:
帧间预测的宏块划分:
| 模式 | 划分方式 | 块大小 |
|---|---|---|
| 16×16 | 不划分 | 1 个块 |
| 16×8 | 水平划分 | 2 个块 |
| 8×16 | 垂直划分 | 2 个块 |
| 8×8 | 四等分 | 4 个块 |
| 8×8 子划分 | 每个 8×8 可再分为 | 8×4, 4×8, 4×4 |
这种灵活的划分使得编码器可以在平坦区域使用大块(减少运动矢量开销),在细节和运动复杂的区域使用小块(提高预测精度)。
P 帧和 B 帧的预测值可以是多个参考帧的加权平均:
其中权重 $w_1, w_2, w_o$ 可以由编码器显式传输,或由解码器隐式推导。加权预测对于淡入淡出场景特别有效——物体本身没有运动,但整个场景的亮度在变化。
直接模式(Direct Mode)B 帧中的直接模式不解码 MV,而是从空间相邻块或时域相邻帧推导:
- 时域直接:从最近的参考帧中推断当前块的 MV
- 空域直接:从前一编码块的空间邻居推断
直接模式不需要传输 MV,只需要传输残差,大幅节省比特。
运动矢量差分编码(MVD)H.264 对 MV 做差分编码(类似 DC 系数的 DPCM):
预测 MV 可以来自左侧、上方、左上方的相邻块(空间预测),或来自参考帧的同位置块(时域预测)。
H.264 支持两种帧内预测模式:
4×4 亮度块帧内预测(9 种模式)对于 4×4 的亮度块,H.264 定义了 9 种预测模式:
| 模式 | 名称 | 预测方向 |
|---|---|---|
| 0 | Intra_4x4_Vertical | 垂直(上方像素复制) |
| 1 | Intra_4x4_Horizontal | 水平(左侧像素复制) |
| 2 | Intra_4x4_DC | DC(上方+左侧平均) |
| 3 | Intra_4x4_Diagonal_Down_Left | 左下对角线 |
| 4 | Intra_4x4_Diagonal_Down_Right | 右下对角线 |
| 5 | Intra_4x4_Vertical_Right | 右偏垂直 |
| 6 | Intra_4x4_Horizontal_Down | 下偏水平 |
| 7 | Intra_4x4_Vertical_Left | 左偏垂直 |
| 8 | Intra_4x4_Horizontal_Up | 上偏水平 |
| 模式 | 名称 |
|---|---|
| 0 | Vertical |
| 1 | Horizontal |
| 2 | DC |
| 3 | Plane |
8×8 色度块支持 DC、Horizontal、Vertical、Plane 四种模式。
编码器对每种预测模式计算率失真代价(RDO),选择最优的预测模式。
H.264 使用 $4 \times 4$ 的整数 DCT 变换(不是标准的浮点 DCT):
其中 $C_f$ 是整数变换矩阵:
反变换矩阵:
整数变换的优势:
- 精确一致:编解码器之间不存在浮点精度差异
- 计算高效:只需整数加法和移位
- 可逆:变换和反变换完全精确
H.264 还支持 $8 \times 8$ 变换(High Profile),以及对 $4 \times 4$ 块的 Hadamard 变换(用于 DC 系数)。
H.264 使用标量量化器:
量化步长 $Q_{\text{step}}$ 由量化参数 $QP$(0–51)控制,$QP$ 每增加 6,量化步长翻倍。
H.264 定义了两组量化矩阵:
- Intra 量化矩阵:用于帧内编码块
- Inter 量化矩阵:用于帧间编码块(通常更激进)
H.264 支持两种熵编码模式:
CAVLC(Context-Adaptive Variable-Length Coding)CAVLC 用于 Baseline Profile。它根据已编码的语法元素动态选择不同的 VLC 表:
- 对残差系数使用自适应 VLC 表(根据已编码的非零系数个数选择)
- 对运动矢量差值使用指数哥伦布码
- 对宏块类型使用指数哥伦布码
CABAC 用于 Main/High Profile,是 H.264 最高效的熵编码模式。
CABAC 的工作流程:
1. 二值化(Binarization):将非二进制语法元素转换为二进制串
2. 上下文建模(Context Modeling):根据相邻已编码元素的状态选择上下文模型
3. 算术编码(Arithmetic Coding):使用选定的上下文模型进行算术编码
4. 概率更新(Probability Update):根据编码结果更新上下文模型的概率估计
CABAC 比 CAVLC 节省约 10%–15% 的比特,但计算复杂度更高。
H.264 引入了自适应去块滤波(Adaptive Deblocking Filter),在编码环路内运行:
1. 对每个 4×4 块边界,根据边界两侧的像素值差异和量化参数判断滤波强度
2. 强度分为 0–4 级(0=不滤波,4=最强滤波)
3. 根据强度对边界像素进行平滑处理
环路滤波消除了块边界的不连续,提高了视觉质量,同时也有助于提高后续帧的预测精度(因为参考帧更干净)。
H.264 支持从多个参考帧中选择最佳匹配,而不仅仅是前一帧。这在以下场景特别有用:
- 物体遮挡/显露:被遮挡的区域可能在更早的帧中可见
- 周期性运动:物体可能回到之前某个位置
- 场景切换:编码器可以选择与当前帧最相似的参考帧
H.264 的参考帧列表最多支持 16 帧参考。
H.264 定义了多个 Profile(编码工具集)和 Level(性能约束):
| Profile | 工具集 | 典型应用 |
|---|---|---|
| Baseline | I/P 帧,CAVLC,无 B 帧 | 视频会议、移动设备 |
| Main | I/P/B 帧,CABAC,隔行扫描 | 数字电视、存储 |
| High | 额外的变换和量化工具 | 蓝光、广播、流媒体 |
Level 定义了码率、分辨率、帧率等性能上限:
| Level | 最大码率 | 最大分辨率 | 典型应用 |
|---|---|---|---|
| 3.0 | 10 Mbps | 720×576 | 标清视频 |
| 3.1 | 14 Mbps | 1280×720 | 720p |
| 4.0 | 20 Mbps | 2048×1024 | 2K |
| 4.1 | 50 Mbps | 2048×1024 | 1080p |
| 5.1 | 300 Mbps | 4096×2160 | 4K |
参考来源
- Richardson, I. E. G. (2010). The H.264 Advanced Video Compression Standard (2nd ed.). Wiley.
- ITU-T H.264 (2021). "Advanced Video Coding for Generic Audiovisual Services".
- Wiegand, T., et al. (2003). "Overview of the H.264/AVC Video Coding Standard". IEEE Transactions on Circuits and Systems for Video Technology, 13(7), 560–576.
- Marpe, D., Schwarz, H., & Wiegand, T. (2003). "Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC Compression Standard". IEEE Transactions on Circuits and Systems for Video Technology, 13(7), 620–636.
- Vcodex (2024). "Historical Timeline of Video Coding Standards and Formats".
- MPEG (1993). ISO/IEC 11172-2, "Coding of Moving Pictures and Associated Audio".
本篇是系列的第五篇。下一篇将讲解H.265/HEVC、AV1 与下一代视频编码,看看这些标准如何在 H.264 的基础上进一步提升压缩效率。
- 下一篇:H.265/HEVC、AV1 与下一代视频编码