正文字数:2598  阅读时长:8分钟

对VP9编码的探索我们从未停歇。

 

文 / 常谦

原文链接 / https://blog.hotstar.com/vp9-encoding-journey-so-far-e1153ab488db

图片源于Unsplash上Tim Mosholder拍摄

两年前,我们开始在点播内容中使用VP9编码,并且观察到它在视频质量和码率这两方面比H264有明显的提升。但与此同时,我们也遇到了一些挑战,今天在这里跟大家讨论一下。

探索

我们使用的VP9编码器是libvpx。在新的编码服务上线一段时间后,我们发现通过添加一些特征保留过滤器,视频主观质量变化不大却能编压缩得更小一些,。让我们在分发一些流行节目分发中时明显地节省带宽成本。

我们还发现,一些VP9编码的内容在某些具有高动态场景和黑暗场景的内容上效果不尽如人意,因此我们决定暂停这类内容的VP9编码。然后我们发现在某些内容的mpd文件中,240p分辨率的峰值码率高于360p分辨率。由于上述问题,我们暂停了VP9编码,并更深入地进行了分析和调查。最后,我们提出了VP9编码的改善方案。

编码

在这一部分中,我们将讨论两个在网络论坛上不常讨论的问题:2pass码率控制和多线程编码速度瓶颈。

码率控制方式

与x264类似,libvpx有1pass ABR,稳定质量,2pass ABR和带码率限制的稳定质量码控方法。

libvpx码率控制方法

在x264编码中,经常会使用带峰值码率限制的CRF。而在libvpx CRF模式下,编码器会尝试达到稳定图像质量,同时将平均比特率保持在比特率限制限制在目标值以下。

这与x264 CRF的速率码率控制方法不同。在x264中,我们可以使用VBV bufferVBV maxrate实现编码输出码率峰值码率的控制,从而可以直观地调节设置DASH mpd文件中各分辨率的峰值码率高低。但是在libvpx CRF模式下没有这些选项,仅可以限制输出的平均码率,所以这意味着DashDASH mpd文件中各分辨率峰值码率是不确定的。在HLS/DashDASH自适应码率切换中,峰值码率是重要的参考依据。高分辨率视频峰值码率越高,其播放的频率越低少。

另一件很少被提及的事情是,我们可以在CRF编码中使用2pass。由于1pass CRF在x264中得到了广泛使用,因此一开始我们并没有尝试在libvpx中使用2pass CRF。然而,2pass CRF在libvpx中的性能比1pass CRF好得多。它可以提高某些复杂场景的质量。我们将在稍后讨论细节。

多线程编码速度

对于VOD编码来说,我们倾向于使用慢速设置的方式slow preset以获得更好的质量和更小的体积。在x264 / x265中,我们可以使用10个或更多线程来加速1080p视频的编码。但是,我们不能无法在libvpx中使用那么多线程,而且在slowpreset预设下,1080p VP9编码时间比x264长得多。

经过一些了解后,我们发现libvpx可以使用的最大线程数与tile数量有关。最大tile数又取决于分辨率。下表显示了各分辨率的最大tile。

VP9各分辨率的最大tile

对于1080p内容,图像视频宽度为1920像素,最大tile仅为4。因此libvpx1080p的编码速度成为了我们VOD服务的瓶颈。幸运的是,libvpx v1.7中引入了-row-mt选项,较之前版本有较大提升。但是对于需要快速上线的视频内容来说,libvpx仍然不能满足我们的要求,因此我们需要GOP级别并行化来进一步加速。

Packaging HLS/DashDASH打包

选择Bento4还是Shaka打包?

Bento4用作H264 / H265 的HLS / DASH打包中非常流行。但对于VP9来说,我们还有一个选择:Shaka Packager。在选择之初我们进行了一些调研,在Bento4官方讨论中,其开发人员提到Bento4专注于基于ISO标准的各类流格式,而Webm不属于这一类。此外,我们尝试Bento4生成一些VP9 + AAC流,却无法在我们的Chrome浏览器中正常播放和运行。相反,Shaka Packager可以涵盖我们所有的使用场景。因此,我们决定在VP9打包封装中使用Shaka Packager。

Shaka Packager可以输出VP9 + AAC编码的fMP4 DASH流和VP9 + Opus编码的Webm DASH流。它也可以很好地支持AV1 + AAC和AV1 + Opus。

在默认情况下,Shaka Packager还会启用动态MPD。它可以大大提高客户端下载和CDN上传的速度,从而使我们的文件管理更容易。

Webm还是fMP4?

如上所述,我们可以将Webm或fMP4用于VP9视频。不幸的是,根据Shaka Packager官方文档,Opus对ISO-BMFF的支持仍处于试验阶段。所以一开始我们选择了带有VP9+Opus编解码器的Webm容器。在发布几个月后,我们分析发现,相对于H264节省的总流量是低于我们的预期的。

Shaka Packager支持的容器格式和编码

经过实验,我们发现Webm容器封装后产生了大约20–30kbps的开销。这对于高分辨率视频影响不大。但是对于180p视频,如果音视频的比特流为100kbps,则转换为fMP4 DASH格式后的大小约为102kbps。但是,当我们将其转换为Webm DASH格式时,它的大小约为120–130kbps。Webm容器中的开销多了约为20kbps,对于低分辨率内容来说还是太大。因此,我们决定在未来使用fMP4容器。

将fMP4容器与VP9 + AAC编解码器一起使用的另一个优点是易于维护多种编码格式的视频。我们通常会先为每个内容编一份H264+AAC的流,如果VP9也适用AAC编码,我们直接可以把已编好流的AAC音轨复制或链接到VP9 MPD文件,而无需重新编码音频。每次我们收到某个一种内容的新语言音频时,我们只需要处理一次(AAC,fMP4)并将该音轨复制或链接到多个视频格式的流 (H264/H265/VP9) 中。这样我们并不需要考虑其他音频编码(Opus)格式的处理。

我们的改进

回到前面的问题,之前我们发现某些MPD文件中360p峰值码率值低于240p。这对播放行为造成了流干扰,导致以致当网络变好时候,某些用户反而从360p切回240p。此外,之前的VP9编码在某些一些复杂场景下的图像质量较差不理想。经过一些实验,我们发现在上述情况下2pass CRF的表现比1pass CRF好得多。

下图是我们对同一视频进行2pass CRF与1pass CRFVP9编码的比较。它们使用相同的CRF值和码率限值。我们可以看到1pass CRF的MPD峰值码率依次为350kbps、500kbps、450kbps、650kbps,在240p附近出现了一个异常点。相反,2pass CRF MPD峰值码率随着分辨率单调增加,是合理的。

DASH文件中各分辨率峰值码率(kbps)

我们还计算了2pass CRF和1pass CRF输出的VMAF值。对比结果如下:

从以上数据可以看出,2pass CRF在输出质量上更稳定,在复杂场景下表现更好。

VP9真的过时了吗?

人们可能会说,我们已经有了HEVC和AV1编解码器,为什么我们还需要VP9,是不是已经过时了?除了节省成本外,VP9目前至少还具有以下优点。

首先,Chrome类浏览器不支持HEVC解码,而VP9内容视频可以通过使用硬件加速在一些主流设备上播放。

其次,HEVC和AV1内容在一些低端Android设备上无法很好地播放。对于1080p+或胶片噪声视频,VP9的性能接近HEVC,。在某些情况下,VP9的性能有时甚至优于HEVC。

最后,VP9的当前编码成本比AV1低得多。与AV1相比,VP9可以节省很多编码时间和计算成本。对于观看时间不长的视频,AV1多码率编码带来的成本增加可能会比AV1其节省的流量费用还要多。在这种情况下,VP9可能是更好的选择。

总结

在此博客中,我们带领您体会分享了我们从VP9入门到现在的过程,介绍了我们遇到的挑战以及为改善最终用户体验而开发的解决方案。就像我们在Hotstar所做的一切一样,这些学习经验成果正在被应用借鉴到我们其他视频编解码器,平台和场景中。

我们的团队一直在探索新的创新方式,以不断提高我们在音频、视频处理和交付各个方面的性能和效率。

LiveVideoStackCon 2021 上海站

时间:2021年4月16日-4月17日

我们准备好全新的内容,在上海欢迎您的到来

点击【阅读原文】了解更多详情

VP9编码:迄今的尝试相关推荐

  1. VP9编码(1)-- 简介

    VP9编码(1)-- 简介 VP9是谷歌基于VP8发布的新版视频编解码标准,主要对标H265/H264标准.youtube目前采用VP9标准. 本系列博客为博主学习笔记,翻译自<vp9-bits ...

  2. JavaCV音视频开发宝典:vb8和vp9编码的webm格式视频文件转成mp4文件

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 ​ 前言 mp4不用多说,我们日常生活中,手机上或者浏览器网页中使用最多的视频文件就是 ...

  3. 4K视频编码 H 264 H 265 VP9谁主沉浮

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 4K视频 ...

  4. Netflix在安卓移动启用AV1格式 较VP9编码效率提升20%

    Photo by freestocks.org on Unsplash Netflix启动了安卓移动客户端上的AV1格式支持,并在尝试将其扩展到硬件等更多场合中. 文 / Coco Liang,蒋默邱 ...

  5. WebSpider的编码问题(乱码)浅析

    这两天看到几篇关于WebSpider的文章.其中关于抓取网页出现的编码格式问题大家都比较感兴趣,以前在参与帮看网的开发时也遇到过.不过那时候忙于ITDB的BBS开发,没有时间去研究.今天看到解决网爬工 ...

  6. 有关XSS编码问题的个人总结

    XSS也太太太难了,主要也是因为自己没花时间集中. 文章脉络:根据我粗浅的理解,从开始学习XSS到现在,从一开始的见框就插到现在去学构造.编码,首先需要的是能看懂一些payload,然后再去深入理解. ...

  7. 视频直播技术详解(3)编码和封装

    声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 作者:七牛云 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群 ...

  8. 互动场景下的低延迟编码技术

    本文由上海交通大学教授宋利在LiveVideoStackCon2020线上峰会的演讲内容整理而成,从分析视频传输系统延迟入手,详细介绍视频编码延迟的产生机制,总结优化编码延迟的技术手段和业界典型的低延 ...

  9. Xilinx+AWS F1+VP9带来30倍实时转码性能提升

    在实时.海量.高并发视频的场景下,FPGA加速找到了自己的发展空间,弥补了VP9在编码复杂度方面的不足,专利费的优势也得以体现. 文 / Ant 在上周圣何塞举行的XDF(Xilinx开发者论坛)上( ...

  10. NGcodec谈FPGA编码与HEVC和AV1

    随着HEVC.AV1等更复杂算法的Codec份额逐步增长,实现高质量视频编解码需要硬件支持,软件的方式无论在服务器端和移动端都非最佳的方案.FPGA专用芯片能够降低延迟和成本.在NAB 2018大会上 ...

最新文章

  1. MongoDB:快速入门,掌握这些刚刚好!
  2. python装饰器作用-Python装饰器的通俗理解
  3. 你真的知道Python的字符串是什么吗?
  4. 210312阶段三通过sqlite3源码安装sqlite3
  5. 电脑word在哪_求职必会!她是微软Office Word认证大师,想教你成为效率10倍提升的Word高手...
  6. 在mybatis用mysql的代码块_mybatis plus与mysql分库组件mycat的结合
  7. Linux简单命令集——head
  8. wait、notify、notifyAll和Condition
  9. 【多线程】线程的生命周期
  10. Python 爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...
  11. Python函数名挂载变量
  12. 计算机分区容量计算公式,硬盘整数分区计算方法(附NTFS整数分区数值表)
  13. 学报格式和论文格式一样吗_求《浙江大学学报》的论文格式要求 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  14. MATLAB绘制统计折线图
  15. android平板电脑系统安装程序,小编教你安装安卓平板win 10 1809电脑软件
  16. TreeMap使用场景 优势
  17. 数据分析——人口变化matplotilb绘图
  18. 凸包算法-------Graham扫描法
  19. 2022年超全的Android面经(附含面试题|进阶资料)
  20. echarts中自定义图片的矢量路径

热门文章

  1. uln2003驱动蜂鸣器_51单片机蜂鸣器
  2. 十二时辰及经络走向图
  3. 安卓基于图像识别和CNN做出一个通用的斗地主记牌器(一)
  4. fedora 29 使用百度网盘客户端
  5. 放置江湖html5源码,codearchive/reverse/放置江湖 at master · crazyyao0/codearchive · GitHub...
  6. 谷歌最新版本浏览器如何兼容flash插件
  7. 金蝶K3工业单据中间层插件开发教程
  8. Oracle StorageTek磁带库产品线或将终结
  9. 清除各个浏览器保存的账号密码信息
  10. PSV 2000 3.68降级3.60固化教程