VVC变换与量化革新:MTS/ISP-TS/LFNST/ACT/QP自适应工程实战与性能调优

引言:变换与量化是压缩的"精加工车间"

如果说预测环节是"粗加工"(用预测值逼近原始像素),那么变换与量化就是"精加工"------将残差信号从空间域转换到频域,再通过量化丢弃人眼不敏感的高频信息,最终实现高效压缩。

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的工作流程分为三步:

  1. 第一次变换:使用MTS选择的变换核进行可分变换
  2. LFNST变换:对低频系数(左上角4×4或8×8区域)进行不可分矩阵变换
  3. 量化:对变换后的系数进行量化

矩阵规格: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的工作流程:

  1. 子块划分:将CU划分为2或4个子块
  2. 逐子块预测:每个子块独立进行帧内预测
  3. 逐子块变换:每个子块独立进行MTS和LFNST
  4. 逐子块量化:每个子块独立量化

关键优势:子块尺寸更小,残差分布更均匀,变换效率更高。

压缩增益与复杂度

  • 压缩增益: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)率失真优化量化,在量化过程中考虑率失真代价,而非仅考虑失真:

  1. 量化候选:对每个系数尝试多个量化级别
  2. 率失真评估:评估每个量化级别的率失真代价
  3. 选择最优:选择率失真代价最低的量化级别

工程优化: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使用多级快速变换决策策略:

  1. DCT-2快速跳过:先评估DCT-2代价,若代价较低则跳过其他变换核
  2. LFNST快速跳过:先评估不启用LFNST的代价,若代价较低则跳过LFNST
  3. 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之间找到压缩效率与编码速度的最佳平衡点。

相关推荐
维克兜率天12 天前
【维克】配对交易的季节性:哪些品种适合长拿?
android·开发语言·笔记·python·算法·kotlin·量化
I Am a robert girl13 天前
STEPQuant:Delta-Rule 循环状态量化中,误差何时何地才真正致命
深度学习·模型部署·量化·kv cache·线性注意力·显存优化·循环状态
半甜柠檬13 天前
llama.cpp 部署 Qwen3.8-27B:无独显轻薄本实测
大模型·qwen·量化·本地部署·llama.cpp
维克兜率天14 天前
【维克】价差交易实战:配对交易的核心参数设置
大数据·笔记·算法·量化
维克兜率天16 天前
【维克】弹性策略:用“乖离率“捕捉超跌反弹
android·开发语言·python·深度学习·kotlin·量化
维克兜率天17 天前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
滚雪球~1 个月前
量化交易 防止Windows电脑自动更新并重启
python·量化
维克兜率天1 个月前
5.3 宏观因子:抬头看天
笔记·python·深度学习·算法·量化
维克兜率天1 个月前
【维克】特征归一化与标准化:为什么模型对数据的“尺度“很敏感?
人工智能·笔记·python·机器学习·量化