AV1熵编码
AV1编码技术是一种开源的视频编解码标准,由开放媒体联盟(AOMedia)开发,旨在提供高效的视频压缩,同时避免复杂的专利授权问题。在熵编码方面,AV1采用了一种多符号上下文自适应算术编码技术,这与 H.265/H.266 中使用的二进制算术编码(CABAC)有所不同。
AV1 的熵编码技术通过两个主要处理过程来压缩输入的符号序列:累积分布函数(CDF)和布尔操作。CDF 允许使用包含 2 到 16 个符号的字母表,并且符号的概率是自适应的,而布尔操作则使用固定的两个符号字母表和不变的符号概率。这种多符号算术编码技术可以更有效地利用待编码符号序列的高层次结构相似性,从而提高压缩效率。
AV1 的熵编码器在编码过程中,输入由 M 种符号组成的序列及其概率上下文。编码器的输出是一个比特流,其中语法元素与包含 M 个符号的字母表相关联,M 的值可以在 2 到 16 之间变化。在编码或解码每个语法元素后,15 位的 CDF 概率值会被更新,以反映编码过程中的概率变化。
AV1 的熵编码技术还包括预计算、范围变量更新、低位更新和产生比特流的四个阶段。这种设计允许 AV1
在保持视频质量的同时,实现更高的压缩比率,从而在视频传输和存储方面具有优势。此外,AV1 编码技术还包括其他高级特性,如运动估计、空间预测、变换、环路滤波等,这些技术共同作用,实现了高效的视频压缩。AV1 的应用领域非常广泛,包括在线视频传输、流媒体服务、视频监控和虚拟现实等。
随着技术的发展,AV1 编码技术预计将进一步优化其核心算法,并与其他技术如人工智能和深度学习相结合,以适应更复杂和多样化的应用场景。随着新一代通信技术如 5G的普及,AV1 编码技术在超高清视频传输和实时通信等领域的应用前景将更加广阔。
多符号算术编码引擎
在 AV1 编码技术中,M-ary 算术编码引擎用于熵编码语法元素。每个语法元素与一个包含 M 个元素的字母表相关联,其中 M 的值可以是 2 到 16 之间的任何整数。编码的输入是一个 M-ary 符号,上下文由一组 M
个概率组成。编码或解析每个语法元素后,这些概率会更新,并且概率以 15 位累积分布函数(CDF)的形式表示。CDF 是一个 M 个 15 位整数的数组,定义如下: C = [c0, c1, … , cM-2, 215] 其中 ( cn / 32768 ) 是符号小于或等于 n 的概率。
概率更新使用以下方程进行:
其中 α 是基于符号解码次数的概率更新率(最多 32 次), m 是 CDF 中的元素索引。α 的自适应允许在编码/解析语法元素的开始阶段进行更快的概率更新。M-ary 算术编码过程遵循传统的算术编码引擎设计;然而,只有最高的 9 位输入到算术编码器/解码器。这意味着实际用于编码过程的概率值是 CDF 数组中每个元素的高 9 位,这有助于减少计算复杂度,同时保持编码的精度。
这种设计允许 AV1 编码器在编码过程中动态调整概率模型,以适应输入数据的统计特性。随着编码过程的进行,随着对符号出现频率的更好理解,概率模型会逐渐细化,从而提高编码效率。通过这种方式,AV1编码器能够实现更高的压缩比,同时保持或提高视频质量。
系数编码
在 AV1 编码技术中,变换块(
transform block
)的系数编码开始于一个all_zero
标志的编码,该标志指示变换块是否仅包含零残差。如果 all_zero 标志被编码为 0,则表示变换块中存在非零系数,随后需要编码主变换核类型(primary transform kernel type
)和块结束(end-of-block, EOB
)位置。系数的编码流程如下:
all_zero 标志:首先编码
all_zero
标志,如果变换块内所有系数都是零,则此标志为 1;否则为 0。主变换核类型和 EOB 位置:如果
all_zero
标志为 0,则需要编码主变换核类型和 EOB 位置。EOB 位置指示非零系数的最后一个位置。系数值编码:系数值通过多个级别的映射(level maps)以及符号值进行编码。存在三个级别的平面:低级别(lower-level)、中级别(middle-level)和高级别(higher-level),分别对应不同的系数幅度范围(0–2, 3–14, 15 及以上)。
三个级别平面的编码:
- 低级别和中级别平面:在编码 EOB 值之后,低级别和中级别平面以反向扫描顺序(
zig-zag scan
)编码在一起。- 符号平面和高级别平面:然后,符号平面和高级别平面以正向扫描顺序编码在一起。
剩余值的熵编码:高级别平面编码后,使用指数-哥伦布(
Exp-Golomb
)编码对剩余值(系数幅度减去 14)进行熵编码。上下文模型的应用:
- 低级别平面:上下文模型取决于主变换方向(双向、水平、垂直)、变换块大小,以及变换域中最多五个邻近变换系数。
- 中级别平面:使用类似的上下文模型,但上下文邻近系数的数量从 5 减少到 2。
- 高级别平面:不使用上下文建模,直接使用
Exp-Golomb
编码进行编码。符号平面的编码:除了直流(DC)符号使用邻近变换单元的 DC 符号进行编码外,所有其他系数的符号值直接编码,不使用上下文建模。
这种编码方式允许 AV1 编码器有效地表示变换系数,通过利用系数的统计特性和上下文信息来提高编码效率。通过区分不同级别的系数幅度并应用不同的上下文模型和编码策略,AV1 能够在保持视频质量的同时实现更高的压缩比。