熵编码在视频压缩中的作用
在视频压缩体系中,熵编码是最后一道压缩关卡,其主要任务是:
在不再引入任何失真的前提下,进一步减少码率
一个典型的视频编码流程为:
预测 → 变换 → 量化 → 熵编码
其中:
- 预测、变换、量化负责消除时域、空域冗余并进行有损压缩
- 熵编码只做无损压缩,消除统计冗余
可以说:
熵编码决定最终码流是否"足够小",但不影响画质
信息熵与熵编码基础
1. 信息熵的概念
熵(Entropy)源自信息论,由香农提出,用于衡量信息的不确定性:

含义:
- 出现概率越大的符号,携带的信息量越少
- 出现概率越小的符号,携带的信息量越大
熵编码的目标是:
让码字长度接近符号的理论最小熵值
2. 为什么视频编码适合熵编码
经过预测、变换和量化后,视频数据具有以下特征:
- 大量 0 或小整数
- 符号分布极不均匀
- 相邻符号强相关
这些特性非常适合熵编码算法进行压缩。
熵编码的基本思想
熵编码遵循的核心原则是:
高概率符号用短码表示,低概率符号用长码表示
典型例子:
- 0 出现概率最高 → 用最短码
- 大幅度残差概率低 → 用长码
熵编码不改变符号的值,只改变表示方式。
常见熵编码方法
1. 游程编码(RLE)
原理
- 利用连续相同符号的特性
- 将多个相同值表示为「值 + 长度」
在视频编码中的应用
- Zigzag 扫描后大量连续 0
- 0-run-length 编码
特点
- 实现简单
- 只对连续重复有效
- 通常作为辅助编码手段
2. 哈夫曼编码(Huffman Coding)
原理
- 基于符号概率构建最优前缀码
- 短码表示高概率符号
优点
- 编码效率高
- 实现相对简单
缺点
- 码字长度必须是整数比特
- 对概率变化不够灵活
应用
- MPEG-2
- JPEG
- H.264 CAVLC 中的部分表
3. 算术编码(Arithmetic Coding)
原理
- 将整个符号序列映射到一个区间
- 可使用非整数比特表示
优点
- 接近香农极限
- 压缩效率高
缺点
- 计算复杂
- 专利和实现成本较高(早期)
应用
- H.264 CABAC
- H.265 CABAC
- AV1(ANS 变种)
H.264 中的熵编码
H.264 提供了两种熵编码方式:
| 编码方式 | 特点 | 应用 |
|---|---|---|
| CAVLC | 简单、速度快 | Baseline |
| CABAC | 压缩率高 | Main / High |
1. CAVLC(Context-Adaptive Variable Length Coding)
核心思想
- 基于上下文的可变长编码
- 主要针对 4×4 变换块
编码内容包括:
- 非零系数个数
- 拖尾 1 的个数
- 系数幅值
- 零游程
编码流程
mathematica
Zigzag 扫描
→ 统计非零系数
→ 编码 Trailing Ones
→ 编码 Level
→ 编码 Run Before
特点
优点:
- 计算复杂度低
- 无算术编码
- 硬件实现简单
缺点:
- 压缩效率有限
- 对高分辨率不友好
2. CABAC(Context-Adaptive Binary Arithmetic Coding)
设计目标
- 最大限度压缩码率
- 利用上下文建模
核心组成
CABAC 包含三个关键步骤:
- 二值化(Binarization)
- 上下文建模(Context Modeling)
- 算术编码(Arithmetic Coding)
二值化
将非二值符号拆成二进制串,例如:
- Unary
- Truncated Unary
- Exp-Golomb
上下文建模
- 根据邻块、历史符号选择概率模型
- 每个 bin 使用不同概率状态
算术编码
- 使用二进制算术编码器
- 动态更新概率模型
CABAC 优势
- 比 CAVLC 节省 10%~15% 码率
- 对复杂视频更明显
缺点:
- 实现复杂
- 编码延迟较高
H.265 / HEVC 中的熵编码
1. 统一使用 CABAC
HEVC 移除了 CAVLC:
- 所有语法元素均使用 CABAC
- 压缩效率进一步提升
2. HEVC 的改进点
- 更精细的上下文模型
- 更少的 bin 数
- 更高并行度支持
结果:
在相同画质下,HEVC 比 H.264 节省约 30%~40% 码率
AV1 中的熵编码
AV1 使用的是:
- ANS(Asymmetric Numeral Systems)
特点:
- 介于哈夫曼与算术编码之间
- 高压缩效率
- 更适合并行实现
- 无专利限制
AV1 的熵编码:
- 更复杂
- 感知优化更强
- 压缩效率领先
熵编码与上下文建模
上下文建模是熵编码成功的关键:
常见上下文来源:
- 邻近块的非零系数数目
- 预测模式
- 帧类型
- 运动矢量大小
好的上下文模型可以:
- 提高概率预测准确度
- 减少平均码字长度
熵编码对性能的影响
1. 压缩效率
- CABAC > CAVLC > Huffman
- AV1 ANS 目前最优
2. 计算复杂度
- CAVLC:低
- CABAC:中高
- AV1:高
3. 实时性权衡
在实时编码场景:
- 可牺牲部分压缩率
- 换取编码速度和低延迟
总结
熵编码是视频压缩中:
- 唯一无损压缩模块
- 压缩效率的最后保障
- 决定码流体积的重要因素
一句话总结:
预测与量化决定"剩多少",熵编码决定"怎么装"