走进音视频的世界——新一代开源编解码器AV1

AOMedia Video 1AV1)是一种开源、免版税的编解码器最初设计用于Internet上的视频传输。它是由开放媒体联盟(AOMedia)于VP9的继任者开发的,成立于2015年,包括半导体公司,视频点播提供商,视频内容生产商,软件开发公司和网络浏览器供应商。AV1比特流规范包括参考视频编解码器。AV1参考编码器分别比libvpx-vp9,x264高配置文件和x264主配置文件分别实现了34%,46.2%和50.3%的数据压缩。像VP9一样,但与H.264 / AVCHEVC不同,AV1具有免版税的许可模式。另外,AV1图像文件格式(AVIF)是一种使用AV1压缩算法的图像文件格式

一、技术细节

AV1是具有新技术的传统的基于块的频率转换格式。基于Google的VP9,并且结合其他技术,这些技术主要为编码器提供了更多的编码选项,以更好地适应不同类型的输入。其工作过程如下:

1. 分区

帧内容被分成相邻的相同大小的块,称为超级块。与宏块的概念类似,超级块是正方形的,大小可以为128×128或64×64像素。可以根据不同的划分模式将超级块划分为较小的块。四向拆分模式是唯一可以递归细分其分区的模式。这允许将超级块划分为小至4×4像素的分区。如下图所示:

AV1超级块分区图。它显示了如何将128×128超级块一路拆分为4×4块。作为特殊情况,128×128和8×8块不能使用1:4和4:1分割,而8×8块不能使用“ T”形分割。

引入了“ T形”分区模式,这是为VP10开发的功能,并且可以将水平或垂直拆分成4个纵横比为4:1和1:4的条纹。可用的分区模式根据块大小而有所不同,128×128和8×8块均不能使用4:1和1:4拆分。而且,8×8块不能使用“ T”形分割。

现在可以使用平滑,倾斜的过渡线在块的空间不同部分上使用两个单独的预测(楔形分割的预测)。这样就可以更精确地分离对象,而无需沿着方形块的边界使用传统的阶梯线。得益于图块行(ext_tile)之间可配置的预测依赖性,可以实现更多的编码器并行性。

2. 预测

AV1以更高的精度(每个样本10或12位)执行内部处理,由于参考图像中的舍入误差较小,因此可以改善压缩效果。可以在一个块中以更高级的方式组合预测复合预测),包括不同方向上的平滑且尖锐的过渡渐变以及基于像素之间差异的隐式蒙版。这允许在同一块中使用两个帧间预测或帧间和帧内预测的组合。一帧可以引用6个而不是8个可用帧缓冲区中的3个进行时间(帧间)预测,同时在双向预测上提供更大的灵活性。

AV1中的扭曲运动warped_motion)和全局运动global_motion)工具旨在通过识别摄像机运动产生的模式来减少运动矢量中的冗余信息。他们实现了试图以诸如MPEG-4 ASP之类的先前格式加以利用的思想,尽管它采用了在三个维度上都能发挥作用的新颖方法。对于比特流中提供的整个帧,可以有一组变形参数,或者块可以使用一组隐含的局部参数,这些参数是根据周围的块进行计算的。切换帧(S帧)是一种新的帧间类型,可以使用来自同一视频的高分辨率版本的已解码参考帧进行预测,以允许切换到较低分辨率而无需在开始时使用完整的关键帧自适应比特率流传输用例中视频片段的大小。

帧内预测

帧内预测包括仅使用当前帧中可用的信息来预测给定块的像素。通常,帧内预测是根据预测块上方和左侧的相邻像素构建的。DC预测器通过对块上方和左侧的像素进行平均来构建预测。方向预测变量根据指定的角度外推这些相邻像素。在AV1中,可以选择8种主要方向模式。这些模式以45度角开始,并以22.5度的步长增加,直至203度。此外,对于每种定向模式,对于较大的块,可以发出六个3度的偏移信号,三个偏移在主角度之上,三个在主角度之下,导致总共56个角度(ext_intra)。“ TrueMotion”预测器已替换为Paeth预测器,该预测器查看从左上角的已知像素到新像素正上方和正左侧的像素之间的差异,然后选择一个位于较小渐变方向上的像素作为预测指标。调色板预测器可用于很少(最多8种)主色的块,例如某些计算机屏幕内容中的块。现在,可以基于色度块的预测器来利用亮度和颜色信息之间的相关性,该预测器基于来自亮度平面(cfl)的样本。为了减少沿着帧间预测块的边界的可见边界,一种称为重叠块运动补偿的技术(OBMC)可以使用。这涉及扩展块的大小,以使其与相邻块重叠2到32个像素,并将重叠部分混合在一起。

3. 数据转换

为了将预测后剩余的误差转换到频域,AV1编码器可以使用正方形,2:1/1:2和4:1/1:4矩形DCTrect_tx)以及非对称DST用于由于附近像素的预测而预期上边缘和/或左边缘具有较低误差的块,或者选择不进行任何变换(身份变换)。它可以组合两个一维变换,以便对水平和垂直维度(ext_tx)使用不同的变换。

4. 量化

AV1具有新的优化量化矩阵(aom_qm)。量化参数可被选择和发信号通知针对每个帧现在有用于两个色度平面的各个参数和可以使用的空间预测。在每个新的超级块上,可以通过发信号通知偏移来调整量化参数。

5. 过滤器

在环路滤波步骤中,Thor的约束低通滤波器和Daala的定向去环滤波器的集成取得了丰硕的成果:组合的“约束方向增强滤波器”cdef)超过了单独或一起使用原始滤波器的结果。它是一个边缘定向的条件替换滤波器,可大致沿主导边缘的方向平滑具有可配置(信号化)强度的块,以消除振铃伪影。还有基于Wiener滤波器和自导式恢复滤波器环路恢复滤波器loop_restoration),以消除由于块处理引起的模糊伪像。

薄膜颗粒合成film_grain)使用参数视频编码方法改善了对噪声信号的编码。由于胶片颗粒噪声固有的随机性,传统上该信号分量要么编码非常昂贵,要么易于损坏或丢失,可能会留下严重的编码伪像。该工具通过分析和综合来避免这些问题,仅基于主观视觉印象而不是客观相似性,用视觉相似的合成纹理替换部分信号。它从信号中去除颗粒成分,分析其非随机特性,然后仅将描述性参数传输到解码器,从而将合成的伪随机噪声信号加回到原始分量之后的信号中。它在视觉上等同于AC3,AAC。

6. 熵编码

达拉的熵编码器(daala_ec),非二进制算术编码器,被选择用于置换VP9的二进制熵编码器。采用非二进制算术编码有助于躲避专利,而且还增加了位级并行到串行否则进程,减少对硬件实现时钟速率的要求。这是说,现代二进制算术编码等的有效性CABAC正在接近使用不是二进制的,因此更大的速度更大的字母表,如霍夫曼码(但不像霍夫曼代码那样简单快捷)。AV1还具有适应算术编码器中每个编码符号而不是每个帧(ec_adapt)的符号概率的功能。

二、Profile与Level

1. Profile

AV1为解码器定义三个Profile:MainHighProfessional。Main配置文件允许每个样本具有8:0或10位的位深度,并具有4:0:0(灰度)和4:2:0色度采样。高配置文件进一步增加对4:4:4色度采样的支持。专业配置文件将功能扩展为完全支持具有8位,10位和12位色深的4:0:0、4:2:0、4:2:2和4:4:4色度子采样。

2. Level

AV1为解码器定义级别,最大变量的级别范围为2.0到6.3。可以实现的级别取决于硬件功能。如下表所示,分辨率 为2.0级为426×240 @ 30 fps, 3.0级为854×480 @ 30 fps,4.0级为1920×1080 @ 30  fps, 5.1级为3840×2160 @ 60 fps,3840×2160 @ 120  fps对于5.2级,则为7680×4320 @ 120  fps。

等级 最大图片大小

(样品)

最大高度

(样品)

最大尺寸

(样品)

MaxDisplayRate

(赫兹)

最大解码率

(赫兹)

MaxHeader

频率(Hz)

主Mbps

(兆位/秒)

高Mbps

(兆位/秒)

最小比较基础 最大瓷砖 马克斯瓦克斯 例子
2.0 147456 2048 1152 4,423,680 5,529,600 150 1.5 -- 2 8 4 426×240 @ 30帧
2.1 278784 2816 1584 8,363,520 10,454,400 150 3.0 -- 2 8 4 640×360 @ 30fps
3.0 665856 4352 2448 19,975,680 24,969,600 150 6.0 -- 2 16 6 854×480 @ 30帧
3.1 1065024 5504 3096 31,950,720 39,938,400 150 10.0 -- 2 16 6 1280×720 @ 30fps
4.0 2359296 6144 3456 70,778,880 77,856,768 300 12.0 30.0 4 32 8 1920×1080 @ 30fps
4.1 2359296 6144 3456 141,557,760 155,713,536 300 20.0 50.0 4 32 8 1920×1080 @ 60fps
5.0 8912896 8192 4352 267,386,880 273,715,200 300 30.0 100.0 6 64 8 3840×2160 @ 30帧
5.1 8912896 8192 4352 534,773,760 547,430,400 300 40.0 160.0 8 64 8 3840×2160 @ 60fps
5.2 8912896 8192 4352 1,069,547,520 1,094,860,800 300 60.0 240.0 8 64 8 3840×2160 @ 120fps
5.3 8912896 8192 4352 1,069,547,520 1,176,502,272 300 60.0 240.0 8 64 8 3840×2160 @ 120fps
6.0 35651584 16384 8704 1,069,547,520 1,176,502,272 300 60.0 240.0 8 128 16 7680×4320 @ 30帧
6.1 35651584 16384 8704 2,139,095,040 2,189,721,600 300 100.0 480.0 8 128 16 7680×4320 @ 60帧
6.2 35651584 16384 8704 4,278,190,080 4,379,443,200 300 160.0 800.0 8 128 16 7680×4320 @ 120fps
6.3 35651584 16384 8704 4,278,190,080 4,706,009,088 300 160.0 800.0 8 128 16 7680×4320 @ 120fps

三、支持的容器格式

标准化

ISO基本媒体文件格式:AOMedia的ISOBMFF容器化规范是第一个定稿的,也是第一个获得采用的规范。这是YouTube使用的格式。

Matroska:Matroska容器化规范的第1版于2018年末发布。

不规范

WebM:就形式而言,截至2019年末,AV1尚未被批准纳入称为WebM的Matroska子集中。

On2 IVF:此格式是从VP8的第一个公开发行版继承的,在此它用作简单的开发容器。 rav1e也支持此格式。

标准WebM:在指定Matroska容器化之前,Libaom具有对WebM的早期支持,但已更改为符合标准。

四、软件实现

  • Libaom是参考实现。它包括一个编码器(aomenc)和一个解码器(aomdec)。与以前的研究编解码器一样,它的优点是可以合理地证明每个功能的有效使用,但以编码速度为代价。在冻结功能时,编码器的速度变慢了,但是在此之后,效率优化的影响仍然可以忽略不计。
  • rav1e是用Rust和Assembly编写的编码器。 rav1e采用与Aomenc相反的开发方法:从最简单(因此也是最快)的编码器开始,然后随着时间的流逝提高效率,同时保持快速。
  • SVT-AV1包含由英特尔于2019年2月首次发布的开源编码器和解码器,专门设计用于基于Intel Xeon处理器的数据中心服务器上。Netflix与英特尔合作开发了SVT-AV1。
  • dav1d是用C99编写的解码器,其汇编着眼于速度和可移植性。第一个正式版本(0.1)于2018年12月发布。 0.2版于2019年3月发布,开发人员称,用户能够“在所有平台上安全使用解码器,并具有出色的性能”。版本0.3于2019年5月发布,进一步优化表明其性能比aomdec快2至5倍。版本0.5于2019年10月发布。Firefox 67在2019年5月从Libaom转换为dav1d作为默认解码器。与libgav1和libaom相比,dav1d v0.5是2019年最佳解码器。
  • Cisco AV1是Cisco为其Webex 电话会议产品开发的专有实时编码器。编码器针对延迟和“商品笔记本电脑”具有“可用CPU占用空间”的约束条件进行了优化。思科强调,在其工作点–高速,低延迟– AV1的大型工具集并不排除低编码复杂性。相反,所有配置文件中用于屏幕内容和可伸缩性的工具的可用性使他们能够找到良好的压缩比速度折衷,甚至比HEVC更好。与他们先前部署的H.264编码器相比,一个特定的改进领域是高分辨率屏幕共享。
  • libgav1是Google发行的用C ++ 11编写的解码器。

五、操作系统支持

如下表所示,列举出主流操作系统对AV1的支持:

不同操作系统对AV1的支持
微软Windows 苹果系统 BSD / Linux Chrome OS 安卓操作系统 的iOS
编解码器支持 部分 支持 支持 支持
容器支撑 ISO基本媒体文件格式(.mp4)
WebM(.webm)
Matroska(.mkv)
ISO基本媒体文件格式(.mp4)
WebM(.webm)
Matroska(.mkv)
待定
笔记 -在Windows 10 October 2018 Update(1809)中引入了带有AV1 Video Extension附加组件的支持。

-在通用Windows平台应用程序(如Microsoft Edge影视)上受支持

从macOS Catalina开始不受支持 从Chrome OS 70开始支持解码 Android 10开始支持 自iOS 13起不受支持

 六、AVIF支持

Netflix在2018年12月14日发布了第一个.avif样本图像并在VLC中添加了支持。微软宣布支持Windows 10 “19H1”预览版,其中包括对文件资源管理器,Paint和多个API的支持以及示例图像。Paint.net增加了对在2019年9月打开AVIF文件的支持,以及在2020年8月更新中保存AVIF格式图像的功能。Colorist格式转换和Darktable RAW图像数据均已发布并支持libavif,并提供了libavif的参考实现,以及GIMP插件实现已开发,同时支持3.x和2.10.x插件API。本地AVIF导入和导出已在2020年10月添加到GIMP中。从v4.0开始,qView图像查看器中提供了AVIF读取支持。

2020年2月14日,Netflix发表一篇博客文章,客观评估了AVIF与JPEG相比的图像质量和压缩效率。Web浏览器中的AVIF支持正在开发中。2020年8月,发布了具有完全AVIF支持的Google Chrome 85版本。Mozilla正在努力支持Firefox中的图像格式。 Cloudflare在2020年10月3日的博客文章中宣布对AVIF的支持。Firefox 86在发布时将默认启用AVIF支持。适用于Android的Google Chrome 89添加AVIF支持。

参考资料

AV1维基百科:https://en.wikipedia.org/wiki/AV1

AV1官网:Alliance for Open Media

可以到GitHub一起学习音视频:https://github.com/xufuji456/FFmpegAndroid​​​​​​​

猜你喜欢

转载自blog.csdn.net/u011686167/article/details/113806322