跳到主要内容

第四章 认识瑕疵

BDRip 制作的绝大部分时间,实际上是在与各种各样的画质瑕疵进行斗争。而对瑕疵处理的好坏,也决定着一个 Ripper 的水平。对于所有入门压制的新手来说,了解你的“敌人”,是最重要的第一步。

对于本章中的所有图片,强烈建议单独打开,以 100% 无缩放进行观察。

1. 画面要素

在介绍画质瑕疵之前,我们首先来简单介绍基本的画面要素。这有助于我们把握画面的重点,有针对性地去寻找瑕疵。

(1). 空间上的频率划分:平面,纹理和线条

在视频处理中,空间(spatial)的概念指的是一帧图片以内的像素变化。从频率的角度看,任何画面区域都是多种复杂频率的混合体,但其不同区域的各种频率所占比重有明显区别。

像素变化较快,变动幅度大的区域,高频分量占据主导地位。像素变化缓慢,变化幅度小的区域,低频分量占据主导地位。

平面

平面(flat areas)是包含大量低频分量的区域,其特点是像素变化非常小。如上图左侧黄框区域。

线条

线条(lines)是包含极端高频分量的区域,其像素有跳跃式的急剧变化。如上图中间红框区域。

纹理

纹理(texture)区域较为复杂,其像素在小范围内频繁变化,高低起伏不断。纹理变化剧烈的,称之为强纹理,中高频成分占据主导,其性质接近于线条。如上图左侧蓝框区域。纹理变化平缓的,称之为弱纹理,中低频率成分占据主导,其性质接近于平面。如上图右侧绿框区域。

噪点

噪点(noise)是一类特殊的画面要素,表现为随机的像素涨落,它可以叠加到以上任意要素中。噪点的频率构成取决于其种类,白噪声在各个频率的强度完全一致,而一般动画原盘所带的噪点则涵盖低频到中高频,随频率增高而略有下降,最高频部分则基本被砍掉。

(2). 时间上的频率划分:静态和动态

在视频处理中,时间(temporal)的概念指的是帧与帧之间的像素变化。

一段视频如果变化剧烈,其时间复杂度较高,时域上的高频信息占比就较多。而如果视频本身变化缓慢,多为静态,其时间复杂度较低,时域上的低频信息占比就较多。

一般来说,一段视频的时域高频信息多,动态的信息量就大,所需要记录的数据量就越多,编码所需要的运算量也越大。这就是为什么动态高的部分更容易发生欠码。但是另一方面,人眼对高速变化的场景,敏感度不如静态的图片来的高,因为没有时间去仔细观察细节。所以动态场景的优先度可以低于静态场景,高动态镜头的帧稍微烂一点是可以接受的。如何权衡以上两点去分配码率,是实际编码中需要考虑的重点。

2. 画面瑕疵

(1). 色带 (banding / color banding)

色带是最常见的瑕疵,没有之一。色带产生的本质原因是量化数据的精度不足。目前绝大部分的片源采用 YUV 8bit 编码,然而在 YUV 模型下 8bit 的数据精度范围,不足以达到人眼可分辨精度的极限,这就导致色彩出现可分辨的断层,即色带。另一方面,早期的大部分制作商并没有考虑如何在有限的精度范围内使用额外的手段避免色带,这就导致了色带泛滥成灾。如今这一现象有所改善,部分制作商已经意识到这一问题,并通过加入噪点和抖动的方式来避免色带。

色带在暗场平面以及渐变颜色的场景最容易观测到。色带通常表现为一系列波浪状、同心环状的阶梯区域。

色带的处理方式叫做去色带 (deband / de-banding)。

注意下图中间的头发平面区域。

(2). 锯齿 (aliasing)

锯齿是最典型、最常见的线条瑕疵。锯齿表现为原本应该连续的线条上,发生了线条与平面的交替、毛刺、或者断线。锯齿的类型很多,不同类型的锯齿有不同的产生原因。

锯齿的处理方式叫做抗锯齿 (anti-aliasing / aa)。

二值化锯齿

二值化锯齿是动画制作的二值化过程产生的。对于手绘作画的动画,原画首先被扫描得到二值化的数字图片,之后进行润线来平滑线条。如果扫描性能太差或者润线做得不到位,就会留下凹凸不平的线条。

注意梗小姐右下角的头发。

缩放锯齿

缩放锯齿是图像在后期处理时被低级的算法拉伸或者缩小而产生的细碎锯齿、毛刺现象,是最常见的锯齿瑕疵。

3D 渲染锯齿

3D 渲染锯齿一般出现在背景素材上,这些素材由 3D 建模绘制,在渲染时由于算法问题,产生大量锯齿或者断线现象。一般 3D 渲染锯齿的断线过于严重而无法修复。

像素锯齿

像素锯齿一般出现在纯数字作画的场景中,由于线条和平面的交界处过于锐利,没有中间过渡的部分,而形成类似锯齿的形状。一般来说,像素锯齿被认为是一种画风,而不是需要处理的瑕疵。

画风型断线

画风型断线表现为线条深浅交替,并且往往不太规则。画风型断线是动画制作中刻意处理的美术风格,一般不需要修复。

(3). 振铃/晕轮 (ringing / haloing)

严格来说,振铃和晕轮是有区别的,振铃的成因是信号的高频成分被破坏(比如有损压缩中在变换域后的量化),而晕轮是来自锐化产生的极端值。但它们在目视结果上都表现为,在图像的主要线条附近,有一圈瑕疵像素的值与周围像素不同,且更接近值域两端的极值。两者可以用相近的手段进行处理,我们一般不刻意区分两者。

振铃/晕轮的处理方式叫做去振铃/晕轮 (dering / de-ringing, dehalo / de-haloing)。

振铃/晕轮通常和锯齿是伴生的,这在后期拉伸的片源中尤其常见。

(4). 噪点 (noise / grain)

亮度平面的噪点表现为深浅不一的点状图样,而色度平面的噪点则表现为花花绿绿的斑点。

噪点是否是一种瑕疵,这一话题的争吵多年来从未停止。除去特效噪点,就普通数字噪点而言,我们认为可以分为两部分,画风型噪点和保护型噪点。

画风型噪点以静噪居多,往往与纹理细节紧密结合,是图像画风的一部分。

保护型噪点在正常图像比例下几乎不可见,它们主要用于防止产生色带。

在 10bit 压制下,对于保护型噪点的需求有所降低,可以削去一部分来降低码率。而画风型噪点是组成画面的重要部分,很大程度影响着最终的还原度,需要尽量保留。

另外视觉心理学优化也应当纳入考量。对于人眼来说,亮场区域的噪点几乎不可见,可以尽量削去。色度噪点对画风的影响基本是恼人的,应该尽可能去掉。

(5). 色块 (blocking)

色块一般是严重欠码或者视频损坏,而导致的一系列方形、网格形的图样。色块在三次元演唱会、各种 web 片源中极其常见。

色块的处理方式叫做去色块 (deblock / de-blocking)。

(6). 烂边/蚊噪 (DCT ringing / DCT noise)

烂边/蚊噪是指画面欠码的时候,线条和平面都出现了很脏的观感。线条周围一圈出现振铃、锯齿、块状噪点等混合瑕疵,而平面有噪点的地方,部分噪点被去掉,部分噪点残留,形成难看的纹路,并通常伴有色块出现。

这些瑕疵是由视频编码中的 DCT(Discrete Cosine Transform,离散余弦变换) 导致。在码率严重不足的时候,将一些频率一刀切,就会造成这样的后果。

烂边/蚊噪的处理一般需要 deband / deblock / denoise 等多种手段的配合。

(7). 亮度越界 (luma overflow / underflow)

数字图像中的数据在不同标准下有着不同的取值范围,如果把一个标准的范围用到另一个标准下,就可能会发生越界的问题。

下图中亮度的上界发生了溢出,超过的部分被认为是全白而无法分辨细节。

注意画面的左上角,修正亮度范围后,终于可以看清其中的纹理细节。

越界的调整需要对数字图像规范有着专业的了解,同时还得熟知中间的变换公式。

除了亮度,色度同样可能发生越界,不过一般来讲色度越界的情况非常少见。

下面部分介绍一些与交错(interlace)相关的瑕疵。

(8). 拉丝/横纹 (combing)

拉丝/横纹是指图像中相邻两行错位造成的视觉效果。当隔行扫描的交错(interlaced)片源,没有经过任何处理(或者部分片段漏了处理),然后按照逐行扫描(progressive)的方式进行播放,就会产生这样的现象。

根据片源类型的不同,处理方式一般有以下几类:

反交错(de-interlacing)/ 场匹配(field-matching)/ 反交卷过带(inverse telecine,IVTC)

(9). 缟缟

此名称有一定争议,不过在我们的教程中,该词指的就是如下的现象。

缟缟的效果兼具拉丝和锯齿的效果,有非常特殊的线条特征。

缟缟产生的原因是,隔行扫描的源,没有先转换为逐行扫描,而是在隔行状态下,用逐行扫描的算法放大。

缟缟按照具体表现及程度有不同的处理方法,统称去缟缟。

(10). 重复场 (duplicate field)

重复场表现为一帧里,奇数行和偶数行相同。视觉效果如下(轻音少女横滨演唱会;少数动画中也有,如 K 的剧场版)。

重复场通常和锯齿难以区分,但是如果把奇数行和偶数行拆开各自组成一幅图,两份图是一样的。

解决方法是丢掉奇数行或者偶数行,用剩下的缩放到原来高度。处理方式记为 fix duplicate field。

(11). 鬼影 (blending / ghosting)

除去视频本身采用的特效,这里鬼影指的是非正常的帧融合,造成的动态瑕疵,典型的比如孔明的部分镜头、寒蝉的 BD。

blending 一般是不规范的反交错/交卷过带产生,且/或者是滥用不可靠的时域处理造成的。

多数情况下无解,少数有规律可循的,一定手段可以还原。

处理方式称为 de-blending / ghost-removal。

下面部分介绍一些与色度平面相关的瑕疵,其中绝大部分的问题是由万恶的色度下采样所致。 实际上它们与亮度平面的问题没有本质区别,但由于色度平面和亮度平面的性质差异,最终在图像中的表现形式有所区别,因此拿出来单独介绍。

(12). 色度色带 (chroma banding)

色度色带,就是色度平面精度不足而产生的色彩断层。通常在出现亮度平面色带的地方,或多或少也会出现色度色带的问题。

色度色带在目视表现上,跟一般的色带略有区别,主要表现为本该是一种颜色的区域变为多种颜色区域的混合。

色度色带一般随着正常色带一起处理,无非加重 UV 平面的处理力度。

注意下图左侧墙壁平面,以及中间人物衣服的平面区域。

(13). 色度锯齿 (chroma aliasing)

色度锯齿通常是由于色度平面在下采样时使用了劣质的算法,导致出现明显锯齿。

色度锯齿在颜色极红或者极蓝处最为明显,表现为线条被平面的颜色入侵,产生不规则的断线状。

色度锯齿的处理方式一般是拆分 UV 平面进行抗锯齿 (chroma aa)。

注意图中红色区域的线条。

(14). 色度偏移 (chroma shift)

色度偏移,指的是色度平面相对亮度平面的错位。其目视效果通常是,在极红、极蓝等(UV 值极大或极小)平面与线条的交界处,多了一些重影。或者说线条一侧的颜色侵入到另一侧。

色度偏移通常是由于不正确的 chroma placement (chroma 平面相对 luma 平面的偏移) 处理而导致的。实际中色度偏移通常只有 0.5 个像素,最多 1 个像素,效果非常不明显,一般人很难观察到。

色度偏移的处理方式叫做 fix chroma shift。

下图为手动制作的向左偏移 3 个像素的例子,注意图中头发线条部分,颜色发生了严重的错位。

然而实际中一般只有 0.5 个像素左右的偏移,注意下图袖子左右的线条。

RGB shift

实践中常常有人将 RGB shift 错认为 chroma shift。RGB shift 是在 RGB 空间下,将 R 和 B 平面进行一定偏移处理,主要是为了模拟现实中光线散射的效果。

由于 RGB 各平面间不存在类似 YUV 那样的偏移,因此 RGB shift 几乎一定是故意制作的特效,并不是一种瑕疵。

区分 RGB shift 与 chroma shift 最好的方式,一是看是否是单侧偏移,chroma shift 只可能是单侧偏移;二是看白色平面上的黑色线条,由于白色和黑色在 YUV 下的 UV 相同,其分界面不可能产生 chroma shift,只可能产生 RGB shift。

(15). 色度溢出 (chroma bleeding)

色度溢出跟色度偏移很像,区别在于色度偏移是有方向的偏移,色度溢出是无方向的扩张。

色度溢出在颜色强烈的线条出容易观察到,特点是 chroma 平面的线条宽度远大于 luma 平面线条宽度,导致侵蚀了周围的颜色。

色度溢出的处理方式一般是对 chroma 平面进行收线,将线条控制到与 luma 平面相同,记作 fix chroma bleeding。

色度溢出的范围一般较小,不易观察,下图实际为特效。

最后介绍一些在上古动画中会出现,但如今基本见不到的瑕疵。

(16). 晃动 (global motion / pan)

通常是在老片翻新过程中,因为镜头/胶带位置不固定,导致录制的视频,似乎镜头在不断晃动一样。哪怕是应该静止的场景,都有不规律的、小幅晃动。

修复手段一般称为 depan。

(17). 彩虹 (rainbow)

rainbow 多出现在早期真人视频中,表现为亮度快速变化的地方,UV 似乎像彩虹一般红蓝交织。

rainbow 的产生是由于 YUV 数据在电磁信号传输过程中,高频的 Y 信号,因为传输介质不理想,影响到了 UV。如果这时候进行进一步转录,就会把这个问题保留。

修复手段一般称为 de-rainbow。

(18). 点状斑纹 (dot-crawl)

点状斑纹也是传输 YUV 中,不正确处理导致的问题。

修复手段一般称为 dot-crawl removal。