引言:变换与量化是压缩的"精加工车间"
如果说预测环节是"粗加工"(用预测值逼近原始像素),那么变换与量化就是"精加工"------将残差信号从空间域转换到频域,再通过量化丢弃人眼不敏感的高频信息,最终实现高效压缩。
H.266/VVC在HEVC的DCT-2变换+标量量化基础上,引入了MTS(多变换核选择)、LFNST(低频不可分变换)、ACT(自适应色彩变换)、ISP-TS(子块变换) 等新工具,并优化了量化步长设计,使变换量化环节较HEVC提升约3-5% BD-rate增益。
但变换量化的计算复杂度也显著增加:MTS需要多变换核搜索,LFNST需要矩阵乘法,ACT需要色彩空间转换。如何在压缩效率与编码速度之间取得平衡,是工程落地的核心挑战。
本文从算法原理到工程实践,系统梳理VVC变换与量化的关键技术,并给出可复用的优化策略与配置模板。
MTS:多变换核选择
核心思想
HEVC仅使用DCT-2(离散余弦变换类型2)作为变换核,所有残差块都使用相同的变换核。但不同残差分布适合不同的变换核:
- 能量集中在低频:DCT-2最优
- 能量集中在高频:DST-7(离散正弦变换类型7)可能更优
- 残差分布不均匀:DCT-8可能更优
VVC引入MTS(Multiple Transform Selection)多变换核选择,允许CU级别从多种变换核中选择最优的:
- DCT-2:离散余弦变换类型2(HEVC标准)
- DST-7:离散正弦变换类型7
- DCT-8:离散余恩变换类型8
变换核组合
MTS支持水平方向和垂直方向独立选择变换核,形成变换核组合:
| 组合索引 | 水平变换核 | 垂直变换核 |
|---|---|---|
| 0 | DCT-2 | DCT-2 |
| 1 | DST-7 | DCT-2 |
| 2 | DCT-2 | DST-7 |
| 3 | DST-7 | DST-7 |
| 4 | DCT-8 | DCT-2 |
| 5 | DCT-2 | DCT-8 |
| 6 | DCT-8 | DST-7 |
| 7 | DST-7 | DCT-8 |
| 8 | DCT-8 | DCT-8 |
编码方式:MTS索引使用上下文自适应编码,DCT-2组合(索引0)使用最短码字。
适用场景
MTS仅对特定尺寸的CU启用:
- 帧内CU:宽度≤32且高度≤32的CU
- 帧间CU:宽度≤64且高度≤64的CU
- ISP CU:对子块进行MTS选择
工程优化:VVenC使用快速MTS决策,先评估DCT-2代价,若代价较低则跳过其他变换核搜索,将MTS搜索开销降低约50%。
压缩增益与复杂度
- 压缩增益:MTS可使整体码率降低约1-2%,对纹理区域增益更大
- 复杂度增加:MTS需要多变换核搜索,使变换编码计算量增加约20-30%
工程实践:VVenC默认启用MTS,对低复杂度场景可以关闭MTS或限制候选数量。
LFNST:低频不可分变换
核心思想
HEVC的变换是可分的(水平方向和垂直方向独立变换),但残差信号在水平和垂直方向可能存在相关性,可分变换无法充分利用这种相关性。
VVC引入LFNST(Low-Frequency Non-Separable Transform)低频不可分变换,对变换后的低频系数进行二次不可分变换,进一步去相关。LFNST的核心优势:
- 捕获方向相关性:不可分变换可以捕获水平和垂直方向的相关性
- 能量集中:将能量进一步集中到更低频系数
- 压缩增益显著:对纹理区域增益可达2-4%
工作流程
LFNST的工作流程分为三步:
- 第一次变换:使用MTS选择的变换核进行可分变换
- LFNST变换:对低频系数(左上角4×4或8×8区域)进行不可分矩阵变换
- 量化:对变换后的系数进行量化
矩阵规格:LFNST使用预训练矩阵,根据块大小和帧内模式选择矩阵:
- 4×4和4×8块:使用16×16矩阵
- 8×8及以上块:使用48×48或64×64矩阵
模式选择
LFNST支持多种模式(矩阵选择):
- 模式0:不启用LFNST
- 模式1-3:使用不同的预训练矩阵
模式编码:LFNST模式索引使用上下文自适应编码,模式0(不启用)使用最短码字。
工程优化:VVenC使用快速LFNST决策,先评估不启用LFNST的代价,若代价较低则跳过LFNST搜索,将LFNST搜索开销降低约60%。
压缩增益与复杂度
- 压缩增益:LFNST可使整体码率降低约1-2%,对纹理区域增益可达2-4%
- 复杂度增加:LFNST需要矩阵乘法,使变换编码计算量增加约15-25%
工程实践:VVenC默认启用LFNST,对低复杂度场景可以关闭LFNST。
ACT:自适应色彩变换
核心思想
视频通常使用YCbCr色彩空间编码,但某些场景下(尤其是屏幕内容、图形界面),RGB色彩空间的残差分布更均匀,压缩效率更高。
VVC引入ACT(Adaptive Color Transform)自适应色彩变换,允许CU级别在YCbCr和RGB色彩空间之间切换:
- YCbCr空间:适合自然视频
- RGB空间:适合屏幕内容、图形界面
色彩空间转换
ACT使用可逆的色彩空间转换(RICE变换):
Y' = (Y - (Cb + Cr) / 2)
Cb' = Cb - 128
Cr' = Cr - 128
或者从RGB到YCgCo的转换:
Y = (R + 2G + B) / 4
Cg = (2G - R - B) / 4
Co = (R - B) / 2
可逆性:ACT使用整数变换,确保编码端和解码端的转换完全可逆,无精度损失。
适用场景
ACT主要对以下场景有效:
- 屏幕内容:图形界面、文字、图标等
- 动画内容:色彩边界清晰的动画
- RGB源视频:原始RGB格式的视频
工程优化:VVenC对自然视频默认跳过ACT搜索,仅对屏幕内容模式启用ACT,将ACT搜索开销降低约80%。
压缩增益与复杂度
- 压缩增益:ACT对屏幕内容可使码率降低约3-5%,对自然视频增益较小(<0.5%)
- 复杂度增加:ACT需要色彩空间转换,使编码计算量增加约5-10%
工程实践 :VVenC的--screen-content参数启用屏幕内容优化,自动启用ACT。
ISP-TS:子块变换
核心思想
ISP(帧内子块划分)将CU划分为多个子块,每个子块独立进行帧内预测和变换。ISP-TS是ISP的变换优化,对子块使用更精细的变换策略:
- 子块尺寸更小:可以使用更适合小尺寸的变换核
- 变换核选择更灵活:每个子块独立选择MTS
- LFNST应用更精确:对每个子块独立应用LFNST
工作流程
ISP-TS的工作流程:
- 子块划分:将CU划分为2或4个子块
- 逐子块预测:每个子块独立进行帧内预测
- 逐子块变换:每个子块独立进行MTS和LFNST
- 逐子块量化:每个子块独立量化
关键优势:子块尺寸更小,残差分布更均匀,变换效率更高。
压缩增益与复杂度
- 压缩增益:ISP-TS可使整体码率降低约0.5-1.0%
- 复杂度增加:ISP-TS需要逐子块变换搜索,使帧内编码计算量增加约15-20%
工程实践:VVenC默认启用ISP-TS,对低复杂度场景可以关闭ISP-TS。
量化与反量化
量化步长
VVC使用标量量化,量化步长由QP(量化参数)决定:
Qstep = 2^((QP - 4) / 6)
其中 QP 范围为0-63,Qstep 为量化步长。
量化公式:
level = sign(coeff) × floor(|coeff| / Qstep + f)
其中 f 是舍入因子(通常0.5),coeff 是变换系数,level 是量化后的系数级别。
依赖量化
VVC引入依赖量化(Dependent Quantization),使用两个量化器交替量化相邻系数,利用系数之间的相关性提高量化效率:
- 量化器0:用于偶数位置系数
- 量化器1:用于奇数位置系数
压缩增益:依赖量化可使码率降低约1-2%。
率失真优化量化
VVC使用RDOQ(Rate-Distortion Optimized Quantization)率失真优化量化,在量化过程中考虑率失真代价,而非仅考虑失真:
- 量化候选:对每个系数尝试多个量化级别
- 率失真评估:评估每个量化级别的率失真代价
- 选择最优:选择率失真代价最低的量化级别
工程优化:VVenC使用快速RDOQ,对高频系数跳过RDOQ,将RDOQ开销降低约40%。
压缩增益与复杂度
- 压缩增益:RDOQ+依赖量化可使整体码率降低约1-2%
- 复杂度增加:RDOQ需要多级别评估,使量化计算量增加约20-30%
工程实践:VVenC默认启用RDOQ和依赖量化,对低复杂度场景可以关闭RDOQ。
实战配置模板
高质量编码场景
bash
# VVenC参数
--preset slower
--mts 1 # 启用MTS
--lfnst 1 # 启用LFNST
--act 1 # 启用ACT
--isp-ts 1 # 启用ISP-TS
--rdoq 1 # 启用RDOQ
--dependent-quant 1 # 启用依赖量化
--max-mts-candidates 9 # 最大MTS候选数
实时编码场景
bash
--preset fast
--mts 1 # 启用MTS
--lfnst 0 # 关闭LFNST(节省计算)
--act 1 # 启用ACT
--isp-ts 0 # 关闭ISP-TS
--rdoq 0 # 关闭RDOQ
--dependent-quant 1 # 启用依赖量化
--max-mts-candidates 4 # 减少MTS候选数
屏幕内容编码场景
bash
--preset slower
--mts 1 # 启用MTS
--lfnst 1 # 启用LFNST
--act 1 # 启用ACT(屏幕内容增益大)
--isp-ts 1 # 启用ISP-TS
--rdoq 1 # 启用RDOQ
--dependent-quant 1 # 启用依赖量化
--screen-content 1 # 启用屏幕内容优化
低复杂度场景
bash
--preset faster
--mts 0 # 关闭MTS
--lfnst 0 # 关闭LFNST
--act 0 # 关闭ACT
--isp-ts 0 # 关闭ISP-TS
--rdoq 0 # 关闭RDOQ
--dependent-quant 0 # 关闭依赖量化
变换与量化的工程优化
快速变换决策
VVC使用多级快速变换决策策略:
- DCT-2快速跳过:先评估DCT-2代价,若代价较低则跳过其他变换核
- LFNST快速跳过:先评估不启用LFNST的代价,若代价较低则跳过LFNST
- ACT快速跳过:对自然视频跳过ACT搜索
加速效果:该策略可将变换搜索开销降低约50-60%,压缩损失小于0.2%。
SIMD加速
VVenC和x266都使用SIMD指令加速变换计算:
- SSE4.1/AVX2:加速DCT-2、DST-7、DCT-8变换
- AVX-512:加速LFNST矩阵乘法
- NEON:ARM平台加速
加速效果:SIMD加速可使变换计算速度提升3-5倍。
并行化策略
变换与量化可以并行化处理:
- CU级并行:不同CU独立进行变换量化
- 子块级并行:ISP子块独立进行变换量化
- 系数级并行:不同系数组独立进行量化
工程实践:VVenC使用线程池并行化变换量化,多核CPU下编码速度提升约2-3倍。
结语:变换与量化是压缩的精加工车间
VVC的变换与量化已经从HEVC的DCT-2+标量量化体系,演进为MTS+LFNST+ACT+ISP-TS+RDOQ的多元工具体系,每一个工具都在试图更高效地表示残差信号。但工具越多,计算复杂度越高,工程取舍就越重要。
建议建立"变换量化工具增益画像",针对不同场景(自然视频/屏幕内容/动画)、不同分辨率、不同CU尺寸,配置差异化的变换量化策略。让编码器理解残差分布,而非盲目启用所有工具。
变换与量化是压缩的精加工车间,也是整个编码流水线的最后一道关卡。愿每一位视频编码工程师,都能在MTS与LFNST之间找到压缩效率与编码速度的最佳平衡点。