Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LibAOM与AV1的最新研发进展

LibAOM与AV1的最新研发进展

作者头像
LiveVideoStack
发布于 2021-09-01 07:38:25
发布于 2021-09-01 07:38:25
6380
举报
文章被收录于专栏:音视频技术音视频技术

# Editorial Note #

本次分享我们邀请到了来自Google Open Codec Team的韩敬宁博士,他向我们分享了AV1解码器的覆盖,AV1编码器性能的提升包括AV1压缩性能的提升和运算复杂度的降低,AV1实时编码器的应用和基于AV1的图像编码器格式AVIF的最新研究进展。

文 / 韩敬宁

整理 / LiveVideoStack

大家好,我是Google Open Codec Team韩敬宁,很高兴能有这样的机会与大家分享关于LibAOM和AV1的最新研发进展。

本次分享主要分为一下几个部分:AV1解码器的覆盖、AV1编码器性能的提升(AV1压缩性能的提升和运算复杂度的降低)、AV1实时编码器的应用、 基于AV1的图像编码器格式(AVIF的最新研究进展)。

#1. AV1解码器的覆盖

现在主要的支持AV1软件解码器的浏览器有Chrome、Edge、Firefox、Opera。操作系统中Android、ChromeOS、LinuxWindows都有支持AV1解码的原生library。为了进一步推动AV1软件解码器在移动端的覆盖,我们团队还研发了Libgav1 library,它的主要目标是Android设备,在实测的Android设备中Libgav1 library的解码运行速度相对于Libaom而言能提高2.5倍以上。在硬件解码器方向通常的最低要求是4K/60fps,大多数硬件解码器能够达到8K/60fps的性能。在现有和即将上市的电视中LG、三星、索尼和TCL都是已经有AV1硬件解码器的覆盖,手机端则是LG、OPPO、三星、Vivo和小米有AV1硬件解码器的覆盖。再GPU、CPU方向AMD、Nvidia和lntel在现在和未来会有更多的AV1硬件解码器支持。

#2. AV1编码器的性能

2.1 AV1编码器的压缩性能

AV1是在2018年中旬finalize bit-stream经过团队两年多的研究和尝试AV1的压缩性能在过去两年中有了显著的提高,现在相对于VP9而言能达到的peak compression performance是在以PSNR或SSIM这样的客观指标条件下能提高36%以上。相对于2018年bit-stream finalization的时候Libaom的AV1的压缩性能peak (compression) performance在PSNR条件下是能够提高超过14%,而在SSIM条件下是能够提高超过17%。这些数字的测试条件是基于通常的standard test set,在YouTube视频条件下实测压缩性能增益远远大于在此列举的数字。

2.2 编码器的速度和内存需求

相对于2018年bit-stream finalization的时候Libaom编码器的速度提升150倍以上,与此同时在4K的视频压缩条件下我们对内存的需求下降了80%。为了更好的支持不同的实际应用场景,Libaom支持不同的一个系列的speed setting(speed setting的数字越高就意味着编码器的运行速度越快)相对压缩性能增益会有所损耗。上图的表格中,speed setting3和3以下通常是比较高的压缩性能,运行速度5相对于VP9而言更慢一些;speed setting在5以上时,实际AV1的压缩性能运行速度更高于VP9运行速度,与此同时它会提供19%、16%的压缩性能增益。在比较encoding time时AV1和VP9都是用single thread进行处理;在speed6条件下,AV1比VP9的压缩性能提高了16%与此同时它实际的encoder复杂度只有VP9的40%。

2.3 技术亮点

关于编码器的优化,在很多层面都有新的算法出现包括group of picture level、frame coding level、coding block level,本次在每个层面选一到两个例子做简述。我们的codebase是完全开源的,如果大家感兴趣,非常欢迎大家能够参考我们的codebase,如果有新的想法也非常欢迎与我们一起合作。

2.3.1 Group of picture level

在group of picture level 中AV1 Libaom基于的算法是2-pass encoding,通常会有一非常快速的first pass encode去生成一些frame level statistics,2-pass encoding会对它做出一个更好的分析,例如动态的group of picture decision。通常对first pass statistics的分析会试图提取inter frame correlation和每个frame的acquisition noise的强度,基于这两个数据去分析当前一系列的frame是否属于相对稳定、相对静态或运动非常快、variance非常高的区间。基于这些分析再去决定实际的group of picture会包括多少个frame,在这当中一定要保证当出现scene-cut时,group of picture不会go across the scene-cut point。

2.3.2 Frame level

在frame level Libaom会对所有的long-term reference frame做decomposition。Decomposition的方法是把一个long term reference frame,如果一个 reference frame把它作为long term reference frame,通常会把它分解成Alternate reference frame(ARF)和Overlay frame。ARF会被作为一个正常的frame去encode和decode,在decoder端它不会给用户playback,它只是作为一个internal reference给后面的frame提供motion compensating prediction。Overlay frame是和ARF处于同一个位置的frame,但是Overlay frame相当于ARF到实际original frame的residual,它会去code这些residual作为实际能够playback的frame。ARF的好处是它允许对原始信号滤波能够降低frame里面的noise level,可以对滤波以后的frame做更高reconstruction quality的coding。在Libaom中采用的生成ARF的temporal filtering的non-local mean filter。它的reference patch是通过motion estimation从周围的frame找到。Filter的kernel会根据当前frame的estimated noise level进行调整。通常概念是,如果noise level越高相对的filter的强度就会更大。

上图是long-term reference frame就premium coding structure而言,最底层的frame会被分解成ARF和Overlay frame。对于long-term reference frame都是被当成两个frame去做process。

2.3.3 Coding block level

在coding block level为了更好的平衡编码器的速度和编码器的压缩性能采取了multi-winner multi-stage的搜索philosophy。基本的概念是我们在更靠前的early stage,比如试图找到prediction mode时会采取比较简单的rate decision cost estimate去分析在所有可能的prediction mode中找出小部分相对可以提供更好的prediction quality,换句话说更有可能提供更低的RD cost的prediction mode 。在选中的subset当中在下一个stage会对他们进行更精确的rate decision cost estimation,例如transform kernel selection等逐级地选到最好的、最有可能成为最优的coding mode。在motion estimation方向对传统的diamond shape motion search、center-biased search 和square search算法进行了调整。例如在Libaom中我们采用polar coordinate的sampling approach,就是对在motion search当中的sampling的distribution做了重新调整,使它在搜索密度的方向能够更加均匀分布,也能提高压缩性能。

除此之外Libaom也支持对一系列不同的metric的optimization mode,包括SSE、VMAF/VMAF-NEG等。VMAF是近年出现的比较popular的metric。它相对于PSNR也能够更好的接近实际用户的视觉感受。在Libaom中对VMAF和VMAF的衍生版本VMAF-NEG也有相应的优化模式,在这个模式下,会允许用户采取动态的pre-processing filter,也就是说有一个option是可以对原始的视频信号做pre-filter去增强关键的对比度,在安全区间相对降低一些noise level。可以根据VMAF metric在不同的block、不同context下对reconstruction error的penalty不同,对此采取不同的adapt rate trade-off,基于此条件下相对于base line的Libaom也就是对PSNR SSIM Optimization,VMAF mode会在VAMF条件下提高压缩性能30%-40%,对VMAF-NEG提高大概7%-9%的空间,这些数字是相对于PSNR based Libaom optimization的运行结果。

#3. AV1实时编码器

Libaom AV1实时编码器是从Chrome M90开始被enable by default。

在desktop方向,它相对于VP9的压缩性能提高15%-20%,相对复杂度控制在1.25倍以内。相对于VP9而言,AV1的实时编码器会提供更好的主观压缩指标。在移动端,目前Libaom AV1的实时压缩器主要的目标是对低分辨率,比如QVGA 的resolution可以支持非常低的比特率条件下进行视频通信,最低可以达到15kbps。从2020年8月份开始逐渐把Libaom AV1实时编码器放到production开始roll out。得到的用户反馈是相对于VP8/H264的软件编码器和HEVC的硬件编码器而言反馈是更好的,有更高的frame rate,更少的freeze,用户给的quality rating 也更高。Overall在移动端让用户有更长的视频通话时间。

#4. 图像压缩格式AVIF

AVIF是基于AV1的图像压缩格式,相当于AV1的bitstream在一个HEIF container形式出现,相对于传统的JPEG 而言,AVIF的压缩性能要提高超过80%,在同样的质量条件下,同样reconstruction quality条件下AVIF所需要的file size 应该是JPEG的五分之一以下。我们团队正在积极的推进AVIF编码器的性能优化,在编码器复杂度方向加速了8倍,与此同时造成的压缩性能损耗控制在5%左右,对内存的需求降低了5倍。从去年秋天开始Chrome M85已经支持使用AVIF图像格式,在今年会有更多的运算平台会支持AVIF格式,比如Android、Firefox和Safari。

#5. Libaom v3.0版本的release

今年3月我们进行了Libaom v3.0版本发布。它相对2.0版本压缩性提高大约5%以上,编码器速度进一步加快,如果目标是实时编码器的话实际会产生的binary size会变小,对VOD setting和Real-time setting做了更好的多线程优化,同时也对整个codebase 做了更系统化的文档,希望能够帮助更广泛的developer society,更容易去读懂codebase design并方便大家的使用和contribute Libaom的codebase。

以上就是我的全部分享,谢谢大家!

The cover from creativeboom.com

讲师招募 LiveVideoStackCon 2021 北京站

LiveVideoStackCon 2021 北京站(9月3-4日)正在面向社会公开招募讲师,欢迎通过 speaker@livevideostack.com 提交个人及议题资料,无论你的公司大小,title高低,老鸟还是菜鸟,只要你的内容对技术人有帮助,其他都是次要的,我们将会在24小时内给予反馈。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LiveVideoStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自定义tabBar(类似咸鱼)
在App上做类似咸鱼的Tabbar时,只能用自定义的方法,考虑小程序中如果想自定义像咸鱼这样的Tabbar,该如何实现呢?网上搜索的大多资料的tabbar都会在页面切换的时候重新渲染,下面的方法页面跳转时不会闪。
honey缘木鱼
2018/09/26
1.5K0
自定义tabBar(类似咸鱼)
【愚公系列】2022年02月 微信小程序-app.json配置属性之tabBar
如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。
愚公搬代码
2022/02/22
8280
【愚公系列】2022年02月 微信小程序-app.json配置属性之tabBar
🥬 🐶的uniapp学习之🦌 【tabBar】
---- 「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」 这是官网描述的:✈️ 当设置 position 为 top 时,将不会显示 icon tabBar 中的 list 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序。 tabbar 切换第一次加载时可能渲染不及时,可以在每个tabbar页面的onLoad生命周期里先弹出一个等待雪花(hello uni-app使用了此方式) tabbar 的页面展现过一次后就保留在内存中,再次切换 t
用户4793865
2023/01/12
1.1K0
微信小程序从零开始开发步骤(三)底部导航栏
上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的。即点击底部的导航,会实现不同对应页面之间的切换。 我们先来看个我们要实现的底部导航栏的效果图:(三个导
王小婷
2018/05/31
4.1K1
小程序实践(一):主页tab选项实现
官方文档 效果图: 实现底部Tab选项,只需要在项目根目录下的app.json下修改 如图:  ----------------------------------------------------
听着music睡
2018/07/03
7560
微信小程序云开发基础知识扫盲篇(一)文档结构
这个是小程序的脚本代码文件,可以在这个文件上进行监听,并处理小程序的一些生命周期(比如一些全局变量)
用户3004405
2021/07/14
6840
小程序(2)- 基础样例
基本这些配置就可以满足正常的开发,其他有一些比如request请求超时之类的,都采用默认即可
小尘哥
2018/08/15
5870
小程序(2)- 基础样例
微信小程序开发-Tab页切换及Grid布局
今天摸索了一下微信小程序的前端开发,作为入门教程,让你能够快速构建页面并且了解小程序,先看下今天完成的效果图。
code2roc
2023/07/19
7950
微信小程序开发-Tab页切换及Grid布局
微信小程序tabbar设置样式在哪里改
  微信小程序tabbar通俗点说就是底部导航,我们一般会配置相关的菜单,方便读者快速导航。tabbar是在项目根目录中的配置文件 app.json 中进行设置;如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。tips:当设置 position 为 top 时,将不会显示 icon; tabBar 中的 list 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序
ytkah
2018/06/20
11.2K3
值得一看的小程序 TabBar 创意动画
Hi 头像最近进行了 v2 版大改版,其中的交互动画得到了不少好友的称赞。今天我就来分享一些关于小程序 TabBar 创意动画,将从 TabBar 类型、完整的 TabBar 创意动画进行分析。
一只图雀
2020/11/03
4.5K0
值得一看的小程序 TabBar 创意动画
tabbar 页面是什么意思?用什么跳转到tabbar页面
一般看到这个地方看不明白的是看到wx.navigateTo(Object object)这个地方下边的提示.
知识浅谈
2021/06/01
2.7K0
微信小程序开发(全局配置文件)
微信小程序中全局配置文件指:app.json文件,该文件通过微信开发者工具新建项目后会自动生成,无需自己手动创建。
全栈开发日记
2022/05/13
1K0
微信小程序开发(全局配置文件)
微信小程序入门《四》实例:导航栏样式、tabBar导航栏
实例内容 导航栏样式设置 tabBar导航栏 实例一:导航栏样式设置 小程序的导航栏样式在app.json中定义。 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: { "pages":[ "pages/index/index", "pages/login/login", "pages/logs/logs" ], "window":{ "backgroundTextStyle":"red", "navigationBarBack
极乐君
2018/02/05
3.3K0
微信小程序入门《四》实例:导航栏样式、tabBar导航栏
微信小程序之底部导航【前端】
备注:特别要说明的是,tabBar下list数组里面的第一条内容,一定要对应pages数组中的第一条内容,否则导航无法显示。
sinnoo
2020/11/13
7740
微信小程序之底部导航【前端】
小程序学习笔记分享(含1-tabBar、轮播图和九宫格)
今天分享一些学习小程序的代码,希望大家喜欢。
疯狂的小程序
2018/01/24
1K0
小程序快速入门教程 1.1 小程序开发入门
结合刚创建的 DEMO,大致了解下小程序的文件结构和页面组成,详细的内容可以查看 小程序代码构成。
twowinter
2020/04/17
1.1K0
小程序快速入门教程 1.1 小程序开发入门
小程序自定义tabbar的两种方式
在根目录下创建custom-tab-bar目录,然后在该目录下新建组件component,注意是组件,不要建成page页面,虽然都一样是js/json/wxml/wxss四个文件
全栈程序员站长
2022/11/17
9720
小程序自定义tabbar的两种方式
【笔记】微信小程序通过app.json设置底部导航
borderStyle tabbar上边框的颜色, 仅支持 black/white
德顺
2019/11/13
8820
【笔记】微信小程序通过app.json设置底部导航
微信小程序底部导航栏实现
上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的。即点击底部的导航,会实现不同对应页面之间的切换。
王小婷
2020/09/27
15.6K0
uniapp动态底部tabbar_微信小程序开发例子
公司要求开发一个小程序,要求二种不同权限的人群都可以使用,使用时根据不同的权限,获取不同的tabbar,以及展示对应不同的内容。
全栈程序员站长
2022/11/01
2.7K0
uniapp动态底部tabbar_微信小程序开发例子
相关推荐
自定义tabBar(类似咸鱼)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档