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

2023-05-16

AOMedia Video 1AV1)是一种开源、免版税的编解码器,最初设计用于Internet上的视频传输。它是由开放媒体联盟(AOMedia)于VP9的继任者开发的,成立于2015年,包括半导体公司,视频点播提供商,视频内容生产商,软件开发公司和网络浏览器供应商。AV1比特流规范包括参考视频编解码器。AV1参考编码器分别比libvpx-vp9,x264高配置文件和x264主配置文件分别实现了34%,46.2%和50.3%的数据压缩。像VP9一样,但与H.264 / AVC和HEVC不同,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矩形DCT(rect_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.0147456204811524,423,6805,529,6001501.5--284426×240 @ 30帧
2.1278784281615848,363,52010,454,4001503.0--284640×360 @ 30fps
3.06658564352244819,975,68024,969,6001506.0--2166854×480 @ 30帧
3.110650245504309631,950,72039,938,40015010.0--21661280×720 @ 30fps
4.023592966144345670,778,88077,856,76830012.030.043281920×1080 @ 30fps
4.1235929661443456141,557,760155,713,53630020.050.043281920×1080 @ 60fps
5.0891289681924352267,386,880273,715,20030030.0100.066483840×2160 @ 30帧
5.1891289681924352534,773,760547,430,40030040.0160.086483840×2160 @ 60fps
5.28912896819243521,069,547,5201,094,860,80030060.0240.086483840×2160 @ 120fps
5.38912896819243521,069,547,5201,176,502,27230060.0240.086483840×2160 @ 120fps
6.0356515841638487041,069,547,5201,176,502,27230060.0240.08128167680×4320 @ 30帧
6.1356515841638487042,139,095,0402,189,721,600300100.0480.08128167680×4320 @ 60帧
6.2356515841638487044,278,190,0804,379,443,200300160.0800.08128167680×4320 @ 120fps
6.3356515841638487044,278,190,0804,706,009,088300160.0800.08128167680×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 / LinuxChrome 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​​​​​​​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • C++ 如何用创建txt文件,并且写入内容(汇总)

    void CreatTxt char pathName unsigned char rBuffer int length 创建txt文件 char path 61 34 C 1 txt 34 你要创建文件的路径 ofstream fout
  • 常用邮箱的 IMAP/POP3/SMTP 设置

    通过网上查找的资料和自己的总结完成了下面的文章 xff0c 看完之后相信大家对这三种协议会有更深入的理解 如有错误的地方望指正 POP3 POP3是Post Office Protocol 3的简称 xff0c 即邮局协议的第3个版本 它规
  • Critical error detected c0000374

    最近发现一个新奇的情况导致这个问题出现 版本不一致 简单来说 xff0c 就是有一个类A xff0c 调用类B xff1b 但是这个类B有两个版本B1 xff0c B2 大小不一致 xff1b 类B包含两个类C D 在调用类B时 xff0c
  • 串口通信协议

    概念 串口通信 xff08 Serial Communications xff09 的概念非常简单 xff0c 串口按位 xff08 bit xff09 发送和接收字节 尽管比按字节 xff08 byte xff09 的并行通信慢 xff0
  • [二] Nuttx移植-星瞳pyboard开发板

    目录 一 Nuttx配置文件二 构建自己的配置文件1 include board h文件构建2 kernel amp amp scripts 构建3 nsh defconfig 构建4 src 构建5 Kconfig 构建 三 修改 nut
  • Parrot Bebop2 与ROS

    第二章 无人机平台与开发环境搭建 本章主要介绍无人机平台及相关开发环境的搭建 包括介绍Parrot Bebop2的相关规格与使用说明 xff0c 以及ROS的操作系统的简介 发展历程 安装流程 xff0c 还有ROS的数据通信方式和ROS的
  • python2与python3解析数据

    蓝牙模块接收到监测设备传输来的数据 xff0c 封装格式为十六进制的数据帧 xff0c 蓝牙模块将数据通过串口发送给wrtnode 2p xff0c wrtnode通过ser2net服务将数据转为网络数据 xff0c 可以通过监听192 1
  • 上传本地项目到github远程仓库

    前提已经注册github账号并在本地电脑安装git客户端 1 为Github账户设置SSH key 进入git bash xff0c 通过如下命令生成 ssh keygen t rsa C 34 github所绑定的邮箱 34 一路回车 x
  • 卫星导航定位技术二:由星历参数求解卫星时空位置

    卫星星历是描述卫星运动轨道的信息 也可以说卫星星历就是一组对应某一时刻的轨道参数及其变率 有了卫星星历就可以计算出任意时刻的卫星位置及其速度 GPS卫星星历分为预报星历和后处理星历 预报星历又称广播星历 GPS广播星历参数共有16个 xff
  • 模式识别:最小错误率贝叶斯决策分类

    一 引言 1 用贝叶斯决策理论分类要事先知道两个条件及要求 xff1a 各类的先验概率 xff1a 及特征向量的条件概率密度 xff1a 或后验概率 xff1a 决策分类的类别一定 2 解决的问题 xff1a 已知一定数目的样本 xff0c
  • 模式识别:BP神经网络算法

    1 BP神经网络分类器 1 1 BP算法基本原理 神经网络结构大概如下图1 1 xff1a 图1 1 包括输入层 xff0c 隐层和输出层 包含一层隐层的神经网络称为浅层神经网络 xff0c 即SNN 包含多层隐层的神经网络称为深度神经网络
  • 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法

    C均值聚类算法与分级聚类算法的聚类分析 一 实验目的 理解聚类的整体思想 xff0c 了解聚类的一般方法 xff1b 掌握 C means与分级聚类算法算法思想及原理 xff0c 并能够熟练运用这些算法进行聚类分析 xff1b 能够分析二者
  • ROS 配置多网口通讯

    列出当前所有的网络设备 ifconfig a 结果如下 xff1a enp1s0 Link encap Ethernet HWaddr 00 2f 5c 68 06 ad inet addr 192 168 1 101 Bcast 192
  • qt creator开启openMP加速方法

    环境 Qt creator4 11 for msvc2017 内置openmp库 启用方法 1 在pro文件加上QMAKE CXXFLAGS 43 61 openmp 2 添加头文件omp h
  • c++中::的用法

    是运算符中等级最高的 xff0c 它分为三种 1 global scope 全局作用域符 xff09 xff0c 用法 xff08 name 2 class scope 类作用域符 xff09 xff0c 用法 class name 3 n
  • 【ubuntu】——gflags&glog卸载与安装

    gflags glog 通过apt安装的glog xff0c gflags没有config cmake xff0c 所以在一些情况下需要手动编译 1 卸载gflags amp glog 只适用于通过apt安装的方式 span class t
  • 【算法】A* 寻路 可视化

    如下图 寻路图A 使用A 算法 xff0c 需要将地图抽象成一个个方块 xff0c 蓝色代表不可以动 墙 xff0c 黄色为起始点 xff0c 红色为目标点 其地图的二维坐标如图所示 xff0c 每一个单位为1米 A 的基本公式为 F n
  • 实验室新生成长指南[2.2.1] · 连接器

    欢迎进入 实验室新生成长指南 第二章 xff1a 硬件 本篇是 实验室新生成长指南 第二章第二节第一篇 xff1a 连接器 整个2 2节将帮助新手快速建立设计电路系统的一些基本知识储备 更多关于 实验室新生成长指南 的介绍 xff0c 请前
  • 走进音视频的世界——音视频的基本概念

    音视频通用的基本概念有码率 时长 xff0c 而不同音视频有不同的封装格式 编码协议 其中视频关键参数有分辨率 帧率 画质 旋转角度 像素格式 xff0c 而音频关键参数有采样率 声道数 声道布局 音质 采样数 采样位数 帧时长 接下来与大
  • 走进音视频的世界——新一代开源编解码器AV1

    AOMedia Video 1 xff08 AV1 xff09 是一种开源 免版税的编解码器 xff0c 最初设计用于Internet上的视频传输 它是由开放媒体联盟 xff08 AOMedia xff09 于VP9的继任者开发的 xff0