5.1 变换核与变换分区对照 本节摘要:H.264 只有整数 DCT 一把刀,HEVC 加了两种小尺寸方向核,AV1 给出四核水平垂直自由组合加递归细分,VVC 用 MTS 把大块方向核全面铺开。核越多、贴合残差越准、编码越慢——本节把这条对照线上的每一档取舍讲清。 一、变换在收拾什么残差 预测输出的残差有性格:帧内预测的残差常常"贴近参考边的地方能量大、远端小"(预测是从参考边外推的,越远越不准);帧间补偿的残差常呈各向异性(运动没对准的方向拖出条纹)。DCT 对"平稳随机"的残差效率最高,但对这些带方向性格的残差就力不从心——变换核的多样化,本质是给不同性格的残差配不同的"能量搬运工"。 四代标准的配给清单: 标准 | 核种类 | 尺寸范围 | 选择机制 H.
本节摘要:H.264 只有整数 DCT 一把刀,HEVC 加了两种小尺寸方向核,AV1 给出四核水平垂直自由组合加递归细分,VVC 用 MTS 把大块方向核全面铺开。核越多、贴合残差越准、编码越慢——本节把这条对照线上的每一档取舍讲清。
预测输出的残差有性格:帧内预测的残差常常"贴近参考边的地方能量大、远端小"(预测是从参考边外推的,越远越不准);帧间补偿的残差常呈各向异性(运动没对准的方向拖出条纹)。DCT 对"平稳随机"的残差效率最高,但对这些带方向性格的残差就力不从心——变换核的多样化,本质是给不同性格的残差配不同的"能量搬运工"。
四代标准的配给清单:
| 标准 | 核种类 | 尺寸范围 | 选择机制 |
|---|---|---|---|
| H.264 | 整数 DCT(另有无损用的 4×4 Hadamard) | 4×4、8×8 | 基本固定 |
| HEVC | DCT2、DST7、DCT8 | 4×4–32×32 | 4×4 帧内可选 DST,其余 DCT2 |
| AV1 | DCT、ADST、FLIPADST、IDENTITY(水平垂直各选一) | 4×4–64×64,可递归细分 | 16 组合率失真优选 |
| VVC | DCT2、DST7、DST8 等(MTS) + LFNST 二级变换 | 4×4–64×64 | 显式 MTS 信令 + 隐式派生 |
HEVC 的思路是"小处试点":只在 4×4 帧内块提供 DST7/DCT8(源于针对"参考边能量集中"残差的最优基推导),大块守着 DCT2。AV1 的思路是"全面放开":四个核在水平、垂直两个维度各自独立选择,组合出十六种变换,ADST 与 FLIPADST 的差别只是基函数从参考边哪一侧起坡;IDENTITY 则是"不变换"——残差本就平坦或方向性极强时,跳过变换反而省。VVC 的 MTS 把方向核铺到大块并引入二级低频变换 LFNST,能量压缩更极致,但核的组合搜索也把编码器压得更慢。
核选好之后还有尺寸问题。AV1 允许变换块在编码块内部递归细分(最大到 64×64,最小到 4×4,最多两层细分),大块整体变换与小块分块变换在率失真下竞争。对照 H.264:变换尺寸绑死在宏块分割上;HEVC:变换跟随 CU 加四叉变换树(TTU);AV1:递归深度更大且与划分树解耦得更开;VVC:隐式与显式划分并用。
# AV1 变换块决策示意(编码器视角) for each inter block: candidates = [] for tx_size in {64, 32, 16, 8, 4}: # 递归细分候选 for tx_type in 16 combinations: # 四核组合 cost = rd(tx_size, tx_type, residual) candidates.push(...) choose min cost → 写入 tx_size / tx_type 信令 # 全搜索代价 ≈ 尺寸数 × 组合数;preset 越快,剪枝越激进
这段伪代码同时解释了两件事:为什么 AV1 高质量档慢得有道理(搜索空间是乘性的),以及为什么快速档砍速度先砍变换搜索(剪枝对画质影响相对可控)。VVC 的 LFNST 则展示了另一条省钱路:不改大结构,在低频系数上再叠一层二级变换,把 4×4 低频块的概率分布进一步"白化",让后面的熵编码更省。
第 3 章埋的伏笔在这里兑现:ADST 类核的设计前提是"残差能量偏向参考边",而参考边的位置由预测方向决定——垂直方向预测的残差能量偏左侧,水平方向预测的偏上方。因此 AV1 把帧内模式与变换核的候选集挂钩(方向性预测限制或偏向某些核组合),VVC 的 MTS 同样按帧内模式派生隐式候选。把两章连读:模式表决定预测性格,变换核适配性格,联动的目的是让整条"预测—变换"链路对每种内容都有顺手的组合。
⚠️ 实操提醒:有编码器暴露"强制变换类型"或"禁用递归细分"的调参项,属于速度换画质的深水区。除非目标设备解码无碍而编码时间濒临失控,否则不要动它们——收益远不如调整 preset 或量化参数直接。
问:IDENTITY(不变换)怎么会是最优选择?
答:两类场景:一是预测极准、残差本就接近零,变换再量化反而引入额外损耗与信令;二是残差已经高度能量集中(如屏幕内容的锐利二值边缘),恒等变换让后续的系数编码直接处理原始残差,省去变换基的适配损耗。"变换是手段不是目的",IDENTITY 的存在提醒的正是这一点。
问:递归细分会不会把信令吃回来?
答:细分标志确实要写码流,但它的性价比高:一次细分符号换来的是更聚焦的能量压缩,通常稳赚。真正的成本在编码端搜索——这也是为什么速度敏感的档位会限制细分深度。信令的小钱与算力的大钱要分开记账。
问:为什么 AV1 不像 VVC 那样上二级变换?
答:工程权衡不同。LFNST 式二级变换要额外的系数处理管线与信令,收益集中在特定内容;AV1 选择把预算花在四核组合与递归细分的搜索空间上。两条路线最后在 BD-rate 上差距不大,说明"在哪加码"的路径可以不同,总量守恒。
补一段选型落地的数字直觉:AV1 的 DCT/DST/ADST/FLIPADST 四族变换核与最大 64×64 变换分区组合出的"变换组合空间",在编码器实现里靠 RDO(率失真优化)裁剪——libaom 的 tune=[psnr|ssim] 档位对变换选择策略有可感知影响(SSIM 档倾向在大平坦区选更大变换保留结构相似性);SVT-AV1 的 preset 从 0 到 13 每升一档大约砍掉一半变换候选评估,换来的速度差在低端档可达十倍量级,代价是 BD-Rate 劣化约百分之几。给转码产线选 preset 的实务方法:拿自己的内容池(游戏屏录、动漫、真人影视各取样本)在目标档位上下各测两档,画"速度-BDRate"曲线取拐点——不同内容形态的拐点位置差异很大,一张通用对照表容易误导。