SVT-AV1是开源的AV1编解码器实现,托管在GitHub上[1]。如我们先前的文章所述[2],英特尔和Netflix自2018年8月以来一直在就SVT-AV1编解码器框架进行合作。团队一直密切合作进行SVT-AV1的开发、交流架构决策;实施新工具并改善压缩效率。自从项目开源后更多技术合作伙伴和开源社区为SVT-AV1做出非常多的贡献。此篇技术博客中,我们将继续报告SVT-AV1项目的当前状态以及编解码器的特性与性能。
文/ Andrey Norkin, Joel Sole, Mariana Afonso,Kyle Swanson, Agata Opalach, Anush Moorthy, Anne Aaron
译 / 蒋默邱泽
原文
https://netflixtechblog.com/svt-av1-an-open-source-av1-encoder-and-decoder-ad295d9b5ca2
SVT-AV1代码库状态
SVT-AV1代码库包括一个AV1编码和解码器,它们共享大量的代码。SVT-AV1解码器功能齐全,并符合所有三个配置文件(Main,High& Professional)的AV1规范。
SVT-AV1编码器支持所有对压缩效率有助力的AV1工具。与最新的libaom主版本(AV1参考软件)相比,SVT-AV1在压缩效率方面相近,同时在多核平台上使用其特有的并行化处理功能时编码延迟显著降低。
SVT-AV1中的代码超过90%是用C语言写的,可跨平台进行编译。除了允许进行更灵活实验的纯C函数实现之外,编解码器大量采用了汇编以及针对x86平台的intrinsic优化。了解SVT-AV1的主要功能特性,请关注下一部分。这些功能使得SVT-AV1可以在高压缩效率竞争力的条件下具有更高的性能。SVT-AV1还包括大量有关编码器设计的文档[3],旨在促进新开发人员快速上手。
结构特点
英特尔SVT-AV1开发的目标之一是创建一种具有高性能和可扩展性的AV1编解码器。
SVT-AV1在编码过程的多个阶段实现并行化,这使得它能够适应可用内核的数量,包括具有大量内核线程数量的最新服务器。这使得SVT-AV1可以在有效缩短编码时间的同时仍保持现有压缩率。
SVT-AV1编码器使用多维度(基于线程,帧/块和基于片段)并行、多阶段划分决策、基于块的多阶段和多类别决策以及RD优化分类,以在压缩和性能之间实现有吸引力的折衷。SVT体系结构的另一个特征是开环分层运动估计,这使得运动估计的第一阶段与编码其余部分解耦过程成为可能。
压缩率和性能
编码性能
SVT-AV1在慢速设置下达到与libaom相似的压缩效率。在编解码开发过程中,我们一直在跟踪https://videocodectracker.dev/站点的压缩和编码结果。下图显示了随着时间的推移,SVT-AV1与libaom编码器相比在压缩效率方面的改进。请注意,随着时间的推移,libaom压缩也在不断迭代,下面的图表显示SVT-AV1赶上了移动的目标。在该图中,Y轴显示了根据三个度量实现与libaom编码器类似的质量所需的额外码率(以%表示)。该图显示了两种编解码器中2-pass编码模式的结果。SVT-AV1使用4线程模式,而libaom运行在单线程模式。研究中常用的1-pass固定QP编码模式的SVT-AV1结果更具竞争力,如下所述。
在2-pass编码模式下随时间降低的SVT-AV1和libaom之间的BD-rate(8-bit位深)
下表列出了在Objective-1-FAST[4]测试集上SVT-AV1与libaom的比较结果。为了估计编码时间,我们使用英特尔®至强®铂金 8170@2.10 GHz芯片(具有26核52线程核心和96 GB 内存)处理并行编码(这里没有采用Intel&AMD最新同级芯片处理数据可能会有另一番惊喜)。两个编解码器都使用16个画面的双向分层预测结构。给出了具有固定帧级QP偏移量的单程模式的结果。使用单线程压缩模式。如下我们计算各种质量度量的BD-rate:YUV分量的PSNR、VMAF和MS-SSIM。负的BD-rate表示SVT-AV1编码相同的质量时所需的比特率相对较低。如下所示,与libaom相比,SVT-AV1的编码时间减少了16.5%,同时压缩能力略有提高。请注意!编码时间比率可能因平台支持的指令集而异。针对libaom主分支(Git Hash Fe72512),在SVT-AV1CS2分支(当前正在并入主分支git hash 3a19f29的开发分支)上获得了结果。用于计算BD-Rate的QP值为:20、32、43、55、63。
在固定QP偏移的1-pass编码模式下,SVT-AV1与libaom的BD速率。负数表示达到相同质量级别所需的码率降低。与libaom相比,SVT-AV1的总体编码时间差是所有序列和QPS的总CPU时间的变化
*整体编码CPU时间差以测试的所有序列和QPS的总CPU时间与锚的CPU总时间相比的变化来计算。它不等于每个序列值的平均值。对于每个序列,编码CPU时间差被计算为该序列的所有QP的总CPU时间的变化。
由于Objective-1-FAST测试集中的所有序列都有60帧,因此两个编解码器都使用一个关键帧。已使用以下命令行参数比较编解码器。
libaom参数:
--passes=1 --lag-in-frames=25 --auto-alt-ref=1 --min-gf-interval=16 - -max-gf-interval=16 --gf-min-pyr-height=4 --gf-max-pyr-height=4 --kf- min-dist=65 --kf-max-dist=65 --end-usage=q --use-fixed-qp-offsets=1 - -deltaq-mode=0 --enable-tpl-model=0 --cpu-used=0
SVT-AV1参数:
--preset1--scm2--keyint63--lookahead0--lp1
以上结果证明了SVT-AV1的优良客观性能。此外SVT-AV1还包括一些主观质量工具的实现,如果编解码器配置为主观质量则可以使用这些工具。
解码性能
在Objective-1-FAST测试集上,SVT-AV1解码器在单线程模式下比libaom略快,在4线程模式下有较大的改进。当使用4线程模式解码具有多块的码流时,我们观察到比libaom解码器有更大的速度提升。该测试已在Windows、Linux和MacOS平台上执行。我们相信对于研究解码器来说性能是令人满意的,其中折衷方案更倾向于更容易的实验,而不是生产解码器所需的进一步优化。
测试框架
为了帮助确保编解码器的一致性,特别是对于新的代码贡献,所有代码已经被单元测试和端到端测试全面覆盖。单元测试构建在Google测试框架之上。对于GitHub操作支持的对代码库的每个拉取请求,都会自动触发单元测试和端到端测试。这些测试支持分片,并且它们并行运行以加快拉取请求的周转时间。
此拉入请求的单元和e2e测试通过
NEXT 未来
在过去的几个月里,SVT-AV1已经成为一个完整成熟的编/解码器软件,提供具有竞争力的压缩效率和性能折衷。该项目得到了广泛的单元测试覆盖和文档的支持。
我们希望SVT-AV1代码库有助于进一步利用AV1,并鼓励在当前AV1工具的基础上进行更多的研究和开发。我们相信SVT-AV1显示出的优势使其成为一个很好的实验和研究平台。我们邀请工业界和学术界的同事查看Github上的项目,联系代码库维护人员询问问题和意见,或者参加SVT-AV1Open Dev会议[5]。我们欢迎更多的开发贡献者参与这个项目。
参考:
[1]https://github.com/OpenVisualCloud/SVT-AV1/
[2]https://mp.weixin.qq.com/s/7ZmYrWJH6JrgOSnd0j0w8A
[3]https://github.com/OpenVisualCloud/SVT-AV1/tree/master/Docs
[4]https://tools.ietf.org/html/draft-ietf-netvc-testing-09#section-5.2.5
[5]https://github.com/OpenVisualCloud/SVT-AV1/issues/1134
来源:oschina
链接:https://my.oschina.net/u/3521704/blog/3217303