AV1(AOMedia Video 1)是一种开放的、免版税的视频编码标准,由开放媒体联盟开发。该标准的最初设计目的是用于互联网上的视频传输,同时提供一个对所有用户开放且无须支付版税的视频压缩解决方案。作为 VP9的下一代视频编码标准,AV1 旨在超越 VP9,提供更高的视频压缩效率,同时保持或提升视频质量。在技术方面,AV1 是一种基于传统混合编码框架的视频编码标准,它在继承谷歌的 VP9 编解码标准的基础上,引入了一系列新技术并加以改进,以提高编码效率和视频质量。由于开放性和免费性质,AV1 已经得到了广泛的支持,并且被认为是未来视频编码的主流标准之一。本书根据公开发表的文献资料和AV1标准文档,参考编码器SVT-AV1对AV1标准的各个模块进行了详细的介绍,期望能够帮助开发者了解AV1标准本身及其影响。
1.1 AV1的背景和现状
随着高分辨率视频内容的日益普及以及虚拟现实和 360° 全景视频等沉浸式技术的兴起,主流视频内容提供商对于一个高效、技术先进且开放的编解码器的需求变得尤为迫切。然而,国际视频编码标准 H.265/HEVC所涉及的高昂专利授权费用和专利许可策略的不确定性使得内容提供商无法轻松便利地使用 HEVC 编码标准。HEVC 虽然提供了比前一代编解码标准 H.264/AVC更好的压缩效率,但其专利许可的复杂性和成本一直是业界的痛点。作为 HEVC 专利的管理者,HEVC Advance 宣布的版税结构对于内容提供商和设备制造商来说可能过于昂贵,特别是对于那些需要大规模部署编解码技术的公司。此外,HEVC 专利池的许可条款缺乏透明度,导致潜在的用户和开发者面临不确定性,担心未来可能出现的专利诉讼,进而产生额外的部署成本。这种不确定性和成本问题限制了 HEVC 技术的广泛采用,尤其是在开放和自由的互联网环境中。
在这种背景下,全球多家知名科技公司于 2015 年共同成立了 AOM。AOM 是一个非营利性的行业联盟,其目标是开发开放的、免版税的多媒体传输技术。AOM 采用开放网络标准开发的理念和原则来制定视频编码标准,作为迄今为止主导市场的 MPEG(Moving Picture Experts Group,动态图像专家组)和 VCEG(Video Code Experts Group,视频编码专家组)标准的替代品。AOM 的董事会成员包括亚马逊、苹果、ARM、思科、Facebook、谷歌、华为、英特尔、微软、Mozilla、奈飞(Netflix)、Nvidia、三星电子和腾讯。
AOM 的首个项目就是制定 AV1 标准,这是一种新的、开放的视频编解码标准。AV1 项目建立在 AOM 联盟成员的先前研究工作基础之上,包括 Xiph/Mozilla 的 Daala、谷歌的 VP10以及思科的 Thor等实验性技术平台。这些平台的研究成果为 AV1 提供了坚实的技术基础。AV1 参考编解码器的第一个版本于 2016 年发布,随后在 2017 年进行了软特性冻结。尽管在标准制定期间存在一些关键错误和需要进一步改进的地方,AV1 标准规范最终还是在 2018 年发布,并在同年晚些时候发布了经过验证的规范版本 1.0.0。与 VP9 相比,AV1 引入了 100 多项创新的编码技术。比如,AV1 引入了一种基于四叉树的编码块划分机制,并且允许使用多种形状的编码块划分模式,从而能够根据图像内容自适应地把图像划分为大小合适的编码块。此外,不同于以往只允许正方形或矩形等规则形状划分,AV1 首次引入了 Wedge-based 的楔形划分技术,使得运动估计和运动补偿能够适应多样化的形状划分,更贴合实际物体的运动轨迹,进一步提升了帧间预测的准确性。再比如,除了传统平移运动补偿之外,AV1 首次引入了基于仿射变换的运动补偿,这不仅能够处理图像的平移运动,还能更精确地捕捉旋转和缩放等复杂运动,从而显著提高编码效率。AV1 还在编解码标准中集成了屏幕内容编码(Screen Content Coding,SCC),并且首次引入电影颗粒合成工具。这意味着所有符合 AV1 标准的解码器都能够支持屏幕内容编码和胶片颗粒合成工具。这些技术的引入使 AV1 成了一个功能全面且高效的视频编码解决方案,适用于各种不同类型的视频内容和应用场景。
自 2018 年 AV1 标准发布以来,它已经赢得了业界的广泛支持。众多知名企业,包括三星、Vimeo、AMD、Nvidia、ARM、Facebook、Hulu、VideoLAN、Adobe 和苹果公司等,都是 AOM 的成员。苹果公司作为 AOM 董事会成员之一,虽然在联盟成立后才加入,但对 AV1 的发展做出了积极的贡献。AV1 格式已被正式纳入 Coremedia可管理的视频类型之中,这不仅标志着 AV1 格式的标准化,也反映了它在行业内已被广泛认可和接纳。随着越来越多的公司和组织加入 AV1 生态系统中,这一开放、免版税的视频编码标准正迅速成为视频流媒体和内容分发的首选格式。
1.2 档次和级别
考虑到通用应用场景的多样化,如不同的比特率、分辨率、视频质量,在制定标准时,标准制定组织综合考虑了各种典型应用场景的需求,开发了必要的编码算法,并将它们整合到一套统一的语法规则中。因此,标准规范有利于视频数据在不同应用之间的交换、兼容。
考虑到实现一个标准规范完整语法的可操作性,标准规范定义了不同的档次(Profile)和级别(Level)。档次指的是完整码流语法的一个子集,通常包含一组特定的编码工具和技术,用于满足特定应用需求的编解码器功能集。不同档次支持不同的编码特性,以适应不同的应用场景。然而,在给定档次的语法限制下,编码器和解码器的性能可能存在较大差异,这取决于语法元素的取值,如解码图像的大小等。目前,许多应用中的解码器能够处理一个档次下的所有情况,但这种做法既不实用又不经济。为了解决这个问题,标准规范在每个档次下还定义了若干级别,级别是对语法元素和参数值的限定集合,定义了编解码器在处理视频数据时的最大操作参数,如分辨率、帧率和比特率。级别确保了即使在不同的设备和网络条件下,符合特定级别的编码内容也能被相应级别的解码器处理。
AV1 为解码器定义了三个档次:主要档次(Main Profile)、高级档次(High Profile)和专业档次(Professional Profile)。主要档次允许输入视频位宽(BitDepth)为 8 比特或 10 比特,并且支持 4:0:0 和 4:2:0 的色度采样格式。高级档次在主要档次的基础上,进一步增加了对 4:4:4 色度采样格式的支持。专业档次则全面支持 4:0:0、4:2:0、4:2:2 和 4:4:4 等色度采样格式,以及允许输入视频位宽为 8 比特、10 比特和 12 比特。表 1-1 所示为 AV1 标准的各个档次所支持的编码工具集合。
表 1-1 AV1 标准的各个档次所支持的编码工具集合
档次(BitDepth)/ 比特 | 主要档次 | 高级档次 | 专业档次 | |
视频位宽 | 8, 10 | 8, 10 | 8, 10, 12 | |
色度采样格式 | 4:0:0 | 支持 | 支持 | 支持 |
4:2:0 | 支持 | 支持 | 支持 | |
4:2:2 | 不支持 | 不支持 | 支持 | |
4:4:4 | 不支持 | 支持 | 支持 |
级别的数值范围为 2.0~6.3。这些级别旨在量化解码器的硬件处理能力,确保视频内容能够与解码器的性能相匹配。解码器能够实现的级别越高,表明其硬件能力越强,能够处理更复杂的视频编码 / 解码任务。这种分级制度使得内容提供商可以根据目标用户的设备能力选择适当的编码级别,以确保视频播放的流畅性和兼容性。同时,它也鼓励硬件制造商开发和优化能够支持更高级别 AV1 解码的设备。
表 1-2 所示为 AV1 标准文档在各个级别下规定的部分最大操作参数取值,其中参数 MaxPicSize、MaxHSize 和 MaxVSize 对输出视频的分辨率进行了限制,参数 MaxDisplayRate 和 MaxDecodeRate 对解码器的最大显示速率和解码速率进行了限制。由表 1-2 可知,最低的级别 2.0 对应的视频分辨率和帧率可能是 426×240@30 帧 / 秒,级别 3.0 对应的是 854×480@30 帧 / 秒,级别 4.0 对应的是 1920×1080@30 帧 / 秒,级别 5.1 对应的是 3840×2160@60 帧 / 秒,级别 5.2 对应的是 3840×2160@120 帧 / 秒,而最高级别 6.3 对应的是 7680×4320@120 帧 / 秒。
表 1-2 各个级别下部分最大操作参数取值
级别 | MaxPicSize(样本) | MaxHSize(样本) | MaxVSize(样本) | MaxDisplayRate(样本 / 秒) | MaxDecodeRate(样本 / 秒) | 示例 |
2.0 | 147 456 | 2048 | 1152 | 4 423 680 | 5 529 600 | 426×240@30 帧 / 秒 |
2.1 | 278 784 | 2816 | 1584 | 8 363 520 | 10 454 400 | 640×360@30 帧 / 秒 |
3.0 | 665 856 | 4352 | 2448 | 19 975 680 | 24 969 600 | 854×480@30 帧 / 秒 |
3.1 | 1 065 024 | 5504 | 3096 | 31 950 720 | 39 938 400 | 1280×720@30 帧 / 秒 |
4.0 | 2 359 296 | 6144 | 3456 | 70 778 880 | 77 856 768 | 1920×1080@30 帧 / 秒 |
4.1 | 2 359 296 | 6144 | 3456 | 141 557 760 | 155 713 536 | 1920×1080@60 帧 / 秒 |
5.0 | 8 912 896 | 8192 | 4352 | 267 386 880 | 273 715 200 | 3840×2160@30 帧 / 秒 |
5.1 | 8 912 896 | 8192 | 4352 | 534 773 760 | 547 430 400 | 3840×2160@60 帧 / 秒 |
5.2 | 8 912 896 | 8192 | 4352 | 1 069 547 520 | 1 094 860 800 | 3840×2160@120 帧 / 秒 |
5.3 | 8 912 896 | 8192 | 4352 | 1 069 547 520 | 1 176 502 272 | 3840×2160@120 帧 / 秒 |
6.0 | 35 651 584 | 16 384 | 8704 | 1 069 547 520 | 1 176 502 272 | 7680×4320@30 帧 / 秒 |
6.1 | 35 651 584 | 16 384 | 8704 | 2 139 095 040 | 2 189 721 600 | 7680×4320@60 帧 / 秒 |
6.2 | 35 651 584 | 16 384 | 8704 | 4 278 190 080 | 4 379 443 200 | 7680×4320@120 帧 / 秒 |
6.3 | 35 651 584 | 16 384 | 8704 | 4 278 190 080 | 4 706 009 088 | 7680×4320@120 帧 / 秒 |
1.3 AV1 编码器和解码器现状
AV1 标准的软件实现目前处于不断发展和完善的阶段。对于编码器来讲,AOM 及其会员基于 AV1 标准先后推出了多款开源软件编码器,其中包括:
- libaom):该软件是 AV1 标准的参考实现,它包括一个编码器(aomenc)和一个解码器(aomdec)。作为以研究为目的的编解码器,libaom 的优势在于能够充分展示每个编码工具的编码特性,但这通常是以牺牲编码速度为代价的。在 AV1 标准刚刚发布时,libaom 的编码速度非常慢。但随后,AOM 会员对其进行了优化,显著地提高了编码速度,并且对编码效率影响很小。
- SVT-AV1):该软件是由英特尔和奈飞合作启动的开源 AV1 编码器,是可扩展视频技术(Scalable Video Technology)的实现。
- SVT-AV1 解码器:SVT-AV1 是一个全面的编解码器解决方案,它不仅包含了编码器,也包含了解码器。SVT-AV1 特别注重多线程性能,因此非常适合在服务器端进行点播和直播内容的转码处理。
- dav1d):dav1d 是一个专注于速度和性能的 AV1 解码器,由 VideoLan 和 FFmpeg 组织主导,并且得到了 AOM 的资助。它已被业界公认为性能优秀的 AV1 解码器,并且已经被谷歌 Chrome 浏览器等多个流行平台所集成和采用)。
- libgav1):由谷歌主导开发的 libgav1 解码器,特别优化了对 Android 平台的支持。libgav1 的推出进一步扩展了 AV1 编解码器在移动设备和基于 Android 的系统中的应用范围。
这些开源解码器的开发和优化展示了 AV1 标准在不同平台和应用中的适应性和灵活性。随着这些解码器的不断进步和集成,AV1 格式的视频内容将会被更广泛的用户群体访问和使用,从而推动 AV1 生态系统的健康发展和快速普及。
参考文献[1] https://developer.apple.com/documentation/coremedia/kcmvideocodectype_av1/[2] https://aomedia.googlesource.com/aom/[3] https://gitlab.com/AOMediaCodec/SVT-AV1[4] https://github.com/xiph/rav1e[5] https://code.videolan.org/videolan/dav1d[6] https://caniuse.com/?search=av1