← 首页

WeCodec 知识库 · 视频编码

H.264、H.265、AV1、VVC 对比

四代主流视频编码标准的来历、效率、块大小和授权

四个标准用的是同一套思路:切块、预测、变换、量化、熵编码。每往后一代,同画质下码率大约再省 25% 到 50%,编码计算量也跟着上涨。

授权方式差别很大:H.264、H.265、H.266 都要专利授权,AV1 免版税。

1. 四个标准一览

先看名字和来历。同一个标准常有两三个名字,因为 ITU-T 和 ISO/IEC 两个组织各给一个编号。

标准别名制定方首版定稿
H.264AVC,MPEG-4 Part 10ITU-T VCEG 与 ISO/IEC MPEG 联合组成的 JVT2003 年 5 月
H.265HEVC,MPEG-H Part 2ITU-T 与 ISO/IEC 联合制定2013 年发布
AV1AOMedia Video 1开放媒体联盟 AOMedia2018 年 3 月 28 日
H.266VVC,MPEG-I Part 3ITU-T 与 ISO/IEC 联合组成的 JVET2020 年 7 月 6 日

表中信息来自各标准的维基百科条目,点标准名可以跳转。H.264、H.265、H.266 的正式文本由 ITU-T 发布(ITU-T H.264、ITU-T H.265、ITU-T H.266),AV1 的规范由 AOMedia 公开(AV1 Bitstream & Decoding Process Specification)。

首版之后标准还会继续修订。H.264 在 2003 年定稿后,后续版本陆续加入了多项扩展功能(维基百科:AVC)。AV1 在 2018 年 6 月 25 日发布了经过验证的 1.0.0 版规范(维基百科:AV1)。

2. 时间线

20022007201220172022H.2642003 年 5 月H.2652013 年AV12018 年 3 月H.2662020 年 7 月蓝色:ITU-T 与 ISO/IEC 联合制定 绿色:AOMedia 制定
图 1 四个标准首版定稿的时间,横轴按年份等比例。

H.264 到 H.265 隔了 10 年,之后 7 年内又出了 AV1 和 H.266。AV1 出现的直接原因是 HEVC 的专利授权费用高、条件不明朗。开放媒体联盟希望用开源、免版税的格式消除这种不确定性(维基百科:AV1)。

AV1 也不是从零开始。它以 Google 的 VP9 代码为基础,又吸收了几个实验格式的技术,包括 Google 的 VP10、Xiph 和 Mozilla 的 Daala,以及 Cisco 的 Thor(同上)。

3. 压缩效率

比较压缩效率,一般看画质相同时新标准少用多少码率。

0%20%40%60%H.265 对比 H.26425% 到 50%H.266 对比 H.265约 50%AV1 对比 x264 High约 45.8%AV1 对比 VP9约 32.9%同画质下节省的码率
图 2 各组数据来自不同测试,比较对象也不同,不能互相换算。H.265 取维基百科给出的范围。

H.265 比 H.264 省 25% 到 50%(维基百科:HEVC),H.266 比 H.265 约省 50%(维基百科:VVC)。AV1 的数字来自 Facebook 2018 年的测试:按 PSNR 算,AV1 比 x264 High 档次平均省 45.8%,比 libvpx 的 VP9 省 32.9%(AV1 beats x264 and libvpx-vp9 in practical use case)。

这些数字很依赖测试条件。编码器实现、速度档位、画质指标一换,结论就会变。PSNR(峰值信噪比)按像素误差打分,和人眼观感并不完全一致。

省下的码率要用算力换。HEVC 征集方案时,一些方案能以 AVC 一半的码率做到同等画质,计算复杂度却增加 2 到 10 倍(维基百科:HEVC)。AV1 早期的参考编码器比当时的 HEVC 编码器慢好几个数量级(维基百科:AV1)。

4. 编码块越来越大

分辨率越来越高,编码块也跟着变大。大块能用更少的比特描述大片平坦的画面。

AV1 超级块H.266 CTU128×128H.265 CTU64×64H.264 宏块16×16
图 3 各标准最大编码块的尺寸,按比例绘制。
标准最大编码块变换
H.26416×16 宏块整数变换,4×4 和 8×8
H.26564×64 CTU整数 DCT 4×4 到 32×32,另有 DST
AV1128×128 超级块方形和长方形 DCT,另有非对称 DST
H.266128×128 CTU在 H.265 基础上增加长方形变换块

大块还能降低解码开销。同一组 HEVC 测试里,CTU 限制为 16×16 时,解码时间比用 64×64 长 60%。HEVC 也因此规定,level 5 及以上的码流只能用 32×32 或 64×64 的块(维基百科:Coding tree unit)。level(级别)是标准里对分辨率、码率这类参数设的上限,级别越高,允许的分辨率越大。

H.264 的信息来自维基百科:Macroblock和维基百科:AVC,H.265 来自维基百科:HEVC,AV1 来自维基百科:AV1。H.266 的 CTU 尺寸来自 Cerveira 等人 2020 年的论文(Memory Assessment of Versatile Video Coding),变换块来自维基百科:VVC。CTU(coding tree unit,编码树单元)和变换的原理见《块划分、变换与量化》。

5. 授权和怎么选

技术之外,授权方式往往决定能不能用。

标准授权情况什么时候选
H.264需专利授权,有 MPEG LA 专利池要照顾老设备和老播放器时
H.265需专利授权,授权流程比 H.264 更复杂目标设备支持,且能处理授权时
AV1免版税网页和流媒体分发,想避开授权费时
H.266按合理无歧视条款授权,有 Access Advance 和 Via-LA 两个专利池较新,适合先评估设备支持再决定

H.264 和 H.265 的授权信息来自维基百科:AV1,H.266 的来自维基百科:VVC。为了避免重演 HEVC 的授权乱局,业界在 VVC 推出时专门成立了媒体编码产业论坛 MC-IF(同上)。最右一列是本文的建议,不是标准规定。

选标准先看播放端能不能解码。播放端解不了,压缩率再高也没用。各浏览器支持哪些编码格式,可以查 MDN 的视频编码指南(MDN:Web video codec guide)。

参考资料

  1. 《Advanced Video Coding》,Wikipedia https://en.wikipedia.org/wiki/Advanced_Video_Coding
  2. 《High Efficiency Video Coding》,Wikipedia https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding
  3. 《AV1》,Wikipedia https://en.wikipedia.org/wiki/AV1
  4. 《Versatile Video Coding》,Wikipedia https://en.wikipedia.org/wiki/Versatile_Video_Coding
  5. 《Macroblock》,Wikipedia https://en.wikipedia.org/wiki/Macroblock
  6. 《Coding tree unit》,Wikipedia https://en.wikipedia.org/wiki/Coding_tree_unit
  7. 《H.264: Advanced video coding for generic audiovisual services》,ITU-T https://www.itu.int/rec/T-REC-H.264
  8. 《H.265: High efficiency video coding》,ITU-T https://www.itu.int/rec/T-REC-H.265
  9. 《H.266: Versatile video coding》,ITU-T https://www.itu.int/rec/T-REC-H.266
  10. 《AV1 Bitstream & Decoding Process Specification》,AOMedia https://aomediacodec.github.io/av1-spec/
  11. 《AV1 beats x264 and libvpx-vp9 in practical use case》,Facebook Engineering,2018 https://engineering.fb.com/2018/04/10/video-engineering/av1-beats-x264-and-libvpx-vp9-in-practical-use-case/
  12. 《Memory Assessment of Versatile Video Coding》,Cerveira 等,arXiv 2005.13331 https://arxiv.org/abs/2005.13331
  13. 《Web video codec guide》,MDN https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Video_codecs