1. H265编码基础:从标准到核心特性

各位同学,今天我们正式进入H265编码的世界。说实话,我第一次接触HEVC标准时,也被那几百页的文档吓了一跳。但别担心,我会用最直接的方式,带你理解它的核心。

1.1 H265/HEVC标准概述

H265,也叫HEVC(High Efficiency Video Coding),是ITU-T和ISO/IEC联合推出的视频编码标准。它的目标很明确——在相同画质下,码率比H264降低50%。

我在2013年第一次拿到HEVC参考软件HM时,跑一个1080p序列要等好几个小时。现在想想,那时候的优化确实粗糙。但标准本身的设计,至今仍是业界标杆。

HEVC标准的核心目标:

  • 比H264节省约50%的码率
  • 支持最高8192×4320分辨率(8K)
  • 支持4:2:0、4:2:2、4:4:4色度采样
  • 支持8-14 bit位深

1.2 H265 vs H264:到底强在哪?

很多同学问我:“老师,H265不就是H264的升级版吗?”嗯,这么说也对,但不够准确。我习惯用一个比喻:H264是手动挡,H265是自动挡——都能开到目的地,但后者更聪明、更省油。

对比维度 H264/AVC H265/HEVC
编码单元 宏块(16×16) CTU(最大64×64)
帧内预测方向 9种 35种
运动补偿精度 1/4像素 1/4像素(亮度)/1/8像素(色度)
变换块大小 4×4 / 8×8 4×4 ~ 32×32
去块滤波 基于宏块边界 基于CU边界 + SAO
码率节省 基准 约40%-50%

我的经验:实际项目中,H265的编码复杂度大约是H264的2-3倍。但解码复杂度只增加了约1.5倍。所以如果你做直播推流,编码端压力大;做播放器,解码端还好。

1.3 编码核心特性:CTU

CTU(Coding Tree Unit)是HEVC最根本的变化。H264用16×16的宏块,HEVC改用64×64的CTU,并且可以递归四叉树划分。

为什么会这样?你想想看,对于1080p视频,H264需要处理8160个宏块,而HEVC只用510个CTU。块数少了,但每个块的选择更灵活了。

避坑指南:我曾经在项目中遇到一个坑——CTU深度设得太大(比如64×64直接拆到8×8),结果编码速度暴跌。后来我总结:平坦区域用大CTU,纹理复杂区域用小CTU,这才是正确姿势。

CTU的划分结构如下:

  • CU(Coding Unit):决定采用帧内还是帧间预测
  • PU(Prediction Unit):决定预测的具体方式
  • TU(Transform Unit):决定变换和量化

这三者的关系,我画了一张图帮你理解:

CTU 四叉树划分与 CU/PU/TU 关系 CTU 64×64 CU0 32×32 CU1 32×32 CU0-0 CU0-1 CU0-2 CU0-3 PU:预测单元 TU:变换单元 CU 决定预测模式 关键理解: • CTU 是根节点,最大 64×64 • 四叉树递归划分,深度可达 4 层 • 每个 CU 独立选择 PU 和 TU • PU 负责预测,TU 负责变换

1.4 帧内预测:35种方向的选择

帧内预测,说白了就是用已经编码的像素去猜当前块的内容。H264有9种预测模式,HEVC直接增加到35种——33种角度模式 + DC模式 + Planar模式。

我记得第一次看HEVC帧内预测的代码时,被那33个角度搞晕了。后来我画了个图才明白:角度越密,对纹理的拟合越准。

帧内预测模式分类:

  • Planar模式(模式0):平滑渐变,适合平坦区域
  • DC模式(模式1):取平均值,适合大面积均匀区域
  • 角度模式(模式2-34):覆盖从近水平到近垂直的33个方向

实际编码时,编码器会用RDO(率失真优化)去遍历这些模式,选出最优的那个。嗯,这里要注意——遍历35种模式的计算量不小,所以很多商用编码器会做快速模式决策,比如先粗筛再细选。

1.5 帧间预测:运动估计的进化

帧间预测是视频编码节省码率的大头。HEVC在H264的基础上做了几个关键改进:

  • Merge模式:直接从相邻块继承运动矢量,省去传输运动矢量的开销
  • AMVP(Advanced Motion Vector Prediction):更聪明的运动矢量预测
  • 运动补偿精度:亮度1/4像素,色度1/8像素

我的经验:在GStreamer中集成H265编码器时,帧间预测的参数调优最影响画质。我建议你重点关注参考帧数量和搜索范围——参考帧设太多,内存吃不消;搜索范围设太大,编码速度直线下降。

帧间预测的核心流程可以概括为:

  1. 在参考帧中搜索匹配块
  2. 计算运动矢量
  3. 生成预测残差
  4. 对残差进行变换、量化、熵编码

说白了,就是找相似、算差值、压缩差值。这个思路从MPEG-1时代就没变过,但HEVC把每一步都做得更精细了。

曾经踩过的坑:有一次我在嵌入式平台上跑HEVC编码,发现运动估计特别慢。排查了半天,原来是搜索范围设成了256像素。对于1080p视频,这个范围太大了。后来我改成64像素,速度提升了3倍,画质几乎没损失。

1.6 本章小结

这一章我们覆盖了H265/HEVC的三个核心概念:

  • CTU:从16×16宏块到64×64四叉树,灵活性大幅提升
  • 帧内预测:35种模式,更精细的方向拟合
  • 帧间预测:Merge、AMVP、更细的运动补偿