傅德良:选择视频编码器的误区

原创
2020/04/20 18:12
阅读数 48


本文来自Hulu全球高级研发经理、视频编解码与传输领域资深专家傅德良在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成。在分享中,傅德良以 Hulu实践为基础,介绍了视频编解码标准与视频编码器间的纷争以及视频编码器对比中的常见误区。


文 / 傅德良

整理 / LiveVideoStack

直播回放:

https://www.baijiayun.com/web/playback/index?classid=18080762402281&session_id=201808090&token=uZ625CeeYjlt681rrJ0J_QF5IFovyV_YUmg4kFrht2w3BNJeOiHfrcykX8qRNLtt7PJ3RphQDikKp0fXMnVKLQ


大家好,我是傅德良,在Hulu主要负责的团队是在做音视频编解码和传输相关的一些优化和开发的工作,很高兴跟大家聊一聊对于视频编码器的对比和选择。


主要内容分为以下三个方面:


1,纷争的视频标准与视频编码器

2,视频编码器对比中的常见误区

3,选择最合适的视频编码器


由于今天的热身分享时间相对比较有限,所以今天主要会讲常见误区这一块,关于选择最合适的视频编解码器这个领域,更多的会在10月份的LiveVideoStackCon 2018正式分享中进行介绍。


前言


关于Hulu

 


Hulu是美国的一家在线流媒体服务公司,在中国并没有业务,主要服务的是美国的用户。Hulu是由美国最大的几家传统的媒体公司合资创办的,它的使命是为了重新定义电视这一行业。大家也知道电视这一行当已经出现很久了,不过一直到现在,它在每个人的生活中仍然具有相当重要的地位。在Hulu上既有点播,也有直播的内容,我们站上的这些视频大部分都是高质量的视频,主要是一些美剧,还有一些电影,同时也有一些自制剧,Hulu近几年自制剧上面也有一些比较多的好剧出来。



上图是一个由第三方的数据公司做的美国比较主流的几个在线流媒体服务公司的一些数据统计,第一列的大概意思就是说,如果一个人从来没有用过有线电视,他直接就开始在电视上使用在线流媒体服务的情况,我们称之为Cordless,Hulu在这几家公司里面是最高的。而且Total OTT Viewing Hours和Viewing Days也是最高的,也就是说对于Hulu来讲,用户在站上的黏性是非常高的。Hulu的商业模式是付费加广告的一种模型,也就是说首先需要付费成为付费玩家才能够真正的在我们的站上观看视频,在此基础之上,还可以选择去广告或者是有广告。在这种模式下,为了提供比较优质的内容,视频质量对于我们的这种服务来讲是非常重要的,因此,不断地提高视频的传输和压缩的水平是非常重要的。所以,Hulu经常会做一些不同的编码器,不同的技术之间的一些选型,在这方面我们也积攒了一些相关的经验。


纷争的视频标准与视频编码器


1, 视频编解码标准


视频编解码标准一般是由一些标准化组织去组织创办和制订的一种规范,它主要规定了我们在网络上传输视频的码流格式,从码流格式中也相应的规定了音视频编解码的基本流程。从流程上来讲,编解码标准主要统一的是编码器和解码器的接口,它通过规定了码流的格式,也就规定了在编码标准中可以使用的一些编解码工具的集合,也就能够保证音视频的压缩效率。



上图是目前最常见的混合编码框架的基本流程图,这里就不细讲了,整个视频编码的基本原理就是通过一系列的方法去除冗余,最终达到降低码率,但是同时又能够恢复原始图像的目的。另外,编解码标准只是对码流进行了一系列的规定,事实上它并没有去具体的规定编码是怎样做的,如果你去看标准文档,它其实规定的是整个解码的流程。


2, 视频编码器


视频编码器实际上跟视频编解码标准是有很大不同的,视频编码器是视频编解码标准的一种代码实现,但是同一套算法的不同的实现,性能和效率的差别都是很显著的。视频编码器之间的主要差异分为以下几个方面:


1) 视频编解码标准中压缩工具的支持情况

2) 针对视频编码速度的优化

3) 针对视频编码质量的优化

4) 功能和代码的可扩展性

5) 商用 vs. 免费


举个例子,有人认为HEVC编码器一定比H.264的编码器要强,但是我们知道在HEVC中有很多种不同的预测方向,如果我设计一种编码器不使用帧间预测,只使用帧内预测,而且不管内容是怎样的,都使用这一个固定的模式来进行编码,那么这样编出来的码流可想而知,它的预测的效果是很差的,压缩的效率会非常的低。虽然码率很高,质量很差,但是这个码流仍然可能是符合HEVC标准的。相对来说,如果用H.264的来做编码,但是整个编码器的优化做得非常的好,整个的码率控制都优化到了非常优秀的程度,那么这个H.264编码器编出来的视频码流的质量完全可以比HEVC编码器编出来的效果更好。在视频编解码领域,新的标准刚刚出来的时候,大家不会很快的去采用这种新标准的编码方案,原因就是在于编码器端的优化还没有做到位,所以说单纯在考虑编码器的性能和它对这种标准的支持是非常片面的一种做法。因此,在实际的工作中,选择编码器一定不要盲目的相信H.265的编码器就一定比H.264的编码器好,这个是不一定的,甚至有些时候一些比较Low的标准也可以做得很好。因此,在选择编码器的时候,要从上述的视频编码器之间的差异出发来选择。


3, 纷争的编解码标准与编码器


在整个编码器对比的过程中,经常遇到的一个非常大的误区就是把视频编解码标准和视频编码器混为一谈。



上面简单罗列一下目前市面上的很多种不同的编解码标准以及不同标准的编码器,在实际生产中,作为一个在线视频提供方,如果希望自己去做视频的压缩,那么在编码器的选择上,毫无疑问是一个大问题。并不是说,市面上只有那么几款编码器直接用就行了,并不是那么的简单,在很多的场景中,我们都会遇到如何去对比不同的音视频编码器来选择适合的编解码器的课题。


视频编码器对比中的常见误区


1, 误区一:脱离速度评价质量


从视频编解码标准的发展历史来讲,整体来说是复杂度越来越高,效率越来越高。在很多场景下,视频编码中速度和质量在一定范围内是可以相互转换的,也就是说可以牺牲质量来加快速度。因此,如果只是单纯考虑质量维度,但不考虑速度,就会有很大的误差;此外,即使同一编码器的不同的速度档次之间的质量差距也可以非常的巨大。



上图是我们内部对开源的HEVC编码器的测试图,可以看出对于同一编码器,在不同的速度档次下,质量是有差距的;在相同码率下,速度越快,质量也相对较低。因此,我们在对比不同编码器的编码质量时,一定要在同一速度下比较编码质量才有意义。


2, 误区二: 速度对比中环境不一致


为了达成准确的视频编码器对比,需要使得编码器速度一致再进行对比,在这个过程中,有的时候会有一个问题即对比的环境不一致。当编码器放在不同的这种软硬件环境下进行测试时,对比结果可能有很多的误差。由于优化和实现上的区别,各编码器在不同运行环境下速度差别显著。在对比不同编码器的过程中,我们需要考虑到CPU线程数量,硬件加速环境和开关,CPU指令集支持情况和内存容量、带宽等因素。要在相同的测试环境下对比,不一致或不合理的测试环境会导致编码器对比结果不正确。


3, 误区三: 脱离码率范围对比质量


在视频编码的过程中,视频编码质量通常与视频编码码率成正相关,但并非线性相关。在大的码率范围内,随着码率的进一步增加,质量的增加是慢慢的衰减的,这也就意味着说,各个编码器在不同的码率范围的性能表现可能是很不一致的。在实际生产中,视频编码码率潜在范围非常宽广,例如,同样都是720P的AVC的编码器,有的用5000kbps,有的用500kbps。对于一些硬件编码器,在低码率的情况下,速度很快,编码质量也还可以,它的编码效果就比一些软件编码器要好。但在高码率的情况下,硬件编码器可能由于它的编码工具实现的不够完善导致质量上不去,这时候软件编码器就会表现的更好。因此,在对比编码器的时候,一定要在它合适的码率范围内来比较性能,脱离码率范围对比编码质量很容易导致错误结论。


4, 误区四: 仅依赖小规模公开测试序列进行测试


在视频编码的过程中,视频编码效率与视频内容高度相关的,同一视频编码器在不同类型内容上的表现经常是不一致的。此外,还有一部分编码工具主要针对某一类视频有效,它主要针对某一特定场景有效,如果你的测试场景并不包含它,这个测试的结果就不会好。因此在测试过程中,最好能够针对你的业务需求由真正的应用场景去设计比较大规模的测试集,仅仅依赖小规模公开测试序列测试容易引入误差。测试群规模小就不能够涵盖产品中的所有情况,而且公开测试序列不能体现业务特点与需求,此外还有部分编码器针对公开测试序列进行了过拟合的调优,这些都会导致测试结果误差较大。


5, 误区五: 仅使用PSNR评价质量


PSNR为视频编码领域经典指标,至今被广泛应用,它是纯客观指标,单纯体现编码后视频与原始视频差异程度。但是像PSNR这样子的纯客观指标是有一定的局限性的,在很多情况下并不能正确反映视频主观质量。



上面两幅图如果用PSNR来衡量,与原图相比较它们的PSNR的大小是一样的。但是我们很明显的可以看到,右边的图它有一些噪音在里面,在主观上来看,左边的图比右边的图质量要好。因此,如果单纯使用PSNR评价质量可能会使的我们进入一些误区,而且近些年,很多的编码器里都会有基于主观质量进行的优化。


选择最合适的视频编码器


当我们避开上面的误区时,选择的编码器一般是相对靠谱的。在选择编码器的过程中,我们要充分考察业务需求,选定必要功能,还要详细考察运行环境,并相应制定测试环境。在测试的过程中,要明确定义测试目标,要注意编码速度和码率范围。此外,如果是你只是想做个学术的研究,只用公开的序列就足够,对于工业实践还要根据自己的业务需求定制特定的测试序列,而且测试序列规模应当足够大。最后评价编码器的编码质量要主观质量和客观质量结合起来,不可仅仅从单一方面评价好坏。


Q&A


Q1: 请问有没有公开大量数据集的计划?


A: 如果你关注的话,你会发现在业界对于数据集的公布,成本是比较高的,因为它除了拍摄还有一个处理的过程,还有包括一些版权,这些相对来讲还是比较复杂的,我们目前暂时没有公布测试数据集的一种行为。在业界有一些公司其实是能够找到一些的,但是数量坦白的说也并不是非常的大,个人建议就是说还是在自己的业务场景里边根据自己的需求去做,像这样相对来讲比较靠谱一些。


Q2: 数字水印有什么好的测量方法呢?


A: 这块没有太多涉及,在我们的业务中比较少涉及到数字水印,不同的水印原理也不一样,据我所知在美国市场上有一些这种数字水印,它并不一定是加在视频上的,有的时候是加在音频上的,据我所知,尼尔森有一些这种数字水印的技术,它的原理是把它加在人耳不容易感知到的频段上,再使用相关的设备进行相关的提取。视频上面的话,没有接触过。


Q3: X264除了参数调优以外提升质量还有哪些的优化?


A: X264这个编码器本身的优化做得已经比较好了,如果说参数调优不考虑在内的话,这个也要看你的业务场景,如果说你的业务场景是这种对编码速度要求很高的情况的话,你可以考虑对它的这种原有的这些速度级别进行有针对性的一些筛选,比方说它原来给你提供了大概八九个不同的速度的级别,但是如果你需要一个比较快的档次的话,你可以自己对这些工具进行定制化的改动。其他的话,就是比较外围的,很多都是跟参数调优相关的。



本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部