在本文中,我们将通过改变 CRF 值来观察 SVT-AV1 预置的性能,并展示客观质量(PSNR、VMAF、SSIM)、文件大小和编码速度的变化情况。
由谷歌、微软、Mozilla 和 Netflix 等多家行业巨头组成的开放媒体联盟(AOMedia)开发了开放且免版税的 AV1 视频编解码器。其主要目的是创建一种具有卓越压缩能力的编解码器,以取代 H.264 和 H.265/HEVC,同时考虑到世界正朝着更高分辨率的方向发展。
自 AV1 标准提出以来,已经有多个实施方案,如:
- aomenc / libaom
- SVT-AV1 (由Intel和Netflix开发,2020年被AOMedia采用)
- rav1e by Xiph
- 其他商业实施
我在本文中选择了 SVT-AV1,并将在一系列 CRF 值范围内评估其 “预设 “性能。目的是了解每个预设值在质量、大小、比特率、速度等方面的表现。
这篇探索性文章将不涉及 CBR、行/列平铺、多线程等问题。请订阅有关 SVT-AV1、rav1e、其他视频编解码器、速率控制模式和可视化分析的后续文章。
测试设置
我在 AWS EC2 c5.9xlarge 实例上运行了所有测试。以下是其规格:
- Intel Xeon Platinum 8124M,支持 AVX-512 指令集。
- 36 个 vCPU
- 72GB 内存
- 操作系统 Ubuntu 22.04 LTS
我使用 FFmpeg 和在 EC2 实例上本地编译的 SVT-AV1 编码器。我选择这种方法是因为这是我在设置中使用的方法,也是视频流行业中大多数公司使用的方法。
以下是 FFmpeg 和 SVT-AV1 的规格:
- FFmpeg: N-111750-g9c694804fd-20230812
- SVT-AV1:版本 1.6.0
最后,我使用了 Parkjoy(1080p,50fps)测试序列,该序列具有中度到高度的运动和大量草地/树木/纹理细节。
实验方法
正如我在引言中提到的,本实验旨在观察 SVT-AV1 预置在改变 FFmpeg 中用于编码的 CRF 值时的性能。
如果您熟悉 FFmpeg,就会知道 “预设 “参数可通过完全打开/关闭或更改设置来控制用于压缩视频的编码工具。
- 速度较慢 “的预设将花费大量时间来编码并生成质量上乘的视频!这是因为编码器将启用最广泛的工具集和最宽松的参数(如运动估计搜索范围、四分之一颗粒运动估计、OBMC 等)。
- 相反,”快速 “预设则会迫使编码器放弃特定的编码工具来快速编码,从而牺牲视频质量。
这就是速度与质量之间的权衡!
SVT-AV1 预设值从 0 到 13 不等,您可以点击这里了解预设值及其启用/禁用的编码工具。我避开了 “13”,因为它只用于调试(来自官方文档)。我也避开了预设 0 和 1,因为根据我之前的测试,它们太慢了!
因此,我决定在本次分析中使用预置 2 – 12。
最后,以下是我的操作步骤:
- 将预设值固定为 N(最小值 = 2,最大值 = 12)。
- 将 CRF 从 20 更改为 63,步长为 6
- 对于每个编码,捕获 PSNR、VMAF、SSIM、文件大小、编码时间、编码 FPS 和比特率。
- 评估所有可能的 CRF 值后,将预设更改为 N+1。
命令行和免责声明
我使用的 FFmpeg 命令行是一个简单的 1-pass AV1 编码:
ffmpeg -benchmark -i <input> -c:v libsvtav1 -crf <value> -preset N output.mkv
这个过程被封装到一个脚本中,该脚本会循环使用 CRF 和预设的所有组合,提取指标并生成图表。
我还想说的是,这些实验并不是为了生成 CBR、封顶 VBR 或测试 SVT-AV1 中的平铺或多线程工作原理,这些都是未来文章的主题。
本文旨在展示 SVT-AV1 在不同预设值和 CRF 值下的性能变化。
结果
通常情况下,当您查看视频编解码器的性能时,需要评估:
- PSNR、SSIM 和 VMAF 等指标
- 输出文件大小和生成的比特率
- 编码速度(时间和 FPS)
这些因素将揭示您选择的编解码器和参数是否适合您的使用情况。
例如,24×7 新闻工作室可能希望快速编码和发布视频。该工作室可能愿意在视频质量上妥协(因为其内容的短暂性),以换取快速的周转时间。我与印度的新闻机构合作时就多次遇到过这种情况。
另一方面,像 Netflix 或 SonyLIV 这样的优质内容提供商则愿意投入更多时间对其内容进行编码,因为他们知道其最终用户期望的是优质内容,而且其内容的生命周期相当长!
视频质量、速度和文件大小之间总是存在权衡。因此,需要进行广泛的测试和评估,以选择正确的编解码器及其相关参数。
有鉴于此,让我们从 SVT-AV1 的编码速度开始看看结果。
SVT-AV1 预设的编码速度
我将从编码速度开始分析预设,并用它来证实我们继续进行的几点。请记住,我使用c5.9xlarge
机器进行此测试。
旁注:您会注意到,我为每个指标以两种不同的方式绘制了相同的数据 – 这将在本文中继续进行。
- 在左侧子图中,我显示了 SVT-AV1 预设的指标变化,并在每条绘图线中保持 CRF 恒定。
- 在右侧的子图中,我显示了指标相对于 CRF 的变化,并在每条绘图线中保持预设不变。
这是相同的数据——只是以两种不同的方式查看。
以下是所有 SVT-AV1 预设的编码 FPS 图,CRF 范围为 20 – 63。
结果是不言自明的:
- preset=12 最快,preset=2 最慢。这是预料之中的。
- 对于每个预设,随着 CRF 从 20 增加到 63,FPS 也会增加。这是因为更多编码工具被关闭,编码器对视频质量的关注度降低。
虽然性能取决于您用于编码的机器类型,但可以很安全地观察到预设 8 – 12 适用于快速编码(接近实时、实时或快于实时)。
预设 2 – 4 相当慢,但这没关系,因为它们旨在以尽可能低的比特率和文件大小生成高质量视频。当预设 2 – 4 的速度与客观质量指标和文件大小结合起来时,它就更有意义了!我们稍后会看到。
接下来,让我们继续讨论客观质量指标。
PSNR、SSIM、VMAF 分数
以下是通过改变预设和 CRF 值得出的 SVT-AV1 客观质量得分(PSNR、VMAF、SSIM)。
看看客观指标:
- 对于非常低的 CRF 值(大约 24 及以下),所有预设的 VMAF 分数相似,变化很小,并且肯定在 6 个 VMAF 点的 JND 经验法则之内。
- 然而,相同CRF范围的SSIM和PSNR数据存在明显差异。例如,在 CRF=24 时,预设 2 得分为 40dB,而预设 12 得分为 37.5dB。
- VMAF 图表告诉我们一些有趣且奇怪的事情 – 如果您希望 VMAF 分数大于 95,则可以使用高达 38 的 CRF 值,而不管预设如何。
那么,这是否意味着您可以使用最高速度预设“12”,将 CRF 值设置为 38,并获得与预设=2(最慢模式)相当的视频?
VMAF 分数似乎同意这个假设!
然而,答案并不那么简单。除了视频质量之外,您还需要查看生成的文件的大小和比特率,以全面了解正在发生的情况。
这是下表中的数据片段:
预设 | CRF | 文件大小 (MB) | 比特率(kbps) | 峰值信噪比(分贝) | SSIM | VMAF | 时间(秒) | FPS |
---|---|---|---|---|---|---|---|---|
2 | 38 | 32 | 26290.6 | 34.593 | 0.955 | 98.84 | 826.6 | 0.6 |
12 | 38 | 39 | 32693.4 | 32.99 | 0.936 | 95.90 | 6.1 | 81 |
以下是当 CRF 固定为 38 时的数据:
- 预设 = 2 生成大小为 32 MB 且比特率为 26 Mbps 的文件
- 预设 = 12 生成大小为 39 MB 且比特率为 32 Mbps 的文件
- 预设 = 12 比预设 = 2 快 135 倍。
因此,如果您使用预设 = 12,您将获得与预设 = 2 相同的视频质量 (VMAF) 和非常高的性能,但输出大约 19%,比特率高 18%。这将增加您的存储成本、CDN 交付成本、设备上下载存储以及缓冲的机会!值得思考的事情!
从视觉上(主观)来看,两个序列(预设 = 2 和预设 = 12)之间存在差异,因为较低预设的输出比预设 = 2 显得更有颗粒感。从结构上讲,我们不会发现草地有太多问题,但人们肯定会在跑步的人周围看到很多颗粒和噪音(PSNR 似乎已经发现了这一点)。
注意:请在单独的选项卡中打开图像以便仔细查看。
为了更好地理解这一点,下面是另一个数据片断,预设值为偶数,CRF 固定为 26,以及相应的指标和数据点。
预设 | CRF | 文件大小 (MB) | 比特率 (kbps) | 峰值信噪比(分贝) | SSIM | VMAF | 时间(秒) | FPS |
---|---|---|---|---|---|---|---|---|
2 | 26 | 75 | 62757.8 | 39.283 | 比特率(kbps) | 99.709 | 974.094 | 0.5 |
4 | 26 | 75 | 62446.2 | 38.727 | 0.977 | 99.679 | 147.694 | 3.4 |
6 | 26 | 75 | 63023.0 | 38.439 | 0.975 | 99.565 | 53.14 | 9.4 |
8 | 26 | 81 | 67342.4 | 37.965 | 0.973 | 99.506 | 20.237 | 25 |
10 | 26 | 86 | 71827.7 | 37.677 | 0.97 | 99.446 | 10.524 | 48 |
12 | 26 | 92 | 77138.9 | 36.816 | 0.965 | 99.289 | 8.052 | 62 |
从上表我们可以看出
- 预设=12 比预设=2 具有 124 倍的性能增益,但它们的 VMAF 分数仅相差 0.420。SSIM 也是如此(0.013 间隙),但 PSNR 在预设 = 2 时显示出约 2.5 dB 增益的差异。
- 然而,如果您查看生成的文件大小和比特率,preset=2 的输出会小约 18.5%,这会显着影响整体业务指标!
- 另一方面,如果您不担心文件大小并且需要快速周转时间,那么预设 10 和 12 或许值得一看。
现在看一下preset=6:它生成的文件的大小、比特率和客观指标与preset=2 类似。它的运行速度比预设=2 快 20 倍。
有了这个,人们可以开始建立一个论点,如果您想要一个在质量和速度之间提供良好权衡的预设,您可能需要考虑 [6, 8] 范围内的 SVT-AV1 预设。
SVT-AV1 预设用法
从结果来看,对于快速/实时/比实时更快的编码,可以放心使用 9 – 12 之间的预设值。这同样取决于您的服务器容量。据我观察,像 c5.4xlarge
或 c5.9xlarge
这样的 AWS EC2 实例可以提供高速编码,接近或超过实时,这取决于您的源/目标帧速率。
但是,如果您有更多空闲时间,预设值 6 可以让您在质量、文件大小和速度之间实现良好的权衡。使用 SVT-AV1 预设 6、7 和 8 将帮助您找到适合您的用例的适当平衡。
最后,少于 6 个的 SVT-AV1 预设将为您提供高质量的视频,但会占用大量计算时间和资源。
结论
我们通过改变预设值和 CRF 值来比较 SVT-AV1 预设视频编解码器的性能,从而结束对 SVT-AV1 预设视频编解码器的评估。对于愿意尝试 AV1 部署的团队来说,SVT-AV1 编解码器是一个不错的选择。
借助正确的预设、编码器设置和计算硬件,您可以使用 SVT-AV1 快速降低视频库的大小、存储和 CDN 交付成本。
在以后的文章中,我们将评估 SVT-AV1 与其他流行的视频编解码器,并研究特定编码器设置和视频类型的结果。此外,我们还将评估其CBR编码性能,并将其与其他编解码器和AV1实现进行比较。
作者:Krishna Rao Vijayanagar
编译自https://ottverse.com/analysis-of-svt-av1-presets-and-crf-values/
本文为原创稿件,版权归作者所有,如需转载,请注明出处:https://www.nxrte.com/jishu/31196.html