ESC
输入关键词搜索文章
目录

视频压缩基础:从 MPEG-1 到 H.264/AVC

传统图像与视频压缩技术全景 · 第五篇
运动估计如何让视频压缩比提升百倍
7系列文章
5本篇:视频压缩基础
引言
视频压缩:图像压缩的时间维度

视频本质上是连续的图像帧序列。如果对每帧独立压缩(如 Motion JPEG),压缩效率很低,因为相邻帧之间通常存在极强的相似性——这就是时间冗余

视频压缩的核心突破在于:不再独立编码每帧,而是利用帧间的时间相关性,只编码帧与帧之间的"变化"。这个思想催生了运动估计(Motion Estimation)和运动补偿(Motion Compensation)技术,使视频压缩比比单纯的空间压缩提高了 10–100 倍。

本篇将从视频压缩的基本概念讲起,系统讲解 MPEG-1 到 H.264/AVC 的演进,重点拆解 H.264 的完整编码架构。

Part 1
视频压缩的核心概念
视频中的三种冗余

1. 空间冗余(Spatial Redundancy):同一帧内相邻像素的相关性

2. 时间冗余(Temporal Redundancy):相邻帧之间像素的相关性

3. 视觉冗余(Visual Redundancy):人眼对某些信息不敏感

空间冗余的消除方法与图像压缩相同(DCT/小波变换 + 量化)。时间冗余的消除则需要帧间预测运动估计

帧类型:I、P、B

视频编码将帧分为三种类型:

帧类型名称编码方式特点
I 帧Intra-coded仅帧内编码(类似 JPEG)独立解码,文件最大
P 帧Predicted帧间预测(参考前面的帧)文件较小,需要参考帧
B 帧Bi-directional双向预测(参考前后帧)文件最小,压缩比最高
GOP(Group of Pictures)

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)。对于当前帧中的每个块,在参考帧的搜索窗口内寻找最佳匹配:

$$\text{最佳 MV} = \arg\min_{(dx, dy)} \sum_{(x,y) \in \text{block}} |I_{\text{curr}}(x,y) - I_{\text{ref}}(x+dx, y+dy)|$$

常用的匹配准则:

  • 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,在自然视频中通常更高效。

Part 2
视频编码标准的演进
MPEG-1(1993)

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(1995)/ H.262

MPEG-2 是 MPEG-1 的增强版,用于 DVD、数字电视和蓝光光盘。

关键改进:

  • 支持隔行扫描视频
  • 分辨率最高 1920×1080
  • 码率最高 80 Mbps
  • 更灵活的帧间预测(支持场预测和帧预测)
  • 支持可变长编码
H.263(1995)

H.263 为低码率通信(如视频会议)设计。

关键改进:

  • 更灵活的宏块划分(支持 8×8 块的运动补偿)
  • 改进的运动预测(非限制运动矢量)
  • 更高效的熵编码
MPEG-4 Part 2 / Visual(1999)

MPEG-4 引入了基于对象的编码概念,但在实践中大多数实现仍使用基于块的编码。

H.264/AVC(2003)

H.264 是视频压缩的里程碑标准,由 ITU-T VCEG 和 ISO/IEC MPEG 联合开发(Joint Video Team, JVT)。它在 MPEG-2 的基础上提供了约 50% 的压缩效率提升,至今仍是使用最广泛的视频编码标准。

Part 3
H.264/AVC 完整编码架构
编码器架构

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

这种灵活的划分使得编码器可以在平坦区域使用大块(减少运动矢量开销),在细节和运动复杂的区域使用小块(提高预测精度)。

帧间预测详解
加权预测(Weighted Prediction)

P 帧和 B 帧的预测值可以是多个参考帧的加权平均:

$$\hat{P} = w_1 \cdot \text{Ref}_1 + w_2 \cdot \text{Ref}_2 + w_o$$

其中权重 $w_1, w_2, w_o$ 可以由编码器显式传输,或由解码器隐式推导。加权预测对于淡入淡出场景特别有效——物体本身没有运动,但整个场景的亮度在变化。

直接模式(Direct Mode)

B 帧中的直接模式不解码 MV,而是从空间相邻块或时域相邻帧推导:

  • 时域直接:从最近的参考帧中推断当前块的 MV
  • 空域直接:从前一编码块的空间邻居推断

直接模式不需要传输 MV,只需要传输残差,大幅节省比特。

运动矢量差分编码(MVD)

H.264 对 MV 做差分编码(类似 DC 系数的 DPCM):

$$\text{MVD} = \text{MV}_{\text{current}} - \text{MV}_{\text{predicted}}$$

预测 MV 可以来自左侧、上方、左上方的相邻块(空间预测),或来自参考帧的同位置块(时域预测)。

帧内预测

H.264 支持两种帧内预测模式:

4×4 亮度块帧内预测(9 种模式)

对于 4×4 的亮度块,H.264 定义了 9 种预测模式:

模式名称预测方向
0Intra_4x4_Vertical垂直(上方像素复制)
1Intra_4x4_Horizontal水平(左侧像素复制)
2Intra_4x4_DCDC(上方+左侧平均)
3Intra_4x4_Diagonal_Down_Left左下对角线
4Intra_4x4_Diagonal_Down_Right右下对角线
5Intra_4x4_Vertical_Right右偏垂直
6Intra_4x4_Horizontal_Down下偏水平
7Intra_4x4_Vertical_Left左偏垂直
8Intra_4x4_Horizontal_Up上偏水平
16×16 亮度块帧内预测(4 种模式)
模式名称
0Vertical
1Horizontal
2DC
3Plane
色度块帧内预测(4 种模式)

8×8 色度块支持 DC、Horizontal、Vertical、Plane 四种模式。

编码器对每种预测模式计算率失真代价(RDO),选择最优的预测模式。

整数 DCT 变换

H.264 使用 $4 \times 4$ 的整数 DCT 变换(不是标准的浮点 DCT):

$$Y = C_f X C_f^T$$

其中 $C_f$ 是整数变换矩阵:

$$C_f = \begin{bmatrix} 1 & 1 & 1 & 1 \\ 2 & 1 & -1 & -2 \\ 1 & -1 & -1 & 1 \\ 1 & -2 & 2 & -1 \end{bmatrix}$$

反变换矩阵:

$$C_i = \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & \frac{1}{2} & -\frac{1}{2} & -1 \\ 1 & -1 & -1 & 1 \\ \frac{1}{2} & -1 & 1 & -\frac{1}{2} \end{bmatrix}$$

整数变换的优势:

  • 精确一致:编解码器之间不存在浮点精度差异
  • 计算高效:只需整数加法和移位
  • 可逆:变换和反变换完全精确

H.264 还支持 $8 \times 8$ 变换(High Profile),以及对 $4 \times 4$ 块的 Hadamard 变换(用于 DC 系数)。

量化

H.264 使用标量量化器:

$$Z_{ij} = \text{round}\left(\frac{Y_{ij}}{Q_{\text{step}}}\right)$$

量化步长 $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(Context-Adaptive Binary Arithmetic Coding)

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 帧参考。

Part 4
H.264 的 Profile 与 Level

H.264 定义了多个 Profile(编码工具集)和 Level(性能约束):

主要 Profile
Profile工具集典型应用
BaselineI/P 帧,CAVLC,无 B 帧视频会议、移动设备
MainI/P/B 帧,CABAC,隔行扫描数字电视、存储
High额外的变换和量化工具蓝光、广播、流媒体
Level 约束

Level 定义了码率、分辨率、帧率等性能上限:

Level最大码率最大分辨率典型应用
3.010 Mbps720×576标清视频
3.114 Mbps1280×720720p
4.020 Mbps2048×10242K
4.150 Mbps2048×10241080p
5.1300 Mbps4096×21604K

参考来源

  • 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 与下一代视频编码