B站自研新一代视频编码器 BILIAV1

1. AV1 视频编码标准介绍

AV1是开放媒体联盟(AOM, Alliance for Open Media)开发的第一代开放,免版税的视频编码标准。AV1于 2018 年 3 月定稿,相同画质下,码率比 H.265/HEVC 低 20% 左右。经过 Google、Netflix、Meta、Amazon 等互联网巨头的不断推广,目前 AV1 生态逐步发展成熟:PC 侧显卡供应商 AMD、 Intel 和 Nvidia 均已经发布支持 AV1 硬解的相关产品;移动端 MediaTek、 Qualcomm 和 Apple 的旗舰手机芯片都已经支持 AV1 硬解;软件解码器 dav1d 已经具备主流平台的实时解码能力[1]。2020年底 B 站开始自研 BILIAV1 编码器,2022年初开始在 PC 侧点播业务部署 AV1 编码,目前正在积极筹备 AV1 编码在直播业务上的应用。

粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

2. AV1 标准的主要压缩技术

AV1 整体仍是混合编码技术框架的继续演进和优化,我们先简要介绍 AV1 标准的一些主要技术[2]。

  • 块划分

AV1 中最大的块称为 superblock,其大小可以在 sequence header 中设置为128×128 或 64×64。通常只有在小分辨率或为了提升并行能力的情况下才配置为 64×64,否则配置为 128×128 以提升压缩效率。和 H.265/HEVC 一样,AV1 也使用了迭代块划分的设计。每个 2N×2N 块可以继续划分为 4 个 N×N 的小块,直到达到最小的块大小 4×4。以外,AV1 还支持一分为二的 rect 划分,一分为三的 ab 划分和一分为四的 h4 和 v4 划分,不过这些划分不允许被继续划分。

  • 预测

帧内预测。除了继续优化传统帧内预测算法,比如更加精细的预测角度,更多的平滑预测模式(smooth intra prediction)等,AV1 还引入了迭代预测(recursive intra prediction)和跨分量预测(chroma from luma prediction,CFL)。此外, 新引入的调色板预测模式(color palette)和 帧内块拷贝(intra block copy)可以显著提升屏幕场景下的压缩性能。

帧间预测。AV1 最多支持 7 个帧间参考帧,每个帧间预测块可以从这 7 个参考帧中选择 1 个或 2 个作为参考帧(并不是所有的组合都是合法组合)以进行单向或双向预测。其中,单向预测模式时最多有三种 motion mode,分别是 translation、 obmc 和 local warp。除了常规的平均加权预测(Average Predictor)和基于参考帧距离的加权预测(Distance Weighted Predictor)外,AV1 还引入了基于两个参考块像素差的加权预测(Difference Weighted Predictor)和楔形模式(Wedge Mode)。

帧内帧间预测。该预测方式通过预设的权重模板把帧内预测值和帧间预测值逐点加权平均得到最后的预测值。其中,帧内预测只允许 DC、垂直、水平、平滑模式。AV1 tool off 测试表明,该模式平均有 0.7% 的码率收益。

  • 变换

AV1 采用最大深度为 2 的递归搜索最优 transform size 的方案,标准允许的最大和最小transform size分别是 64×64 和 4×4。4 种 1-D 变换类型——DCT、 ADST(asymmetric discrete sine transform)、FLIPADST(flipped ADST)和IDTX(identity transform,transform skip),可以两两组合成16种 2-D 变换类型。不大于 32×32的块最多可以有 16 种2-D变换类型, 32×32 及以上只允许 DCT 和 IDTX。

  • 环路滤波

AV1有三种环内滤波器,按照处理的先后顺序,分别为:

  1. Deblocking filter: 目标是去除块效应。
  2. CDEF(Constrained Directional Enhancement Filter): cdef 首先检测边缘方向,然后基于边缘方向做非线性滤波。可以认为 cdef 是一种“保边”滤波器。
  3. Loop Restoration Filter。该滤波器处理单元是 LRU(loop restoration units), LRU的大小由帧级别语法参数指定,可以是 64×64、 128×128或256×256。每个 LRU 可以有三种选择:Wiener Filter、 Self-Guided Filter 或不滤波。

3. BILIAV1自研之路

B 站早在 2020 年就开始关注 AV1 标准。当时 chrome 浏览器已经支持 AV1,但不支持 H.265/HEVC 。当AMD、 Intel、 Nvidia 纷纷推出支持 AV1 硬解的产品后,我们意识到 AV1 标准有极大概率会在网页端推广开来。

BILIAV1 项目开始于 2020年10 月份。当时开源的软件编码器主要有参考代码 Libaom 和 Intel 的 SVT-AV1。基于已有开源产品的二次开发可以节省大量基础组件的研发时间,是编码器比较稳妥的研发路线,但 B 站编码团队的研究发现,虽然 Libaom 和 SVT-AV1 都有明显的可以优化的空间,但其原始架构设计严重制约了许多优化技术的运用,因此,基于团队已有的技术积累,我们决定从零自研一款 AV1 编码器。

图2: 同画质下 BILIAV1 和 SVT-AV1 性能比较

首先看一下我们 BILIAV1 的性能数据。横轴是编码速度(对数刻度),纵轴是 PSNR 维度的 BDRate,SVT-AV1 1.7.0 版本 preset 7 的结果作为 100% 速度和 100% 码率点。B 站视频以 UGC (User-generated Content)为主,对转码速度有较高要求,所以我们选择 SVT-AV1 1.7.0 相对较快的 preset 7 档位作为 anchor。BILIAV1 2.4.0 是我们最新发布的产品版本,目前使用 preset 4 作为点播档位。相同画质下:BILIAV1 2.4.0 preset 4 比 SVT-AV1 1.7.0 preset 7速度慢 36%,码率低 19.6%;BILIAV1 2.4.0 preset 4 比 SVT-AV1 1.7.0 preset 6 速度快 25%,码率低 12.4%。按照图2 的数据趋势,在 B 站点播档位,同画质同速度下, BILIAV1 2.4.0 码率比 SVT-AV1 1.7.0 低 15% 左右。BILIAV1 2.4.0 preset 0 是 B 站还在开发中的直播档位,与 SVT-AV1 1.7.0 preset 8 速度相当,但码率低17.3%。

编码器研发主要包括工程和算法两个方面。工程方面需要考虑的事情较为繁杂,例如:测试和trace 系统、并行设计、数据结构、内存利用、SIMD汇编等;算法方面主要有:码率分配/控制、标准算法实现、快速算法等。算法是编码器研发的核心,但工程是无疑是编码器研发的基础。BILIAV1 编码器从零研发,一开始就面对巨量的基础模块开发工作。以下通过几个例子来分享 BILIAV1 的研发历程。

3.1 TRACE系统

项目一开始,我们就整理了自研编码器研发经常会遇到的一些典型工程调试问题:

  1. 不一致问题:编解码不一致,debug/release 不一致, 多次测试结果不一致等
  2. memory 相关:memory leaks, stack buffer overflow, heap buffer overflow 等

某些问题的定位有时是特别困难的。比如自研编码器不可避免经常会遇到熵编码和熵解码不一致的问题,由于熵编码的上下文依赖,有时候并不能很快定位出问题的第一现场。特别是刚参与编解码的新手工程师,遇到这类问题经常觉得十分棘手。

解决问题的前提是发现问题,充分的测试是编码器高质量交付的基础。我们基于已有的测试框架快速搭建了 BILIAV1 的测试框架,具体的测试项有:编解码一致性测试、分辨率测试、tool 开关测试、debug/release 一致性测试、多线程一致性测试、AddressSanitizer 测试等。在研发前期,编码器速度较慢,高效的 case 无疑是可以快速迭代编码器的基础。以分辨率测试为例,遍历分辨率无疑是最充分的方案,但很明显也是最低效的方案。因此,我们只在发布重点版本才使用遍历方案,而对于 patch 测试,我们的测试分辨率只包括

  1. 非整数个 superblock 行/列和非整数个 LRU行/列: 以步长为 4 遍历 4×4 到 512×512 的分辨率
  2. 最大分辨率。

BILIAV1 TRACE系统:

  1. 关键模块的 log 信息,包括预分析cost, 运动搜索,分阶段 RDO cost 和决策结果,熵编码context和码流,码率控制参数更新等
  2. 线程调度信息
  3. 重要节点的像素值或 CRC

TRACE 可以帮助研发工程师快速定位问题,特别是对解决项目初期 的bug 帮助极大。

3.2 并行设计

AV1 压缩率的提升无疑需要更大的算力。现在 CPU 单核性能的提升越来越难,新编码器的算力需求往往需要借助多核并行才能满足。

预分析

主要包括 cutree、aq、 mctf。预分析计算基于原始像素进行,主要的计算有 intracost、 intercost、variance 等,均可帧级/slice级并行。

主编码器

帧间并行

参考帧结构:低 temporal layer 的帧要尽量避免使用高或者同 temporal layer 的帧做参考。BILIAV1限制:mini-GOP 内部只允许 temporal layer 小于当前帧 temporal layer 的帧做参考帧;mini-GOP 间,可以使用高 temporal layer 的帧做参考,但是参考帧的 temporal layer 最多不能超过当前帧 temporal layer + 1

帧间参考延迟:无论是行级别等待还是块级别等待,垂直方向的 search range 都直接影响帧并行能力。BILIAV1 借助预分析得到的运动矢量,自适应决策当前块的search range, 以在不影响压缩性能的前提下,最大化帧间并行能力。

需要特别指出的是:

  • 对 AV1 的 deblocking filter、cdef、 loop restoration 使用帧级别的参数决策可以有 3% 左右的码率收益,但是编码 fps 下降较多,为了保证整体编码 fps 满足产品部署需求,此时可以通过 mini-GOP 间并行来提高编码速度。
  • AV1 支持当前帧的熵编码初始概率来源于已经编码的某个帧。该工具有 1% 左右的码率收益,但需要等待被继承帧的熵编码结束才编码当前帧。因此,对帧并行有一定影响。有两种方法可以部分解决这个问题:1) 继承较远距离帧的熵编码概率,例如使用上个 mini-GOP 中已经编码结束的帧;2) 主编码器模式决策和熵编码使用不同的熵编码概率,这样当前帧模式决策部分就可以和被继承帧并行处理。

Superblock 并行

AV1 标准虽然并没有规定类似HEVC WPP这种并行编码方式,但仍然可以采用 WPP 这种方式来实现 Superblock 级别的并行编码,与 HEVC WPP 不同的是,AV1 Superblock 并行下,模式决策使用的熵编码概率只是实际熵编码概率的估计值,并不是实际的熵编码概率。

环内滤波并行

开启帧级别决策滤波参数时依次决策 deblocking filter、cdef 和loop restoration 的参数。此时,通过把一帧划分为多个 slice 的方式可以实现并行加速;

关闭帧级别决策滤波参数:在某一个 Superblock 行中,第 N 个 Superblock 模式决策结束,就依次启动 第 N 个superblock 的 deblocking filter,第 N – 1 个 Superblock 的 cdef ,第 N – 2 个 Superblock 的 loop restoration filter。

指令并行

BILIAV1 使用 SIMD intrinsics对耗时模块进行加速,对于比较复杂的模块又进一步使用 asm 汇编加速。例如:BILIAV1 使用 asm 汇编重新设计和实现了 transform type 和 transform size 部分的汇编,与 intrinsics 相比,asm 可以整体加速 10% 以上。

3.3 快速算法

快速算法是自研编码器的核心,几乎所有核心模块都需要高效的快速算法才能满足产品部署对编码速度的要求。这里重点介绍一下参考帧剪枝相关的快速算法。AV1 标准规定最多可以有7个帧间参考帧,并最多允许 28 种参考帧组合。与只使用最邻近参考帧相比,多参考帧带来的平均码率收益约为 4%。这里分享几个参考帧剪枝的快速算法:

  1. 基于已经尝试过的划分的较优参考帧,来剪枝当前划分的参考帧。例如:如果已考察过 SPLIT 划分,那么可以基于子块的较优参考帧剪枝当前块的参考帧;可以基于 NONE 划分的较优参考帧来剪枝非 NONE 划分的参考帧。
  2. 基于 MVC (motion vector candidate) satd/sad cost做参考帧剪枝。除了标准规定的那些 motion vector predictor 以外,此处的 MVC 还可以包括预分析得到的 motion vector, 已经尝试过的划分的 motion vector, history mv[3] 等。该算法会排除 mvc cost 较大的参考帧。
  3. 先做单向参考,接着只选用较好的单向参考帧来做双向参考。
  4. 基于预分析场景检测剪枝参考帧。如果某个参考帧和当前帧之间有场景切换,直接排除该参考帧; 如果没有场景切换,高 temporal layer 的帧只选择最邻近的参考帧和重建质量最高的参考帧。

4. 总结和展望

BILIAV1 是 B 站自研的性能优异的 AV1 编码器,目前已经上线 web侧点播转码。BILIAV1 2.4.0 较开源 SVT-AV1 1.7.0 编码器平均码率节省约 15%。随着 iPhone 开始支持 AV1硬解,可以预见未来几年 AV1 在移动端的部署量会逐步上升,B 站也会继续加大在 BILIAV1 上的投入,这里列出 BILIAV1 未来要进一步优化的点:

  1. 点播方面:开发更加高效的快速算法,以便在点播档位开启一些性能更好的工具。
  2. 直播方面:与点播相比,AV1 的直播部署更具有挑战性。随着点播档位的逐渐成熟,BILIAV1也会逐步加大在直播档位的应用。

5. 参考资料

[1] https://en.wikipedia.org/wiki/AV1

[2] J. Han et al., “A Technical Overview of AV1,” in Proceedings of the IEEE, vol. 109, no. 9, pp. 1435-1462, Sept. 2021, doi: 10.1109/JPROC.2021.3058584.

[3] L. Zhang et al., “History-Based Motion Vector Prediction in Versatile Video Coding,” 2019 Data Compression Conference (DCC), Snowbird, UT, USA, 2019, pp. 43-52, doi: 10.1109/DCC.2019.00012.

粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/304711.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【打印SQL执行日志】⭐️Mybatis-Plus通过配置在控制台打印执行日志

目录 前言 一、Mybatis-Plus 开启日志的方式 二、测试 三、日志分析 章末 前言 小伙伴们大家好,相信大家平时在处理问题时都有各自的方式,最常用以及最好用的感觉还是断点调试,但是涉及到操作数据库的执行时,默认的话在控制台…

idea中输入法被锁定如何清除

今天遇到一个问题?idea中输入法被锁定了,无论怎么切换输入法,切换中英文,在idea中输出的均为英文内容,该如何解决呢?(idea官网:JetBrains: 软件开发者和团队的必备工具) …

Java常用API_正则表达式_分组——捕获分组与非捕获分组介绍与练习

在正则表达式中,从左到右第一个左括号确定为第一组,继续往右看再有左括号它表示的组数就加一。我们可以在正则表达式中使用 \\组数 的方法表示第几组,如\\1表示第一组的内容。 1.捕获分组 捕获分组就是把这一组的数据捕获出来,后…

SpringBoot和Vue2项目配置https协议

1、SpringBoot项目 ① 去你自己的云申请并下载好相关文件,SpringBoot下载的是Tomcat(默认),Vue2下载的是Nginx ② 将下载的压缩包里面的.pfx后缀文件拷贝到项目的resources目录下 ③ 编辑配置文件 (主要是框里面的内…

基于wsl的Ubuntu20.04上安装桌面环境

在子系统Ubuntu20.04上安装桌面环境 1. 更换软件源 由于Ubuntu默认的软件源在国外,有时候后可能会造成下载软件卡顿,这里我们更换为国内的阿里云源,其他国内源亦可。 双击打开Ubuntu20.04 LTS图标,在命令行中输入 # 备份原来的软…

创意解决方案:如何将作品集视频集中于一个二维码或链接中?

引言:随着面试环节的进一步数字化,展示自己的作品集成为了求职过程中的重要一环。但除了使用传统的方式,如百度网盘或直接发送多个视频链接,有没有更便捷的方法将作品集的多个视频放在一个链接中呢? 本文将介绍一种创意解决方案…

探索未知,守护已知:天通野外摄像机PS02——生物识别保护的新前沿

随着全球生态环境的日益恶化和野生动物种群数量的不断减少,生物多样性保护已经成为全球性的紧迫议题。在这一背景下,野外无人值守卫星图传监测站的应用,特别是在生物识别保护领域,展现出了巨大的潜力和价值。 创新的监测技术 野外…

使用 Citavi 和 NVivo 简化您的文献综述和研究分析

NVivo 是一款支持定性研究方法和混合研究方法的软件。它可以帮助您收集、整理和分析访谈、焦点小组讨论、问卷调查、音频等内容。NVivo(1.0版)是Windows和Mac的主要版本。遵循最新的主要版本NVivo 12(Windows和Mac)。 NVivo 强大…

类和对象中阶1⃣️-默认成员函数(构造函数 析构函数)

目录 1.类的6个默认成员函数 2.构造函数 2.1 概念 3.析构函数 3.1 概念 3.2 特性 1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成…

Linux安装Oracle11g(无图形界面下的静默安装)

Oracle11g安装文档-Linux静默安装 环境准备安装数据库配置监听器创建数据库测试打开防火墙 环境准备 创建组和用户 [rootlocalhost ~]# groupadd oinstall #创建oinstall组 [rootlocalhost ~]# groupadd dba  #创建dba组 [rootlocalhost ~]# useradd -g oinstall -G dba -m…

Linux云计算之Linux基础3——Linux系统基础2

1、终端 终端(terminal):人和系统交互的必要设备,人机交互最后一个界面(包含独立的输入输出设备) 物理终端(console):直接接入本机器的键盘设备和显示器虚拟终端(tty):通过软件方式虚拟实现的终端。它可以…

websocket实践

文章目录 背景WebSocket API使用场景优点 实例步骤 1: 设置 WebSocket 服务器步骤 2: 创建客户端 HTML 页面步骤 3: 测试 WebSocket 通信注意事项实际操作 参考资料 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它使得浏览器和服务器只需建立一个连接,…

金三银四面试题(十九):MySQL中的锁

在MySQL中,锁是非常重要的,特别是在多用户并发访问数据库的环境中,因此也是面试中常问的话题。 请说说数据库的锁? 关于MySQL 的锁机制,可能会问很多问题,不过这也得看面试官在这方面的知识储备。 MySQL …

07 Php学习:运算符

PHP 算术运算符 在 PHP 中,算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取余数,负数运算、取反和并置运算。以下是这些运算符的详细解释和示例: 加法运算符 :用于将两个数值相加。 $a 5; $b 3;…

论文阅读——Sat2Vid

Sat2Vid: Street-view Panoramic Video Synthesis from a Single Satellite Image 提出了一种新颖的方法,用于从单个卫星图像和摄像机轨迹合成时间和几何一致的街景全景视频。 即根据单个卫星图像和给定的观看位置尽可能真实地、尽可能一致地合成街景全景视频序列。…

【汇编语言实战】统计个数(创新版)

内存中有10个分布在0至100内的正整数&#xff0c; 求小于60的数的个数num1&#xff0c;大于或等于60且小于80的数的个数num2&#xff0c;大于或等于80且小于100的数的个数num3 C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{1, 20, 95, 32,…

RecyclerView的复用与回收

目录 0.前言&#xff1a;推荐初学者阅读RecyclerView机制 1.复用与回收的关系 1.1复用流程 1.2回收流程 1.3复用与回收的先后关系 2.刷新机制 0.前言&#xff1a;推荐初学者阅读RecyclerView机制 http://t.csdnimg.cn/2hUeU 1.复用与回收的关系 滚动屏幕——“先复用&…

东方博宜 1738. 胜负对决

东方博宜 1738. 胜负对决 以为这道题很简单呢&#xff0c;结果提交两次还不对&#xff0c;气死个人~ 思路&#xff1a;这道题的重点在于看清楚题意&#xff0c;是第奇数个&#xff0c;而不是数是奇数 。 还有&#xff0c;如果按照位数的奇偶来判定&#xff0c;那在读取数组的时…

台灯哪个牌子好,五大护眼灯品牌排行分享

​当前&#xff0c;我国青少年的近视率已超过半数&#xff0c;位居全球之首&#xff0c;且近视发生年龄呈现下降趋势。长时间用眼和过度使用电子产品是导致近视高发的主要因素。面对这一挑战&#xff0c;如何改善现状成为了一个亟待解决的问题。对于儿童而言&#xff0c;降低近…

浅谈在线监测系统在水厂水质管理工程中的应用与研究

【摘要】&#xff1a;随着水厂水质管理技术和管理水平的提升&#xff0c;达到了在线监测系统通过监测数据的反馈&#xff0c;及时发现问题&#xff0c;快速处理事故&#xff0c;优化了水资源的利用率&#xff0c;提高了供水系统的稳定性和安全性&#xff0c;从而有效地提高供水…