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的编码框架,说白了就是"预测+变换+量化+熵编码"这条老路,但每个环节都做了大手术。我画了张图,咱们边看边聊:
这张图我画了好几次才满意。核心流程其实不复杂:
- 输入帧进来,先切成CTU(Coding Tree Unit),最大64×64
- 每个CTU做四叉树递归划分,变成CU、PU、TU
- 对每个块,选帧内预测(35种模式)或帧间预测(运动估计)
- 原始块减去预测块,得到残差
- 残差做DCT/DST变换(支持4×4到32×32)
- 变换系数做量化,这一步是码率控制的命门
- 量化后的系数送CABAC熵编码,输出码流
- 别忘了环路滤波——去块滤波+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这些指标。然后改一个参数,再压,对比差异。这样反复几次,你对每个参数的作用就有感觉了。