HEVC(四):加权预测
加权预测(Weighted Prediction, WP)**是现代视频编码标准中应对**光照变化、淡入淡出(Fade-in/Fade-out)、阴影闪烁及闪光灯等场景的杀手锏技术。在 H.265/HEVC 中,加权预测得到了进一步的继承与优化。
通过在传统的帧间运动补偿(Motion Compensation)基础上引入线性变换的权重和偏移量,HEVC 能够用极其低廉的信号开销,完美解决由于光照渐变导致传统运动估计失效、残差飙升的痛点。
为什么需要加权预测?
在标准的帧间预测(Inter Prediction)中,编码器有一个底层假设:“前后两帧之间,同一物体的像素亮度是基本保持不变的。” 基于这个假设,运动估计(Motion Estimation)只需要在参考帧中找到一个位置最接近、长得最像的宏块,计算出运动矢量(MV),然后将两者的像素值相减得到残差(Residual)。
然而,在以下现实场景中,这个假设会彻底崩塌:
- 淡入淡出效果:电影转场时,画面慢慢变黑(Fade-out)或从黑变亮(Fade-in)。每一帧的所有像素亮度都在成比例地集体变暗或变亮。
- 光照与阴影渐变:太阳被乌云遮挡、路灯下走过的行人、摄像机移动导致的光圈自动调整。
- 突发强光:舞台上的闪光灯、夜间行驶车辆的远光灯晃眼。
在这些场景下,虽然物体的结构没有变,但因为亮度整体变了,编码器直接相减得到的残差会变得非常大,导致原本可以省码率的 P 帧或 B 帧瞬间退化,编码器不得不消耗海量码率去记录这些“亮度差值”,甚至被迫使用帧内(Intra)编码。
加权预测的解题思路: 既然整张图或者某个区域都在变亮/变暗,那我在相减之前,先给参考帧的像素乘上一个增益系数(Weight),再加上一个修正偏移量(Offset)。这样对齐亮度后再去相减,残差就会重新归零。
HEVC 加权预测的数学原理与计算公式
HEVC 的加权预测属于时域线性映射模型。其核心公式分为单向预测和双向预测两种情况:
单向预测(Uni-prediction)
当当前块只参考一个前向或后向的图像(RefPic0 或 RefPic1)时,加权预测的数学表达式为:
p′[x,y]=((w⋅p[x,y])+2o_shift−1)≫o_shift+op'[x, y] = \left( (w \cdot p[x, y]) + 2^{o\_shift - 1} \right) \gg o\_shift + op′[x,y]=((w⋅p[x,y])+2o_shift−1)≫o_shift+o
- p[x,y]p[x, y]p[x,y]:参考帧中运动补偿得到的原始像素值。
- p′[x,y]p'[x, y]p′[x,y]:经过加权预测后,准备与当前帧进行残差计算(或解码端重构)的加权像素值。
- www:权重系数(Weight)。用来应对乘法比例变化的渐变(如淡入淡出)。
- ooo:偏移量(Offset)。用来应对整体亮度的平移(加减固定亮度值)。
- o_shifto\_shifto_shift:缩放移位因子(Log Weight Denominator)。为了避免在硬件内部进行高成本的浮点数乘法,所有的权重 www 在工程中都被放大为定点整数。计算完毕后,必须通过右移
o_shift位来还原。2o_shift−12^{o\_shift - 1}2o_shift−1 是为了实现四舍五入。
双向预测(Bi-prediction)
当当前块同时参考两个不同的图像(来自 List0 和 List1)时,加权预测会将两边的贡献进行加权融合:
p′[x,y]=((w0⋅p0[x,y]+w1⋅p1[x,y])+2o_shift)≫(o_shift+1)+o0+o12p'[x, y] = \left( (w_0 \cdot p_0[x, y] + w_1 \cdot p_1[x, y]) + 2^{o\_shift} \right) \gg (o\_shift + 1) + \frac{o_0 + o_1}{2}p′[x,y]=((w0⋅p0[x,y]+w1⋅p1[x,y])+2o_shift)≫(o_shift+1)+2o0+o1
在双向预测中,HEVC 支持为两个不同的参考帧独立配置不同的权重(w0,w1w_0, w_1w0,w1)和偏移量(o0,o1o_0, o_1o0,o1)。这使得它在处理交叉淡化(Cross-fade,一个画面逐渐消失的同时另一个画面逐渐显现)时,压缩效率达到了近乎完美的表现。
HEVC 加权预测的语法层级与传输机制
为了兼顾“全局光照变化”与“局部光照变化”,HEVC 将加权预测的参数设计为多级控制结构,参数主要在 PPS(图像参数集) 和 Slice Header(条带头) 中传输。
模式激活(PPS 级别)
在图像参数集(PPS)中,有两个全局开关:
weighted_pred_flag:决定当前图像下的 P 条带(Slice) 是否启用加权预测。weighted_bipred_flag:决定当前图像下的 B 条带(Slice) 是否启用加权预测。
参数量化传输(Slice Header 级别)
一旦开关开启,具体的权重系数表 pred_weight_table() 将在每个条带的头部(Slice Header)进行传输。
- 允许按参考帧索引(RefIdx)定制:如果当前条带参考了 3 帧图像,Slice Header 可以为这 3 帧分别指定不同的 www 和 ooo。
- 色度独立控制:HEVC 允许对亮度通道(Y)和两个色度通道(Cb, Cr)分别设置不同的加权参数。因为在某些舞台灯光下,可能只有颜色在变(红光变蓝光),而亮度没变。
HEVC 加权预测的两大工作模式
在具体工程实现中,加权预测分为两类:显式加权(Explicit WP) 和 隐式加权(Implicit WP)。
显式加权预测(Explicit Weighted Prediction)
- 工作机制:编码器通过分析前后帧的图像直方图或全局平均亮度,主动计算出最合适的权重 www 和偏移量 ooo,然后明确地写入码流的 Slice Header 中。解码器拿到这些参数后,直接套用公式进行解码。
- 适用场景:主要用于 P 帧 和部分 B 帧。在剧烈的、由于外界光源导致画面集体变暗变亮的场景(淡入淡出、闪光灯)中,显式加权是绝对的主力。
隐式加权预测(Implicit Weighted Prediction)
- 工作机制:码流中不传输具体的权重和偏移量。解码器和编码器根据当前帧与两个参考帧之间的时域距离(POC,图像播放顺序号),通过数学公式自适应地推导出来。
- 数学逻辑:假设当前帧处于参考帧 A 和参考帧 B 的正中间,那么距离一致,隐式权重自适应推导为 w0=0.5,w1=0.5w_0 = 0.5, w_1 = 0.5w0=0.5,w1=0.5;如果距离 A 较近,距离 B 较远,则 A 的权重增大,B 的权重减小。
- 适用场景:仅用于 B 帧。它主要用来优化由于物体运动造成的普通时域渐变,不需要占用任何码率带宽去传参数。
HEVC 加权预测的全新演进与优化
相比于 H.264,HEVC 在架构上做出了大幅度的整改,为了让加权预测能够在其高宽带、大块(CTU)的架构下跑得更顺畅,标准进行了以下几项关键优化:
与高级运动矢量预测(AMVP、Merge)的完美融合
HEVC 引入了全新的运动矢量预测机制:Merge 和 Skip 模式。在 Merge 模式下,当前块直接“复制”邻近块的运动信息。
- 优化点:HEVC 的 Merge 候选列表中,不仅包含了邻近块的运动矢量(MV),还顺带包含了该运动矢量所绑定的加权预测参数(参考帧索引、权重、偏移量)。这意味着,一旦当前块选择了 Merge 模式,它不需要再重复声明自己要如何做加权,直接继承邻居的加权策略即可,极大地节省了块级别的信令开销。
硬件友好的精度控制(Bit Depth Adaptation)
HEVC 支持 10-bit(Main 10 Profile)乃至更高位深的视频。在加权预测的乘加运算中,内部中间结果的位深往往会暴增。
- 优化点:HEVC 严格限制了加权预测中间寄存器的最大位深(通常限制在 14 位或 16 位定点数以内),防止在大 QP 或深色度空间下发生算术溢出,这极大地降低了全海思、英伟达等硬件芯片在设计解码流水线时的乘法器成本。
工程实战:加权预测的性能、配置与代价
在工业级编码器(如 x265)的开发与配置中,加权预测是一把双刃剑,需要架构师根据业务场景精细化权衡:
命令行参数配置(FFmpeg + x265)
在 x265 中,加权预测的控制参数如下:
--weightp/-weightp <integer>:控制 P 帧的加权预测(0: 关闭;1: 仅计算参数不使用;2: 完整开启显式加权)。--weightb/-weightb:控制 B 帧是否开启隐式/显式加权预测。
# 高质量离线转场视频压缩(完全开启P/B帧加权)
ffmpeg -i input.mp4 -c:v libx265 -x265-params weightp=2:weightb=1 output.mp4
性能增益(Performance Gain)
- 在常规视频中(光照恒定):开启加权预测带来的码率节省非常微弱(通常 <1%< 1\%<1%),但其参数传输开销也极小。
- 在特殊视频中(大量淡入淡出、夜间监控车灯晃眼、舞台灯光):开启加权预测可以带来 20% ~ 40% 的惊人码率节省,同时能彻底消除由于残差过大导致的局部画面马赛克和呼吸效应。
计算复杂度与代价(Compute Cost)
- 编码端:代价主要在分析阶段。编码器为了找出最优的 www 和 ooo,需要对整帧图像进行直方图统计、均值计算,并进行多轮的加权运动搜索(Weighted Motion Search)。这会导致编码速度下降(通常会带来 5%~15% 的算力开销)。
- 解码端:解码端没有搜索压力,只有纯粹的公式计算。由于 HEVC 消除了浮点数乘法,全部转为“一次查表 + 一次整数乘法 + 移位加法”,因此硬件解码芯片运行加权预测时流畅度极高。
总结
HEVC 的加权预测是一项将物理世界的“光照线性变化”转化为数学领域的“乘加偏移模型”的成功典范。
它在协议层通过 PPS 与 Slice Header 建立了弹性的参数传输矩阵,在算法层与 HEVC 的 Merge/AMVP 深度绑定,在工程硬件层通过定点数移位(o_shift)斩断了浮点数乘法。对于含有渐变、转场及复杂光影变化的现代化视频流,加权预测是保障视频画质不崩溃、码率不飙升的核心底层功臣。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)