翻译、编辑:Alex
写在前面
The VideoVerse Podcast由微帧科技团队制作,每期都会邀请一位技术专家探讨视频技术,内容涉及视频编解码、智能处理、视频采集与播放、视频传输、质量评估等视频流处理链路中各个环节中的不同先进技术。视频技术相关从业者、编解码器工程师、以及寻求更深入的视频和编码技术知识的社区爱好者等都可以通过此播客向同行学习并获得可行见解,从而合力推动视频技术的发展。本次采访是The VideoVerse Podcast系列的第一期,由音视频行业专家Mark Donnigan采访谷歌首席工程师Debargha Mukherjee。在这次采访中,你将了解关于AV1开发的重要内容,其中包括使AV1在市场中获得独特优势的三个工具。在采访最后,Debargha还分享了如何最有效地使用新编解码器的秘密,这样你就能够尽可能准确地评估编解码器。
Debargha Mukherjee: 我是Debargha Mukherjee,谷歌的首席工程师。2015年~2018年间,我们在谷歌开发AV1,当时的核心团队包括我、许耀武(Yaowu Xu)、韩敬宁(Jingning Han)、Zoe Liu(微帧科技的联合创始人)等。
Mark Donnigan:非常高兴能够采访您。我对AV1的历史稍有了解,但我一直想听听真正开发它的人怎么说,而不是从那些二手和三手信息中获悉。所以,请跟我们谈谈AV1的历史,它是如何出现的?
AV1开发介绍
Debargha:是这样,2010年,谷歌收购了一家叫On2 Technologies的公司。那时VP8是这家公司的编解码器,谷歌收购On2后做的第一件事就是将它原封不动地开源出去,使它成为一款免专利费的编解码器。这就诞生了WebM项目,它由VP8开始。如你所知,VP8目前仍然在世界各地的许多实时视频应用中使用。
接着,在VP8推出后不久,我们开始开发VP9。我们的目标是在2012年或2013年左右与HEVC同一时间推出VP9。最后我们做到了。所以VP9有些像是在与HEVC竞争,不过最后证明它效果非常好。
YouTube随后决定使用VP9,并于2013年开始传输由VP9编码的视频流。渐渐地,在接下来的两到三年中,由VP9编码的视频消费数量增长到了每天几十亿,而这仅仅是因为YouTube使用了VP9。
在VP9成功之后,我们开始研究VP10,即VP9的下一代。但是同一时期,在线视频交付领域中占据重要地位的很多其他公司也对我们的项目产生了兴趣,这些公司包括Netflix、亚马逊、Facebook(现已更名为Meta)和微软等。
所以我们当时决定,不再将VP10作为WebM项目的一部分,而是创立一个行业联盟。2015年我们开始进行各种协商,到了2015年底,一个被称为AOM(Alliance for Open Media)的联盟就诞生了。
我们当时决定不再发布VP10,而是将为VP10所做的开发用于AOM的编解码器。AOM的第一个编解码器被命名为AV1。另外,当时还有思科的Thor项目和Mozilla的Daala项目也在致力于实现非常有竞争力的免专利费的编解码器。
当时的想法是将Thor、Daala和VP10项目合并为AOM旗下的一个编解码器,也就是AV1。AV1的开发工作开始于2016年初,谷歌、思科、Mozilla、微软和其他包括Netflix在内的几家公司都参与到了其中。这项工作在2018年(大约在2018年中旬)完成,大约在HEVC和VP9推出五年之后。
AV1当时的压缩率(码率效率)比VP9提高了30%,这正是我们的最初目标。AV1发布时,我认为在所有已经标准化的编解码器中,它是最棒的。在压缩率方面,我们非常有信心它是当时的最佳编解码器。现在以及未来,我们将致力于使AV1在行业中获得更广泛的采用,并期待在未来几年推出下一代AOM编解码器。
Mark:我一直很好奇的是,这些谷歌、Facebook、思科、Mozilla等公司的工程师是如何聚到一起,并同意一起开发编解码器的?他们都有自己的工作,所属公司也有各自的业务和应用场景,其中一些相互补充,另外一些却截然不同。你们是如何一起工作的?你们会在某个特定时间段在同一个房间内工作吗?你们定期见面吗(比如每周)?当时的情形如何?
Debargha:是的,整个工作过程与MPEG有些不太一样。MPEG通常是这样的:每三个月,所有人聚在一起待上一周,其间会有各种争论,然后一起享用午餐或者晚餐,等等。但是在AOM,我们不这样做。我们每周都会通话,然后每隔半年或一年会见面。所有人聚在一起讨论待处理的项目,包括待处理的提案或者试验决议等,并在短时间内(约两天左右)解决这些问题,这就是我们的工作方式。
当然,我们当时所遵循的工作流程并不像MPEG那样系统化,因为这是我们第一次在一起工作,所以它更像是一个学习过程。熟悉AOM下一代编码器开发方式的人可能比较清楚,现在的工作流程比之前系统化多了。
不过,当时这样的工作方式也使我们获得了更快的进展,这是好的一面,因为我们想像VP9那样在五年之内推出AV1,我们确实做到了。合作方面,在同一代码领域(或代码库领域),多家公司都会提交提案,这形成了某种程度的竞争,但并不能说这种方式不健康。
相反,因为我们相互促进,并不断推动其他提案支持者提高性能,使整个开发过程变得更加简单且获得了快速推进,这其实是件好事。这其中还有一个很大的不同:我们不会在专利费上相互竞争,因此避免了很多权力争斗,而将重心放在了各种技术讨论和推动决策的技术思考上,这让我们很是受益。
AV1的基础:VP9、VP10、Thor和Daala
Mark:与Thor和Daala相比,最后为什么会选择VP9(或最终是VP10)作为AV1的基础编解码器?
Debargha:在刚开始开发AV1时,我们已经有了VP10代码库,它构建在VP9之上,所以代码库已经准备就绪,并在性能上优于VP9(VP9当时与HEVC的编码效率一样),比它提高了大概10%或者15%的压缩率。
Daala是图片编解码器,而非视频编解码器,所以Daala的代码库不能马上使用。Thor更适用于very fast速度档次的编码方案。因此,编码实时视频会议方面,Thor是一个不错的选择。但是它不具备VP9代码库那样可以开发出高性能VOD编解码器的特性,所以我们就自然地选择了VP9作为基础编解码器。
在AV1开发初期,我们决定将更改后的VP9作为起始代码库。当时所进行的更改主要是变换类型等。我们称之为VP9 plus。
VP9 plus便成为了AV1的起始代码库。接着VP10中已经存在的其他所有工具、Thor和Mozilla的一些工具,还有新的工具,被逐一添加到AV1中。
AV1工具介绍
Mark:您可以先向我们简单介绍一下这些被添加到AV1中的工具吗?然后我们再一起探讨。
Debargha:正如今天的很多其他主流编解码器一样,AV1是一种(二维DCT变换 )运动补偿的混合视频编解码器。它不是那种基于机器学习的编解码器(这种新的模式完全抛弃了过去二三十年积累的技术)。它依然是混合的、使用运动补偿的编解码器。
在现有的混合编码框架之中,你可以将编解码器分为两、三个,甚至是四个不同的部分。
其中一个肯定是预测,你必须进行预测,以及你预测的准确程度如何,这是一部分。在预测之后,你有了预测残差,然后将它进行高效地压缩及编码,这个过程中涉及变换系数,量化系数等,这是编解码器另一个很重要的部分。
接着,解码器通过逆量化、逆变换并结合预测信息,将帧进行重构,得到重构帧(reconstructed frame),但是重构帧有很多失真(artifact),即压缩失真。所以你需要进行大量滤波抑制这些失真。完成滤波后,你便要将它们放回参考帧缓存池中,这样它们就能成为后续帧的参考帧。这个过程就是环路滤波(In-Loop Filtering),也是编解码器中很重要的组成部分。
AV1环路滤波处理链路
Debargha:如果想要研究AV1真正超越其他编解码器的地方,我会从环路滤波开始,因为我认为AV1中的环路滤波要比当时其他编解码器中的环路滤波复杂得多。
这里有一个内置超分辨率的概念,我会简单讲讲。当帧被编码时,AV1的一种操作模式会允许原始视频帧(下采样),在较低分辨率完成编码。
如果原始帧是1080p,我们可能会在更低的分辨率下对其进行编码。我们做的所有预测(如帧间预测)也需要从不同分辨率或者更高分辨率的参考帧中预测。因此,AV1的预测过程已经调整为这种跨分辨率的预测(across-scale prediction)。所以对于任何帧,甚至是帧间预测帧,AV1都能将它们在低分辨率下进行高效编码。
现在,你已经压缩了分辨率进行预测,接着进行变换等,你得到了一个分辨率降低的重构帧。然后在环路滤波环节中的某个时间点,我们进行上采样使其恢复到原始分辨率,并把它放回参考帧缓存池,这样它就能用做后续帧的参考帧了,同时,我们也可以直接将该参考帧标注作为输出帧。
好了,这就是环路滤波的上采样过程。在上采样过程前后,我们还要做其他处理。
比如,如果你将视频的分辨率从1080p编码为720p,那么你的重构视频仍然是720p,需要去除的块效应(blocking artifact)的分辨率也是720p。所以去除块效应的操作也需要在较低的分辨率下进行,但在恢复分辨率后,你需要进行另外的处理以提升质量,并获得一些特性或类似超分辨率的质量结果,而不仅仅是简单的分辨率提升。
所以,你可以将环路滤波过程分为两个主要部分,一部分是编码分辨率,另一部分是上采样处理。这就是AV1所使用的整体框架。
AV1约束定向增强滤波器
Debargha:在编码分辨率时使用的工具中,有像我刚才提到的去块滤波,还有另一个工具叫做CDEF。它是思科和Mozilla联合开发的工具,全称为约束定向增强滤波器(Constrained Directional Enhancement Filter)。基本上,它会在小的像素块中计算出主导方向,然后沿此方向做滤波,同时包含垂直方向的组件,所以它有些像星形滤波器,但主要根据主导方向来确定滤波方向。这就是CDEF。
所以你先进行去块滤波,然后应用CDEF。接着如果使用了超分辨率,你就要进行上采样。如果不使用超分辨率,便无需上采样。在你拥有全分辨率码流之后,你将使用被称为环路重建滤波器(Loop Restoration Filter)的工具。这种工具涉及到一些机器学习。在AV1中,维纳滤波器(Wiener Filter)是环路重建滤波器的重要组成。
维纳滤波器的工作原理是:输入原始帧,然后找到滤波器参数,滤波器参数是通过学习每一帧得到的,并作为信号存在码流中。接着解码器会根据滤波抽头数(Taps)解码码流中的信号,并做滤波。期待滤波器可以最大可能地输出一个与最开始输入的原始帧非常接近的结果。
这就是维纳滤波器,接着还有一个导向滤波器(Guided Filter),它可以与维纳滤波并行使用。对于每个小像素块来说,你都可以使用维纳滤波或导向滤波。所以现在这个环路重建滤波在上采样后进行操作。这里需要一些学习元素,无论你降低了多少分辨率,环路重建滤波工具仍然能够学习到一些信息,因为在码流中传递了相关参数。
这就是整个过程。实际上AV1中有几个工具视频编解码器社区还没有见过。比如CDEF就是一个全新的工具。我们所使用的维纳滤波器是可分离的,它要比不可分离的维纳滤波器实现起来简单得多。另外,还有导向滤波器在过去的任何编解码器中都从未使用过。
导向滤波器曾在过去用于许多计算机视觉应用,但从没有在编解码器中使用过,而在编解码器中,它的使用方法也很新颖。这就是AV1的整个环路滤波环节。我想我们确实通过AV1推动了最先进的技术。
Mark:这真的是机器学习在编解码器中的第一个实现吗?HEVC没有任何工具使用了机器学习吗?实际上我对VVC也不太了解。
Debargha:HEVC没有采用维纳滤波器,但是VVC编码器中包含了维纳滤波器。而AV1介于两者之间,它采用的是基于维纳滤波器的工具,但这些也只是我们正在开发的几个工具之一。
用于WebRTC的AV1工具
Mark:我知道WebRTC是AV1的主流应用。事实上,非常有趣的是,新的编解码器标准推出的时候,通常VOD会成为第一个应用场景,因为VOD场景在时间上没有那么敏感。你可以对VOD应用一组计算,它通常是比较简单的应用场景。但是我们看到AV1正好相反:RTC是它的第一个应用场景。所以,您可以跟我们介绍一下AV1标准中所包含的一些RTC工具吗?
Debargha:我认为在RTC场景中,最主要的推动因素是屏幕共享这类应用。我想AV1是第一个拥有屏幕内容编码工具的编解码器,这些工具也是主要配置文件的一部分。所以任何实现AV1解码硬件的人都必须支持它。如果你有一个AV1兼容的解码器,那么支持屏幕内容共享以及此类工具将变得方便得多。
AV1中内置了几个工具支持屏幕内容共享。其中有一个调色板模式(Palette Mode),这个模式一般用在比如屏幕内容、计算机图形,或者是游戏等这类视频的编码,其中很多图像块中只含有有限的几种颜色。
如果是文字,那么可能只有两种颜色。实际上,两种颜色并不准确,因为有抗锯齿(anti-aliasing)操作,所以你可能会有五或六种颜色。实际上两种颜色的情况从未出现过。但即使有二、三、四、五、六种颜色,我们在一个图像块里也只有这些少数的颜色。那么通过将像素对应的颜色掩码作为信号来传输,比使用传统的编码方案简单多了。传统的编码方案对编码在文本或者图形中看到的尖锐边缘并没有什么作用,所以调色板模式非常有用。
然后我们还有帧内块拷贝模式(Intra Block Copy Mode)。帧内块拷贝模式和调色板模式这类工具都在HEVC中(作为屏幕内容扩展),但是实际上没有人在硬件中实现它们,因为它们是扩展的一部分,而实现这些扩展的成本非常高。
但是对于AV1,因为它们属于主要配置文件,所以人们可以很方便地通过AV1支持屏幕内容共享等应用。由于多种其他原因,硬件很难支持帧内块拷贝模式。如果只是纯屏幕内容, AV1的初始模式就已经能到达非常好的效果了。如果是混合内容,那么目前AV1还很难处理,我们会努力在下一代编解码器中解决这个问题。但对于纯屏幕内容来说,这个模式真的很棒。
AV1中第三个支持屏幕内容的工具是变换类型(Transform Type)。当你的内容是边缘尖锐的文字或者图形时,通常针对自然内容进行调整的传统变换效果不佳。所以你必须使用新的变换。
你可以不使用变换或避开它,我们称之为恒等变换(Identity Transform),意思就是没有任何变换。只对差异进行编码,残差就像是一个普通的像素块。直接对残差进行编码实际效果会更好,因为只有少数的像素需要传输信息,因为大部分的区域是相同的,这样突然有了变化而其他保持原样的话,那么你就只需传输发生变化的信号。但另一方面,如果我们对其进行变换,这些系数就会分散到许多不同的系数上,那么操作起来将更加低效。以上就是支持屏幕内容共享的三个主要工具。对于RTC应用场景来说,屏幕内容共享是其中最主要的应用。我们很高兴将这些工具保留为主要配置文件的一部分。
Mark:很明显,通过这些工具获得了码率效率。是否还有计算机处理效率,或者主要是带宽也起了作用?
Debargha:我想说还是带宽起了主要作用。提高计算效率有些棘手,因为任何时候你从一代编码器到下一代编码器的开发都要付出成本,而通常情况下都是计算成本。比如过去所发布的编解码器,人们通常更关注VOD应用场景,因为它显示出比上一代编解码器提高了10%或20%、30%、40%的效率,一个编码速度很慢的编码器对于VOD的使用场景来说或许是适用的,但即便是对于VOD来说,过慢的速度也不适合,特别是对于YouTube这样每天甚至每个小时都要上传数百万个视频的服务来说。
对于Netflix这种内容较少的平台,仍然是可以的。但编码复杂度依然是一个难题。RTC场景所面对的更是一个复杂得多的难题。我认为,对于整个编解码器社区来说,我们要不断减少从新的编码器标准发布到准备好用于实时场景的时间。这样的编解码器通常需要大量工程工作:从非常重量级的编码器开发到实际应用于实时视频会议场景中。
Mark:您刚才讲的非常有趣,因为所有的视频服务和平台的理想状态是使用一款通用的编解码器,就是说,用一款编解码器“统治世界”。如果你是一家SVOD服务供应商,或许实现的可能性更大,因为提供的服务都是基于文件的,且文件的数量相对来说比较有限。如果视频内容容量巨大,就不得不考虑实现高质量、高压缩率编码背后所需要付出的巨额计算成本。
但是,对于其他运行着需要服务各种应用场景的平台的人来说,您刚刚说过,我们现在所处的是一个多编解码器世界。大部分人只是纯从播放角度看待这一问题,但我刚刚从您所说的话中听到了一个不同的视角。
您的意思是,最终会出现一款编解码器几乎完全或仅用于实时场景,它拥有一组具体的性能特性。如果是那样的话,那么我在运行不同的应用场景时,我的RTC场景会部署刚才说的那款编解码器,而VOD场景会使用其他编解码器。
好的,我们刚刚说了要讨论三种工具,那么第三种工具是什么?
AV1复合预测模式
Debargha:是的,第三种工具实际上不是一个工具,它是几个工具的集合。这与环路滤波很相似,我刚刚所讨论的不是一个工具,而是编解码器中代码库的整个区域。AV1支持了大量的预测模式,而其中我们特别关注的领域就是复合预测模式。
复合预测是指将两个参考帧的预测进行组合。通常可以将一个前向预测器和后向预测器放在一起进行平均,这是复合预测最简单的形式。但是在AV1中有多种组合方式,比如基于像素间的接近程度,基于每个参考帧到当前帧的距离,还可以使用复合楔形(wedge)进行预测。
如果楔形分割线穿过一个图像块,那么在楔形的一侧区域你可以使用一个参考帧进行预测,在楔形的另一侧区域你可以使用另一个参考帧进行预测,而在楔形边缘处会有一些权重叠加。这就是楔形预测模式,这也是帧间-帧间预测模式,我们还可以使用帧间-帧内组合模式。
比如,在楔形预测的例子中,我们可以说,在楔形的一侧可以使用帧内预测,而在楔形的另一侧使用帧间预测。在帧间和帧内预测之间可以有一定的权重的叠加。这就是帧间-帧内楔形预测。
接着你还可以进行帧间-帧内平滑预测,这实际上是在说,如果你在预测一个图像块,在帧内-帧间的预测边界,需要逐渐叠加权重。所以帧内预测的边缘附近,需要增加帧内预测的权重,但当你远离边缘时,帧间预测的权重就会增加。它朝着预测的方向前进,所以我们有多种帧间、帧内预测模式。
在复合预测的整个领域中,我们有多种不同的方式实现它。实际上,它们每个都能带来一些小的收益,但是将它们组合起来,将带来非常可观的收益。这些就是AV1的预测工具。但这还只是开始,实际上,它们正在推动硬件实现前所未有的功能。一旦进入到硬件中,那么就会成为定局。如果硬件实现能够更好地处理帧间-帧内预测,则将更加有利于未来编解码器不断改进预测工具,在同样的基础架构下获取更好的预测模式。所以复合预测模式不仅带来了良好的编码增益,而且还为行业设立了标准,使它不断向前发展。
如何评估一个新的编解码器标准
Mark:太精彩了,感谢您强调这一点。您知道我一直希望我们所谈的内容对听众而言更实用一些。我知道每一个在听这个播客的听众真的很感谢您所提供的AV1的历史和工具信息。但是在面对新的编解码器标准时,确实需要深入理解再使用它。根据我这个半技术人的观察,现在对于新的编码标准是否有效的决定下得有些太快了,也许他们只是没有花时间深入了解并真正学习和探索如何正确配置和设置编码器。
所以,比如现在的听众说,是的,我知道AV1来了,我清楚地感受到了它的势头。我们开始考虑使用它——我需要掌握AV1,开始学习这些工具如何在我的环境中运行。所以作为一位编码工程师,您能给出一些关于快速上手AV1的专家指导吗?
Debargha:当AV1在2018年完成时,因为时间上非常紧迫,我们并没有花太多时间使它变得更快。所以当年AV1完成时,很多反对AV1的人拿着软件做了一些测试,发现它比HEVC慢了1000倍。大约一个月左右,依然是这种情况,但一个月内1000变成100,依然无法使用。但争议依然存在,许多人都在说:AV1比HEVC慢了1000倍,它的存在又有什么意义?
但在接下来的半年里,AV1就变得足够快了,我们劝说YouTube开始使用它。通常只有编解码器的复杂度在限制范围内,YouTube才会使用。所以AV1开始变得更加有用,但是对AV1的最初印象却停留在了过去。
如果你想探索一款新的编解码器(无论是AV1、HEVC或是VVC,还是其他任何编解码器),你都需要认真研究代码并尝试运行它。当在运行过程中遇到困难,发现所获得的结果与你的期待或者AV1支持者所告诉你的结果不符时,最好的办法是与开发软件的工作人员取得联系,了解问题出在哪里。
AV1推出以后,我看到很多对它的测试,比VP9推出时还多。这些对AV1的测试显示了AV1与VVC或JVET和HM软件之间的对比,但他们所用的某些参数完全错误。
如果你在测试AV1时所使用的参数是错误的,那么你将得到非常糟糕的结果。他们所使用的参数会在不经意间关闭所有的乱序编码,最后显示AV1要比HM慢30%。但这明显不是正确的方法。所以当时我建议这些人联系我们并将命令行发给我们,让我们看看哪里出了问题。当然,在AV1推出四年之后,代码库中的文档已经完善太多了。所以我认为编码开源软件本身拥有更多的信息可以参考。
Mark:是的,这真的是很棒的建议。当你面对一个新的标准,就与开发它的人取得联系。我的工作很长时间都围绕着标准组织,所以我看到每个人都乐于提供帮助,因为我们大家都能从中受益。我们想看到AV1的成功。如果存在错误的信息,我们能够引导人们改正这些错误,我们希望这样做。
Debargha,非常感谢。这是一次很棒的讨论。我相信您还会再来做客我们的节目。下一次我们从一个不同的角度来讨论。感谢您抽出时间。谢谢!
Debargha:Mark,谢谢你邀请我。我真的很喜欢这次采访。
致谢:
本文已获得微帧科技授权翻译和发布,特此感谢。
原文链接:
https://thevideoverse.co/history-of-av1-plus-3-tools-debargha-mukherjee-google/
采访视频版:
▼识别二维码或猛击下图订阅课程▼
扫描图中二维码或点击阅读原文
了解大会更多信息
喜欢我们的内容就点个“在看”吧!