AV1最初发布时,编码速度缓慢,时间过长,严重影响编码器的可用性。随着不断的优化,其编码时间已经有很大改进,几乎可以使用。

文 / Jan Ozer

翻译 / 咪宝

原文

https://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Good-News-AV1-Encoding-Times-Drop-to-Near-Reasonable-Levels-130284.aspx

2018年8月我首次测试AV1编码时,其编码速度非常缓慢,严重影响了编解码器的潜在可用性。表1说明了此事。除非另有说明,否则所有编码时间数据都依托于我的HP ZBook笔记本电脑(配置了单个2.8 GHz Intel Xeon E3-1505M v5 CPU)。此外,LibVPx是FFmpeg中VP9的实现,所有对AV1的引用都参考FFmpeg中可用的AV1编解码器。

表1. AV1首次发布时的编码时间

2018年末开始,我曾写道,研究人员报告AV1编码时间低至10倍LibVPx编码时间。当我最近开始进行一个编解码器评估项目时,我很想知道这个时间是否匹配。我刚完成那个项目,表2显示了现在的情况。我知道你在想,去年VMAF视频压缩质量是96.18; 表2中引用的质量是95.55。由于需要6个VMF点才能产生明显的差异,即使是最敏锐的观察者也不会注意到这个.63差异。

表2. AV1当前的优化编码时间

根据2018年8月对其他编解码器的评测,AV1的编码时间是x265和LibVPx的3倍左右。正如你将在下面看到的那样,事情并不完全相同,而且我对其他编解码器并不完全公平,但是尽管如此,它的加速速度还是相当惊人,你不是这么认为吗?

如果你十分关心TL/DR,可以跳到表6并查看与其他编解码器的比较。如果你想花时间了解我是如何做到那一步的,那就让我们详细说来。

编码器速度的提升

在我们最初的测试中使用的命令字符串是这样的:

如果对当前版本的FFmpeg使用相同的字符串(我测试了N-93083-g8522d219ce版本),编码时间从226,080秒(45K乘以real-time)下降到18,196秒(约3,639倍real-time),速度提高了约12倍。虽然仍然比x265慢63倍,比LibVPx慢80倍,但是我们可以看到表3中所示的结果。表3中创建的AV1文件的VMAF得分为95.91,因此与去年的96.18相比,质量下降得非常小,而且不明显。

表3.使用带有当前代码的原始命令行(AOM的改进)

表3显示了我们初步测试的对两者各方面表现的比较。所有其他编码时间减少与编码字符串的更改有关。

寻找AV1的最佳速度/质量权衡

大多数编解码器都有预设,可以让你权衡编码时间的质量。例如,对于x264和x265,预设的名称包括慢速、非常慢、快速、非常快和中等。使用AV1,预设通过cpu-usedswitch控制,你可以在上面的批次中看到我使用cpu-used8in pass 1和cpu-used0in pass 2。

如果在FFmpeg中加载AV1帮助说明(ffmpeg -h encoder = libaom-av1),你将看到以下内容:

使用LibVPx和AV1时,首次传递质量不会影响第二次传递,因此你通常以最快/最低质量设置运行第一次传递。在Google的August First Look方向上,我以最高质量运行第二次传递,即cpu-used 0。编码时间太慢,我没有花时间尝试这些设置,就像我之前对x264、x265和LibVPx做的那样。

图1显示了在我开始严格测试或生产编码之前,我通常为每个编解码器/预设/编码器创建的图表。红线跟踪可用质量,而蓝线跟踪编码时间。例如,在cpu-used5,编码时间是最大值的6.63%(00:20:06与5:03:16相比),而质量是最大值的99.64%(95.56 VMAF与95.91相比)。

图1. AV1的质量/速度曲线

如果你是一名研究人员,试图度量某个特定编解码器的绝对最佳质量,你可以忽略该图在cpu-used 0处编码。如果你是一个视频制作人,则可能使用cpu-used 5编码,因为较低的设置可以节省最少的时间,而较高的设置可以最大限度地提高质量。当然,根据图1中显示的数字,如果你选择使用cpu-use8,也没有人会认为你发疯。假设你用cpu-used 5编码,表4显示了编码时间的比较。

表4. 当前版本的FFmpeg、cpu-used 5

单个五秒剪辑编码能否准确预测以多种数据速率编码的更广泛剪辑的质量/速度曲线?在我最近完成的项目中,我在不同的编解码器上使用相同的方法,基于5秒测试剪辑的单个编码的曲线预测在预设使用和最大质量(和预设切割)之间的质量差异为1.3%编码时间从18分钟到3分钟)。之后我测量了预设使用的和五个等级和六个测试片段的最大质量之间的实际差异,实际差异为1.4%。因此,虽然更多数据总是更好,但单个编码应该是一个相当准确的预测器。

也就是说,在我的“数字视频编码”一书中,我使用8个片段为x264,x265和LibVPx创建了类似的曲线,平均持续时间约为2分钟。在我开始使用新的编解码器或编码器(特别是AV1)进行严格编码之前,我会对类似的或更大数量的样本进行测试。

运行多个线程

在最近的项目中,我咨询了Google是否有其他方法可以加快编码速度。一位工程师建议:

如果在运行编码器时可以使用多个线程,则有助于编码器速度。对于高清及以上分辨率,我们建议使用区块(tile)。使用区块会导致质量下降,我的旧测试显示,使用2个区块时损失约0.6%,使用4个区块时损失约1.3%。

我自己没有测试过4k的剪辑,所以我在这里给出一些建议。对于1080p,使用2个tile和8个线程:“--tile-columns = 1 --tile-rows = 0 --threads = 8

对于4k,使用4个tile和16个线程:“--tile-columns = 1 --tile-rows = 1 --threads = 16”(甚至尝试:8个tile / 32个线程:“--tile-columns = 2 --tile-rows = 1 --threads = 32“)”

在该项目中实现区块和线程之前,我测试了1080p和4K文件,这次是在我的HP Z840 40核工作站上,并使用了多个线程。我使用了建议的1080p设置,以及4K的第二组设置(--tile-columns = 2 --tile-rows = 1 --threads = 32)。表5显示了结果。在1080p时,编码时间下降了41.66%,而对于4K,编码时间下降了70.56%,这两种情况下的质量差异可以忽略不计。

表5.在其他测试编码中部署多个线程

应用于ZBook测试平台上的测试片段,部署--tile-columns = 1 --tile-rows = 0 --threads = 8 它们在cpu-used 5上的编码时间从20:06下降到12:16,数字如表2所示。与此同时,VMAF指数也大幅下跌了0.01点(从95.56点跌至95.55点)。

实际上,要清楚的是,添加到FFmpeg命令字符串的操作如下:

Google工程师显示的设置很可能是独立于FFmpeg工作的AOM编码器。请注意,这些设置当前不在AV1编解码器的FFmpeg帮助文件中,但试一试,看看你是否得到相同的结果(注意:这些设置没有记录在我研究本文时检查的旧版本的FFmpeg中,但是在FFmpeg中的当前版本的AV1帮助文件中记录了tiles,tile-columns,tile-rows和row-mt。)

虽然这些设置不会增加任何特定编码运行的编码速度,但它们可能不会增加任何给定系统上的编码吞吐量。这是因为它们似乎并没有提高编码效率,就其本身而言,它们似乎允许每个单独的编码消耗更多的CPU资源,这在任何给定的系统上都是一个零和数字。

虽然数字没有完美映射,但本质上,我们不是在同一个系统上同时处理两个编码,每个编码在一个小时内生成5分钟的编码片段,而是在处理一个编码,它的运行速度是这个编码的两倍,每小时生成10分钟的编码片段。在这两种情况下,总体系统吞吐量都是每小时10分钟,但是多线程编码的工作速度是前者的两倍。如果您正在创建一个并行处理多个编码的编码器,则可能不希望使用这些设置。如果您在系统上运行一个FFmpeg实例,那么你几乎肯定会这样做。

所以,读者现在或许会理解我开始说我不是在比较两者间的差别,而且我对其他编解码器也不公平。x264,x265和LibVPx都有自己的质量/速度曲线,如果我们要对AV1应用“实用”设置,我们应该对这三个编解码器做同样的设置。

具体地说,如果对LibVPx使用speed 2(而不是最高质量的speed 0),对x264和x265使用slow预置(而不是非常慢),我们将得到如表6所示的时间。这使得AV1的制作成本几乎是x265和LibVPx的20倍,这只适用于编码高6位数和7位数的观众数量。到目前为止,使用新编解码器制作视频的通常是Netflix、Facebook和YouTube等公司(以及AOM联盟成员)。令人印象深刻的速度增长我相信还会有更多。

我在表6中展示的VMAF分数仅供参考;单个5秒1080p编码比编码的3 Mbps容易,剪辑不足以得出任何与质量相关的结论。相反,您需要查看来自多个剪辑的速率失真曲线和BD速率比较。我会在接下来的几周内更新AV1审核的结果,以创建相关的比较数据。

表6. 使用最“实用”的设置进行速度比较。

在此期间,如果您正在编码AV1,请尝试使用不同的cpu使用设置以及tile和线程,并查看结果是否相似。如果您阅读任何参考编码时间的AV1比较评论,请检查并查看研究人员使用的cpu使用设置。如果未指定,则默认值为1,这可能是真正的生产者不会使用的设置。如果它是cpu-used 0,虽然可以说适用于学术研究,编码时间与真正的生产者实际使用编解码器的方式完全没有关系。

为了帮助那些想要尝试这些新设置的人,这里是FFmpeg命令字符串的最终版本。

点击【阅读原文】或扫描图中二维码了解更多LiveVideoStackCon 2019 上海 音视频技术大会 讲师信息。

AV1编码时间下降,接近使用水平相关推荐

  1. AV1编码标准-算法描述

    AV1编码标准 块划分 编码块划分 变换块划分 帧内预测 定向帧内预测模式 非定向帧内预测模式 递归滤波模式 从亮度预测色度 帧间预测 运动矢量预测 空间运动矢量预测 时间运动矢量预测 运动矢量编码 ...

  2. 独家 | 将时间信息编码用于机器学习模型的三种编码时间信息作为特征的三种方法...

    作者:Eryk Lewinson 翻译:汪桉旭 校对:zrx本文约4400字,建议阅读5分钟 本文研究了三种使用日期相关的信息如何创造有意义特征的方法. 标签:时间帧,机器学习,Python,技术演示 ...

  3. 爱奇艺编码团队:我们让AV1编码速度提升5倍

    爱奇艺综艺<青春有你>THE9成团 编者按: 如果说VVC是编码标准中的白富美,那么AV1就代表了广大的互联网玩家--承受不起高昂的专利版税.为了实现免专利费的目标,AV1不得不" ...

  4. 1370亿参数、接近人类水平,谷歌重磅推出对话AI模型LaMDA

    来源:机器之心 语言模型可以完成不同任务,例如将一种语言翻译成另一种语言,将长文档总结为简短的摘要等.在众多任务中,开放域对话可能是最困难的任务之一,因为开放域对话需要模型覆盖不同的主题.在对话任务中 ...

  5. 行业洞察 | 听说,大语言模型无法接近人类水平智能?

    近日,图灵奖得主 Yann LeCun 对于人工智能的前景提出最新思考,"语言只承载了所有人类知识的一小部分:大部分人类知识.所有动物知识都是非语言的:因此,大语言模型是无法接近人类水平智能 ...

  6. java精准查询mysql时间_在mysql查询中查找与指定日期时间最接近的日期时间

    我试图在mysql数据库中找到一个datetime值,它与我指定的日期时间最接近,我遇到了一些麻烦 . 以下伪代码是我想要实现的: SELECT one FROM table WHERE dateti ...

  7. 前沿 | IBM语音识别已接近人类水平

    原标题:前沿 | IBM语音识别已接近人类水平 IBM的语音识别已达到较高的水平,并且能有与人类语音识别水平相较的低错误率. 上周,IBM的语音识别团队实现了仅达5.5%的错误率,与之前的记录6.9% ...

  8. 智源社区AI周刊No.99:OpenAI发布接近人类水平的语音识别系统Whisper;马毅:智能的计算和科学研究将融合...

    汇聚每周AI观点.研究和各类资源,不错过真知灼见和重要资讯!欢迎扫码,关注并订阅智源社区AI周刊. 编辑精选 1. UC伯克利马毅:智能的计算和科学研究将能够很快融合 查看详情 近日,智源社区举行&q ...

  9. 40%带宽成本节约!京东云视频云正式支持AV1编码

    追网剧.看大片.直播间"买买买".视频会议,视频应用已经与人们的工作和生活深度融合.据统计,在线视频领域用户使用时长已超过社交领域,而5G时代视频在互联网的流量占比将会增长至85% ...

最新文章

  1. Inside Linux kernel
  2. 170318 11:44:26 [ERROR] Can't start server: can't create PID file: No space left on device
  3. python random
  4. pytorch:Logistic回归
  5. 中秋干货 | 架构进阶之路上的实时数仓
  6. excel和mysql php_php将mysql数据库和Excel相互导入和导出的方法
  7. ONNX系列四 --- 使用ONNX使TensorFlow模型可移植
  8. 2.掌握Python基本数据类型,从python陌路人到熟人!
  9. Codeforces Round #226 (Div. 2)
  10. 普中tft彩屏驱动程序下载_tft彩屏驱动程序
  11. 解决:Conda报错InvalidArchiveError
  12. 64: 创建集群 、 管理集群 、 总结和答疑
  13. JAVA散列表个人通讯录_散列表实现简易通讯录
  14. python 北京大学陈斌教授_陈斌 - 北京大学副教授 | 到「在行」来约见我
  15. 基于SSM实现高校教材管理系统
  16. -R语言中%in%函数的用法
  17. 留良乡七个投资理财妙招助你养老金翻番
  18. amp sqlserver中 什么意思_PLSQL中是什么意思
  19. 如何辨别一个程序员水平的高低?
  20. 如何高效管理企业的海量固定资产?

热门文章

  1. Python文本处理几种方法
  2. Scala比较器:Ordered与Ordering
  3. Mycat对于导入和扩容迁移性能压测
  4. man-翻译和epoll相关的内容,部分
  5. 去除重复数据的SQL语句
  6. 实现ISA Server 2006物理机到VMware ESX 4虚拟机的迁移
  7. VMware VDI部署攻略之四:域用户配置及验收
  8. 2021HDU多校6 - 7029 Median(思维)
  9. 2021牛客多校3 - Kuriyama Mirai and Exclusive Or(差分+倍增)
  10. HDU - 3488 Tour(二分图最小权匹配+KM)