1. H.265 编码基础:HEVC 标准概述与核心模块
各位好,我是老周。做流媒体传输这行十几年了,H.265 一直是我工具箱里的核心武器。今天咱们先聊聊它的基础——HEVC 标准到底怎么回事,跟 H.264 比强在哪,以及它的编码框架长什么样。
说实话,我刚接触 H.265 那会儿也觉得它不过是 H.264 的升级版。后来踩了不少坑才明白,这俩的差距远不止压缩率提升那么简单。
1.1 H.265/HEVC 标准概述
HEVC,全称 High Efficiency Video Coding,是 ITU-T 和 ISO/IEC 联合开发的视频编码标准。2013 年正式发布,目标很明确——在同等画质下,码率比 H.264 再砍一半。
为什么能做到?说白了,H.265 在编码工具上做了大量改进。我记得当年第一次用 HM 参考软件压了一段 4K 视频,看到码率只有 H.264 的一半,画质却几乎没差别,当时确实挺震撼的。
核心目标:在相同主观画质下,码率降低 50%;或相同码率下,画质显著提升。
HEVC 主要面向的应用场景包括:
- 超高清视频:4K/8K 分辨率,这是 H.264 很难高效处理的
- 高动态范围(HDR):支持更宽的色彩和亮度范围
- 实时流媒体:低延迟场景下的高效传输
- 视频会议:带宽受限环境下的高质量通信
1.2 H.265 与 H.264 的对比
很多朋友问我,H.265 到底比 H.264 强在哪?我习惯从几个关键维度来对比:
| 对比维度 | H.264/AVC | H.265/HEVC |
|---|---|---|
| 编码效率 | 基准 | 同等画质码率降低 40%~50% |
| 最大块尺寸 | 16×16(宏块) | 64×64(编码树单元 CTU) |
| 帧内预测方向 | 9 种 | 35 种 |
| 运动补偿精度 | 1/4 像素 | 1/4 像素 + 1/8 像素(DCT 插值) |
| 变换块尺寸 | 4×4 / 8×8 | 4×4 ~ 32×32 |
| 环路滤波 | 去块滤波 | 去块滤波 + SAO(样点自适应补偿) |
| 并行处理 | Slice 级 | Tiles + WPP(波前并行处理) |
| 计算复杂度 | 较低 | 编码端约 2~4 倍,解码端约 1.5~2 倍 |
你看这个表,最直观的区别就是块结构。H.264 用 16×16 的宏块,H.265 直接干到 64×64 的 CTU。你想想看,处理 4K 视频时,大块意味着更少的块数、更少的边信息,压缩效率自然就上去了。
我的经验:在直播场景中,H.265 的编码延迟通常比 H.264 高 20~30ms。如果做低延迟直播,需要仔细调参,否则容易翻车。
1.3 H.265 编码框架与核心模块
H.265 的编码框架,本质上还是混合编码框架——预测 + 变换 + 量化 + 熵编码。但每个模块都做了深度优化。
下面这张图是我自己画的框架图,把核心模块和流程串起来了:
框架图看完了,咱们逐个模块拆开聊。
1.3.1 编码树单元(CTU)与四叉树划分
H.265 最核心的变化之一,就是用 CTU 替代了 H.264 的宏块。CTU 最大 64×64,可以递归四叉树划分成更小的 CU(编码单元),最小到 8×8。
为什么要这么设计?我举个例子。你拍一段天空,大片区域纹理简单,用 64×64 的大块就够了;但画面里突然出现一只鸟,纹理复杂,那就把那一块继续往下分。这种自适应划分,比 H.264 固定 16×16 灵活得多。
注意:四叉树深度越深,编码效率越高,但计算量也越大。我曾经在移动端设备上测试过,深度开到 4 层,编码时间直接翻了 3 倍。实际项目中需要根据硬件能力做权衡。
1.3.2 帧内预测
H.265 的帧内预测从 H.264 的 9 种方向扩展到了 35 种——33 个角度方向 + DC 模式 + Planar 模式。
方向多了有什么好处?说白了,能更精细地匹配图像纹理的方向。比如画面里有一根斜着的电线杆,H.264 可能只能选一个接近的角度,H.265 可以选几乎完全匹配的方向,残差自然更小。
我记得有一次做屏幕内容编码,画面里全是细密的文字和线条。H.264 的帧内预测怎么压都压不下去,换成 H.265 的 35 方向预测,码率直接降了 30%。
1.3.3 帧间预测与运动补偿
帧间预测这块,H.265 引入了几个重要改进:
- Merge 模式:直接从相邻块继承运动矢量,省去编码运动矢量的开销
- AMVP(高级运动矢量预测):从候选列表中选最优预测矢量
- 1/8 像素插值:比 H.264 的 1/4 像素更精细,运动估计更准
你想想看,运动补偿精度越高,残差就越小,码率自然就下来了。但代价是计算量——1/8 像素插值需要更多的滤波操作。
1.3.4 变换与量化
H.265 支持 4×4、8×8、16×16、32×32 四种变换块尺寸。大块变换能更好地利用图像的空间相关性,尤其适合平坦区域。
另外,H.265 在 4×4 帧内残差上使用了 DST(离散正弦变换)替代 DCT。为什么?因为帧内预测的残差在边界处往往有能量集中,DST 对这种分布的去相关效果更好。
避坑指南:量化参数(QP)的选择直接影响码率和画质。我习惯在直播场景中用 QP 22~28,VBR 模式下效果比较稳。QP 低于 18 时码率会暴涨,高于 35 时块效应就很明显了。
1.3.5 环路滤波:去块滤波 + SAO
H.265 在去块滤波的基础上,新增了 SAO(样点自适应补偿)。SAO 的作用是对重建像素做分类补偿,减少振铃效应和带状伪影。
说实话,SAO 是 H.265 里被很多人忽略的模块。我在做视频质量评测时发现,开启 SAO 后主观画质提升非常明显,尤其是低码率场景下的平滑区域。但 SAO 会增加解码复杂度,移动端解码器需要特别注意。
1.3.6 熵编码:CABAC
H.265 只用了 CABAC(上下文自适应二进制算术编码),去掉了 H.264 中效率较低的 CAVLC。CABAC 的压缩效率比 CAVLC 高 10%~15%,但计算量也更大。
H.265 的 CABAC 做了优化——上下文模型数量减少了,但编码效率反而提升了。这得益于更合理的上下文建模和概率更新策略。
1.4 并行处理:Tiles 与 WPP
H.265 引入了两种并行处理机制:
- Tiles:将画面分成矩形区域,每个 Tile 独立编码解码,适合多核并行
- WPP(波前并行处理):以 CTU 行为单位,每行依赖上一行的第二列开始并行
我个人的建议是,在服务器端编码用 Tiles,在移动端解码用 WPP。Tiles 的边界效应更可控,WPP 的码率损失更小。
关键总结:H.265 的核心优势在于更灵活的块划分、更精细的预测、更大的变换块,以及更高效的熵编码。这些改进让它在同等画质下码率降低 50%,但代价是计算复杂度大幅提升。