组内新人培训(四):分辨率与效率的辩证关系、以及客观评价算法
由于我组向来只做1080P(作为高质量的代名词),所以最初发布狼辛720P版本的时候,我们特别写了一篇附注来解释为什么我们特别地选用了720P方案来处理这部动画,以防影响到我组的高贵气质,让大家觉得我们lowB了。在那篇文章里我们粗略地说明了一个观点:对于某些年代久远的老动画,可以通过压缩分辨率的方式,以不大的质量牺牲换取大幅体积缩减。这对于以质量为先的压制组来说这虽然没什么卵用,毕竟分辨率的改变意味着一定会有信息的丢失,然而对于高压缩组来说这种损失收获比是十分诱人的。
鉴于一般人都不会有挨个去翻我们每部作品下面附注的习惯,而这部分姿势对于一个高压缩ripper来说又是必须要搞明白的。所以我们单独把这部分内容拿出来写一篇文章,并且进行一些补充:什么是效率至上主义的分辨率选择方法?
以下为原文链接。
狼与香辛料 Spice & Wolf S1 (HEVC.720P.YUV420P10.QAAC)
ENGLISH VERSION CHECK HERE
在当时的文章中,为了解决“缩减分辨率是否对提高旧番压缩率有效”这个课题,我们构建了一个抽象模型,定性的方式介绍了这个假说,然而由于仅作科普介绍用,并未谈的很深入。在今天的重新整理中,我们会在下文中做几个小实验,让大家更深入理解分辨率缩减对画面和压缩率产生的影响。
一、首先来看看理论经不经得住实践检验
实验1:
以下直观对比几组我组压缩的720P版本狼辛拉伸到1080P(Spline16)后与原盘对比的样张。
COMPARISON 1 ... 1080P vs 720P resize
COMPARISON 2 ... 1080P vs 720P resize
COMPARISON 3 ... 1080P vs 720P resize
可以看到,几组样张中的对比差距微乎其微,而由于进行了补偿性锐化(现在看来稍有些过度,姑且称他是补偿性锐化),甚至往往720P版本的观感要来的更好一些。实践证明我们的假说是正确的,样张1告诉我们主要线条区域几乎不会受到影响(注意观察右边少女诺尔拉的轮廓线条),甚至通过适当的补偿性锐化,720P拉伸后在主体线条上的锐度甚至可以高过原盘(注意观察左边神职者的轮廓线)。而三张样张中都大量存在的纹理区域则告诉我们,除了线条外,在面对复杂纹理区域时,其目视观感同样不会受到分辨率压缩的影响,甚至可以通过补偿性锐化来对纹理进行补强(忽略其中噪点层,为了制作高压缩我们不会保留噪点层,这也是几组样张中区分原盘与非原盘的主要依据之一)。
而在有关压缩率的方面,我组制作的高压缩动画,通常以平均视频流130-140M为标准。而狼辛最后实际得到的集均视频流大小为95M,这即便对于只做高压缩的我组来说也是一个巨大的提升,在效率方面是相当令人满意的。
总的来说,在这种画质/体积比下,实践证明我们的理论是可靠的。不过难道降低分辨率对于画质就真的一点影响也没有了吗?也不尽然,大家可以注意到在第二组样张中罗伦斯眼睛上的高光变暗淡了。为什么会产生这些现象呢?我们在下面的实验中接着说。
二、分辨率压缩的本质是什么?
在之前的文章中,我们为了解决问题构建了模型,同时为了使问题简化我们做出了以下几种近似:
- 我们忽略了像素的离散性,将其近似为连续信息来进行理解。
- 我们忽略了画面空域上的不一致性,将整个画面视为一个具有同一原生分辨率的整体。
- 我们忽略了画面时域上的不一致性,对整部动画叠加统一的缩减。
而实际上我们知道的是,分辨率缩减的过程,实际上是一种低通滤波过程,同时由于像素的离散特性,其破坏性又被进一步增大。在最容易理解的情况下,假设将原视频缩减为长宽各三分之一,那么我们只需要用九分之一的像素来表示全部信息即可。在这种特殊情况下的处理是简单的,只需要将原来的每九个像素的信息,集中在其中心的一像素内即可。进一步地将其一般化,如果假设将视频缩减为长宽各二分之一,那么这个问题就变得稍微复杂了一点,而如果要缩减为1.5分之一,问题就又复杂了一点。
那么假设在一种极端情况下,比如如果要将长度为1920个像素的信息压缩至1919个像素,丢失的那个像素的信息应该如何平均分配到其余像素中呢?以最简单的逻辑,每个像素只需要表示原先1920/1919≈1.0005倍的信息即可了。对于通用性的缩放,一般我们通过计算缩放后的像素中心点、位于原图形中的什么位置(往往是一个浮点数位置,不会恰好落在某像素上),然后通过该浮点数信息对其周围四个(或更多)原像素进行加权,即可得到新像素值,公式如下:
A’(px, py) = (1-a)(1-b)A(s, i) + a(1-b)A(s, d) +(1-a)bA(r, i) + abA(r, d)
上文描述的实际上是Bilinear(双线性插值)的逻辑,作为最简单的线性缩放算法之一,由于对图像柔化过度,实际表现不佳。我们在实际操作中使用的算法当然要比这复杂一些,在此之上还有Bicubic(三次立方卷积)、Lanczos(矩阵正交变换)、Spline(emm锐利线条算法?),再往上还有比如我们在之前的教学中提到过的神经网络算法拉伸等等。
为了让大家有一个直观的认识,我们在微观细节上做两个小实验,来模拟一下动画从绘制初始到投影在你屏幕上的两个主要过程(分别为将原生作画拉伸至指定大小、和我们将蓝光盘压缩至小分辨率再拉伸到1080P屏幕上播放)。
实验2.1,
首先来看一看制作过程中的拉伸对细节的影响,模拟动画制作过程中不同细节使用不同算法拉伸,而我们在压制的过程中使用逆算法还原(而两者之间的差值可以视为冗余信息)。由于时间原因这个实验略过,结论当然是大家都清楚的,Bicubic/Lanczos/Spline作为放大算法各有优劣,且都可以用逆(descale.De*)完美还原(仅针对放大)。关于各中特点在VCB教学中有详述,不同算法的拉伸效果可参考下图:
实验2.2,
由于现阶段生成一个区分前景与背景的mask还比较困难,对不同场景施加不同的缩放算法暂时被认为是不可能的。那么我们希望观察实际压缩中使用普适性缩小算法对整个画面施加一个宏观的缩小对细节产生的影响。为此,我们模拟了一个比较极端的情况,对以双像素为单位、超高频信息,进行了一组实验不同算法,缩小到不同大小再拉回的实验。
(注:下图分别为使用不同缩小算法制作低分辨率压缩版,而后使用放大算法拉回播放的情况。为了模拟广大无知观众在播放过程中使用的“还可以”的拉伸算法,与实验一中相同地,我们统一采用spline16进行拉伸,15x放大)
观察这些实验结果,在最小单位为双素级别,频率差为最大的细节上,我们可以得到以下结论:
- 分辨率缩减的实际效果确实与低通滤波相似,误差表现为像素偏色。
- 缩减分辨率的级别影响滤波量,80%以上的一般性Spline缩放的效果相当不错。
- 缩减为2/3分辨率对高频信息影响比较大,参考倒数第二行。
- Bicubic/Lanczos的逆算法,对于缩小细节同样可以实现几乎无损的变换。
这样我们就解释了在实验一中的一些现象产生的原因。
- 对于一般性的Spline算法缩放,不愧于其名称,锐度控制还是比较优秀的。我们实验的是双像素的情况,之所以称之为极端是因为,作为参考,狼辛的主要线条宽度在6-8像素之间。控制在适当比例之内的(80%以上),即使在极端频率差中带来的滤波损失也在可接受范围内,是比较小的。
- 1080P->720P带来的损失是比较大的,但仍不足以模糊线条边界。在纹理上,这种损失效应对一般性的、频率差不大的纹理表现并不明显,加之纹理杂乱的特性,导致上文中宏观效果对比目视观感并无区别。但对于非纹理的高频细节,这种差别就体现出来了,表现在上文中罗伦斯的眼睛高光被过滤。
三、编码研究的重要工具:客观评价算法
上文中的两个实验别说明了两个问题,第一,宏观结果证明推论可靠;第二、微观结果为我们确定分辨率缩减造成影响的大致范围。但目前为止,我们仍然没有摆脱定性的范畴。证明推论可行的现在,在实际操作中我们迫切需要解决的一个问题是,究竟分辨率放到多大效率最高?(衍生下来可能还有一些其他方案,比如对横纵分辨率的不对称压缩、再通过编码器的SAR参数校正比例。然而由于没有任何理论可以证明动画横纵向信息量不一致,故该方案暂不做讨论,下文默认横纵坐标保持同一缩放比例)
为了解决这个问题,我们引入了一个新系统:客观评价算法。
客观评价算法是什么?
简单来说,由于在动画/电影这种与感官相关的媒体中,人眼作为唯一评判标准,但其本身却具有不稳定性。我们不得不依靠它,但它却不可靠,这让我们比较难办。想要将图片究竟有多大差异量化到一个具体的数值,想来想去还是要靠计算机。
与其他问题相似,这同样是件说起来容易做起来难的事。为比较精确地将图片差异量化,人们提出了两套相辅相成的评价体系,其一为基于有全参考图的图像差异评价体系,包括大家可能以前听过的PSNR(峰值信噪比)\SSIM(结构相似性)\以及这次提到的FSIMc(基于图像内容结构、相位相似性的图像质量评价算法)等等。其二由于上述种种算法效率不同,为判断个中优劣,我们还有一套评价哪种算法计算结果最贴近人眼观感的系统,包括SROCC(Spearman Rank order Correlation Coefficient)\KROCC(Kendall Rank order Correlation Coefficient)\PLCC\RSME。
略过中间过程,作为结论,由于近些年新晋(emmm2010年)提出的FSIMc算法在各种评价系统中稳定领先PSNR\SSIM等等传统算法(别问我为什么不用最新的算法因为不会用),并且得益于其具有的高度稳定性,(四大图像数据库中跑分结果单调性强,受图像种类、噪点等的影响较小),我们选用这种算法,可以比较好地计算视频源通过不同方式经过编码器后,产生的差异究竟都有多大。
(由于vs处理中不存在一个“理想的完美图像”用以参考,所以客观评价算法并没什么卵用,然而这对于有标准参考答案的编码器参数研发是截然不同的事,客观评价算法在后者中有广泛应用。对详细过程有兴趣的朋友可以看以下这几篇客观评价算法对比文章。FSIM: A Feature Similarity Index for Image Quality Assessment //一种基于FSIM对视频编码图像质量客观评价的方法//图像质量评价怎么了 -- 全参考方法整理与实用性探讨//有兴趣自己试一试的朋友可以在Feature SIMilarity Index for IQA - PolyU COMP下载到FSIMc基于matlab运行的源码)
在具体实验中,我们选择了两组不同的片段,分别模拟高锐度高信息量(预览),与粗线条低信息量(预览)的两种环境。在709规范下采用规范缩放方案做线性转换,采用普适性算法(Sp36+dering)缩小,分别生成了以5%为单位、从100%像素(1080P)、到50%像素(540P)递减的若干分辨率的视频流,而后将其统一拉伸至FHD屏幕播放规格、模拟大部分无知观众直观看到的影像(算法与上述若干实验相同不再赘述),最后通过FSIMc分别计算信息损失量、分辨率、与文件大小三者之间的关系。
数据如下:
(图中蓝色实线为文件体积,红色实线为图像质量,虚线为趋势线(移动平均)。不要吐槽样本数量,我们不是在写某种论文)
由此我们可以引出今天的结论了。
- 在锐度高到爆炸的你名样片模拟的高信息量环境中,压缩得到的文件大小基本上成指数分布,与理论值(二次方比)还是比较贴合的,540P下的文件大小为1080P的28%,与25%的理论值比较接近。而在低信息量的样片中却不是如此。由于狼辛本身线条和色彩都很简单,也不存在什么纹理,故HEVC编码器即使在1080P下也可以比较高效地存储它的信息,而再向下的压缩的空间就没有那么大了,540P的文件大小为1080P的58%,整个散点分布虽然仍然能用指数函数预测,但由于曲率极低,相比之下更加接近直线,与理论值相差比较远。
- 观察例1图,与文件大小形成的下凹曲线的变化趋势相反,画面信息损失则与分辨率比例形成一种上凸曲线的趋势。即是说在分辨率等比例线性缩小的过程中,画面质量呈一种刚开始变化不大,而后开始急速下降的趋势,明显地,缩小至540P的画面再拉回1080P带来的模糊和信息丢失非常显著,而后分辨率越小失真越大。(不妨设想极限情况下1像素不可能包含1920*1080像素的全部信息),这与我们在实验2中得到的结果是一致的。
- 基于上述第二点,我们可以将上图中代表结果的各离散点拟合为一条平滑曲线(图中为了照顾例2而使用了移动平均,实际上文件大小曲线用指数拟合也是很合适的)。这两条曲线的变化趋势,虽然在例2中没有例1那么明显,但仍可以看出趋势是一个上凸一个下凹。于是很简单地,如果我们对两条曲线做差,差值最大的区域表示的含义即是该画面的分辨率的最佳效率点。同时结合你期望的画面质量,我们就可以形成一套针对高压缩的分辨率方案。即比如说以例1为例,在压制前的预处理过程中选取若干组样片绘制如该图所示曲线,根据结果判断出最佳效率区间(例1中最佳效率区间约为85%~65%,而后我们为了保证高画质定位,选择80%或75%的分辨率为最终方案),在该区间下进行的操作可以保证是效率最高的(体现在编码器参数的可定制性更大,CRF的调整空间更加灵活,只要源合适,就可以确保在即便在比较极端的相同体积下,低分辨率版本保留的信息只会更多而不会更少)
看到这里有的同学会突然反应过来,说你这个结论不太对啊。你上一篇文章里不是说建议老旧动画、粗线条动画才使用这种改换分辨率的方式么,为什么上文都在围绕高细节高锐度的例1论证呢?按照上文中的例2图示,两条曲线都接近直线,似乎低细节的老动画缩减分辨率带来的效率收益还没有新动画来的明显,这与你之前的结论相悖。
这位客官别急么,我提醒你注意坐标轴。
实际上为了让规律表现得更加明显,例2的副坐标轴被进行过处理。
如果把它放到跟例1同样的坐标轴上,它的效果会是这样的:
如大家所见,这就是我们为什么说在旧动画上缩减分辨率是一种相当聪明的行为的理由:图像质量损失相比于体积缩减显得微乎其微,花费收益比实在过于诱人。与变化趋势不明显的例2不同,例1则是为我们提供了普遍性的结论:我们知道了分辨率效率是如何随着大小变化的,并且知道了对于大量细节来说各比例区间代表的大致质量,这种极端条件可以为我们平常对低信息动画的缩放提供指导,让我们知道即使其中有偶发性的高信息片段,只需要设定科学的分辨率方案也不用担心其损失。
作为文章总的结论:针对某些旧动画的特殊情况,在科学方法下证明缩减分辨率是一件比较折腾的事情,但它是有意义的;我们推荐对线条粗犷,最低细节大小不低于2像素的旧番进行分辨率压缩(当你成为老司机后对这种源就会更敏感一些,比如我们准备制作的灌篮高手、钢炼03、百变小樱魔术卡等等旧作)。结合补偿性调整,使其在1080P屏幕上无限趋近于源,但体积相比传统方案得到大幅缩减。需要注意的是我们要确保其中没有大量重复CG作画(比如上文中实验2.2的情况,在新番中比较常见,在诸如魔法少女小圆这种大量运用CG作画重复构图的动画中、你的名字这种大量使用重复线条表现楼宇/网格/天线等的场景中,低通滤波带来的损失过于巨大,得不偿失)。
( ↑ 比如说如果眼睛是这种画风你还要缩分辨率,那就等死吧你呐)
当然了,我们之前在动漫花园发的文章也引起了一些讨论。其中有一位朋友虽然说了半天没有说到点子上,不过主要想表达的意思就是虽然我们说动画制作过程中的缩放会带来无效信息,但是蓝光的制作也不是单纯对DVD进行线性放大(这是显然的),往往有人为修复、细节增补等在其中。这点当然我们也是同意的,所以我们基于的前提也是即便制作DVD分辨率,也不应直接用DVD输入,应基于(排除极特殊情况的)蓝光中包含有更多的信息,采用从中Downscale的方案。
迷之压制组,这个组的一切都是迷。
我们下期再见。