1. HEVC编码标准概述:从H.264到HEVC的演进之路

各位同学好,我是老张。做视频编码这行十几年了,今天咱们聊聊HEVC——也就是H.265。说实话,我刚入行那会儿还在跟H.264较劲,没想到后来HEVC成了我吃饭的家伙。

HEVC全称是High Efficiency Video Coding,高效视频编码。名字里就带着"高效"俩字,它到底高效在哪?咱们一点点拆开看。

1.1 HEVC的发展历史:为什么我们需要它?

2003年,H.264/AVC标准发布。这玩意儿在当时简直是神作,同等画质下比MPEG-2省一半码率。我2008年做第一个视频项目时,用的就是H.264 Baseline Profile,跑在ARM9上,编码一帧要几百毫秒——现在想想真是原始社会。

但到了2010年左右,问题来了:

  • 分辨率暴涨:1080p成了标配,4K开始冒头
  • 带宽瓶颈:流媒体、视频通话对码率要求越来越苛刻
  • H.264老了:它的编码工具集已经榨干了

于是2010年4月,VCEG和MPEG联合成立了JCT-VC团队。两年多时间,2013年1月,HEVC正式成为国际标准(ITU-T H.265 | ISO/IEC 23008-2)。

关键时间线

  • 2010.04:JCT-VC成立,开始征集提案
  • 2012.07:标准草案冻结(FDIS)
  • 2013.01:正式发布HEVC v1
  • 2014-2016:Range Extension、SCC、3D等扩展陆续发布

我记得2014年第一次在x265上压4K视频时,看着码率只有H.264的一半,画质还更好,当时就一个感觉——这标准,靠谱。

1.2 HEVC vs H.264:到底强在哪?

很多人问我:"老张,HEVC比H.264好多少?" 我的回答是:同等画质下,码率省40%-50%。这不是吹的,我做过上百组对比测试。

咱们直接上对比表:

对比维度 H.264/AVC HEVC/H.265
编码效率 基准 提升40%-50%
最大块尺寸 16×16(宏块) 64×64(CTU)
块划分方式 固定宏块 四叉树递归划分
帧内预测模式 9种(4×4)/ 4种(16×16) 35种
运动补偿精度 1/4像素 1/4像素 + DCT插值优化
变换尺寸 4×4 / 8×8 4×4 / 8×8 / 16×16 / 32×32
环路滤波 去块滤波 去块滤波 + SAO
并行工具 Slice Tiles + WPP + Slice
最大分辨率 4K(勉强) 8K(原生支持)

我的经验:实际项目中,HEVC在低码率场景(<2Mbps)优势最明显。比如监控视频,H.264压到1Mbps已经糊成马赛克了,HEVC还能保持人脸可识别。但高码率场景(>20Mbps),两者差距会缩小到20%-30%。

1.3 HEVC编码框架核心模块:一张图看懂

HEVC的编码框架,说白了就是"预测+变换+量化+熵编码"这条老路,但每个环节都做了大手术。我画了张图,咱们边看边聊:

HEVC编码框架核心模块 HEVC编码框架核心模块 输入视频帧 CTU四叉树划分 帧内预测 35种模式 + DC + Planar 帧间预测 MV预测 + Merge + AMVP 残差 + DCT/DST变换 量化 + 率失真优化 CABAC熵编码 HEVC码流 环路滤波 去块滤波 + SAO 参考帧缓存 DPB + 长期参考

这张图我画了好几次才满意。核心流程其实不复杂:

  1. 输入帧进来,先切成CTU(Coding Tree Unit),最大64×64
  2. 每个CTU做四叉树递归划分,变成CU、PU、TU
  3. 对每个块,选帧内预测(35种模式)或帧间预测(运动估计)
  4. 原始块减去预测块,得到残差
  5. 残差做DCT/DST变换(支持4×4到32×32)
  6. 变换系数做量化,这一步是码率控制的命门
  7. 量化后的系数送CABAC熵编码,输出码流
  8. 别忘了环路滤波——去块滤波+SAO,这俩是画质保障

避坑指南:我曾经在一个项目中,为了追求编码速度,把SAO关了。结果码率是降了5%,但画面边缘出现明显的振铃效应,客户一眼就看出来了。SAO虽然计算量大,但对主观画质提升非常明显,尤其是低码率场景,千万别省。

1.4 核心模块深度解析:我踩过的坑

咱们挑几个关键模块细聊,这些都是实战中经常出问题的地方。

1.4.1 CTU与四叉树划分

HEVC最大的创新之一,就是把H.264的16×16宏块,升级成了64×64的CTU。你想想看,一个64×64的块,可以递归划分成4个32×32,每个32×32又可以继续分……最深能分到8×8。

为什么这么做?

  • 平坦区域:用大块(64×64),一个运动矢量搞定,码率省
  • 纹理复杂区域:切成小块(8×8),预测更精准

我在做监控视频编码时发现,背景区域(墙壁、天空)用64×64,前景人物用16×16或8×8,整体码率能省30%以上。但代价是——编码复杂度爆炸。H.264一个宏块最多4种划分,HEVC一个CTU有上千种划分可能。

1.4.2 帧内预测:35种模式怎么选?

H.264只有9种帧内预测模式(4×4块),HEVC直接干到35种。多了33种角度模式,加上DC和Planar。

实际编码时,不会傻傻地试全部35种。标准里有个快速模式决策:先算粗选成本,挑出几个候选,再精细算。我一般用x265的--rdoq-level 1,配合--psy-rd 0.5,能在画质和速度之间找到不错的平衡点。

1.4.3 环路滤波:去块滤波 + SAO

这是HEVC画质的最后一道防线。去块滤波(Deblocking Filter)解决块效应,SAO(Sample Adaptive Offset)解决振铃效应。

SAO是HEVC新增的,H.264没有。它分两种模式:

  • Band Offset:按像素强度分32个band,每个band加一个偏移量
  • Edge Offset:根据像素与邻域的梯度关系,分4类加偏移

我记得有一次做4K视频编码,关闭SAO后PSNR掉了0.3dB,但主观上看,画面边缘的"蚊子噪声"特别明显。从那以后,我只要做主观质量评估,SAO必开。

1.5 本章小结:HEVC到底值不值得学?

说句实在话,HEVC现在已经是视频编码的"标配"了。从抖音到Netflix,从视频会议到监控安防,到处都有它的影子。虽然AV1、VVC这些新标准在追赶,但HEVC的生态成熟度、硬件支持度,目前还是最好的。

学HEVC,你学的不只是参数怎么调,更是理解"率失真优化"这个视频编码的核心思想。后面咱们会一步步深入,从参数调优到质量评估,把HEVC吃透。

我的建议:如果你刚开始接触HEVC,别急着调参数。先拿x265默认参数压一段视频,看看码率、PSNR、SSIM这些指标。然后改一个参数,再压,对比差异。这样反复几次,你对每个参数的作用就有感觉了。