AV1(Alliance for Open Media Video 1)是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源、免版权费的视频编码标准。与它的前身VP9相比,AV1包含了100多个编码工具,大大提高了编码效率。以AOM推出的libaom和微帧科技研发的WZAurora为例,实验数据证明了AV1在编码效率上完胜H.265/HEVC、H.264、VP9。
AV1虽然编码效率高,但也给人们留下了编码速度非常慢的初印象。事实上,自AV1发布以来,开源社区就没有停止过对AV1编码器的编码效率和编码速度的综合优化。仅以开源AV1编码器libaom为例,从2019年1月到2020年4月,其编码速度提高了10倍(而不是10%),同时编码效率也提高了10%。
Zoe Liu在本次演讲中,从完全崭新的视角探讨了对AV1编码器的优化。AV1标准到目前为止已推出2年4个月,硬件解码生态在逐步拓展中,但当下还是以软件解码支持为主。Zoe Liu演讲中的AV1优化,目标是让AV1这款新的视频编码标准,在解码端以软件为主要解决方案的条件下,尽快进入实用阶段。一般来说,开发人员都是从提高编码效率和加快编码速度两方面来优化和改进编码器。事实上,我们还可以从解码器端的解码复杂度中来思考编码器的优化,这无疑是为AV1编码器的优化提供了一个新的思路。我们可以尝试分析解码器解码的复杂度,从中获取有价值的反馈,并根据这些反馈来设计我们的编码器。一个优秀的AV1编码器不仅能够足够好地平衡编码效率和编码速度,还应考虑如何释放解码器的压力,以保证视频最终的流畅播放。
众所周知,目前最知名的AV1开源软件解码器为dav1d。dav1d受AOM资助,由VideoLAN和 FFmpeg联合开发。目前的实验证明,dav1d相比所有其他AV1开源软件解码器,在解码速度以及多线程方面,体现了明显的优势。为了评估AV1在移动设备上的解码性能,我们特别关注了dav1d在移动端的解码功耗数据。移动端除计算资源受限外,功耗是考量解码器优劣的重要指标。功耗过高,会严重影响电池的使用寿命,与此同时手机会发热,进一步会引起CPU降频,大大影响用户体验。因此我们在几个典型的移动设备上对dav1d、ffmpeg-h264、openhevc软件解码器做了测试,评估指标包括CPU使用率(%)、内存使用(MB)、电流(mA)、功耗(mW)、电压(mV)和温度(℃)。结果表明,在功耗方面dav1d处于ffmpeg-h264和openhevc之间,比ffmpeg-h264差,但比openhevc表现好。
此外,我们还与合作者一起收集了更多的dav1d解码性能数据,并重点关注dav1d在低端移动设备上的表现。测试视频集包括720x536、960x480等多种分辨率。实验证明了,在低端移动设备上,当编码码率较高时,实时解码将会是一个很大的挑战。如何通过优化编码器来降低解码的复杂度,是微帧一直考虑的问题。
AV1提供丰富的编码工具,这使得AV1不仅仅是一个免版税的编码标准,更是业界积累的先进编码技术。也正因为对这些工具的采纳,使得编码的复杂程度提升了很多,同时对解码器的复杂度也造成了很大的影响。例如Warped Motion,是AV1中第一次采用仿射变换(Affine Transform)对复杂的运动建模,超越了传统的二维运动矢量的概念,在编码和解码两侧,都需要从现有宏块和周围三个宏块的运动矢量中导出仿射变换的参数。解码器的复杂度远远小于编码器的复杂度,AV1中类似Warped Motion这样的标准工具一旦采用,在解码器复杂度中感知度会非常强。因此,无论是打造编码器还是解码器,这都是一个全新的挑战。我们优化AV1编码器,是希望提速的同时保持AV1的标准优势。
基于此,我们对画质、码率、编码速度以及解码速度进行了综合优化,并在此基础上提出了DCA(Decoder Complexity Aware)的概念。利用CAE(Content Adaptive Encoding)+DCA的联合优化策略,在AV1当下只有软解支持的情况下,实现AV1在实用场景中的落地,使得视频最终用户可以尽早享用到AV1的标准优势。举个简单的例子,AV1中宏块大小的分割方法可以从4x4一直到128x128。我们可以通过避免图像块被分割得过大或过小,在保证足够好的编码效率的同时又能大大降低解码的复杂度,从而使解码器在低端设备上也能够进行实时解码。
AV1作为一款新的编码标准,其生态也在不断的建立和完善中。我们很开心地看到,越来越多的视频厂商、硬件厂商宣布支持AV1这一编码标准,AV1的应用越来越普遍。作为全球领先的AV1商用编码器提供商,微帧科技也将持续优化WZAurora编码器,全力推广AV1的使用和落地,让更多客户享受到AV1带来的技术价值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。