微帧 Film Grain 编码技术,致敬电影胶片颗粒的独特魅力
“胶片成像的颗粒感,是数字影像无法复制的独特魅力。”著名导演克里斯托弗·诺兰在《信条》上映时表示。作为胶片电影的忠实追随者,自处女作起,诺兰每一部影片都采用胶片进行拍摄,其中包括《星际穿越》《盗梦空间》等风靡全球的著作。
诺兰导演口中的“胶片成像的颗粒感”,正是本文要讨论的 Film Grain(胶片颗粒)。
为何 Film Grain 作为一种噪声,却能得到大量导演和观众的喜爱?其实是因为在某些特定的非线性系统中,噪声的存在能够增强微弱信号的检测能力,这种现象就称为随机共振。而在图像系统中,在一定噪声(如 Film Grain)强度条件下,图像视觉质量可以达到更优的效果。
因此,Film Grain 作为影视创作意图的一部分,在对视频进行编码时,有效保留 Film Grain 是非常重要的。
但 Film Grain 作为图像噪声,分布和大小都不规则,具有随机性。Film Grain 的随机性使得传统编码技术难以有效压缩,同时也使得预测变得非常困难,运动估计的精度也会降低。
就此,微帧科技在微帧 Aurora AV1 基础上研发了 Film Grain 编码技术,此技术已成功应用于某知名 PGC 视频平台,并获得了客户及平台用户的认可。
使用 AV1 能更高效地保留与合成 Film Grain。因为传统视频标准在制定时,并没有将 Film Grain 加进标准,运用传统编码方式对视频编码,容易造成 grain 分布不均匀、保留不完整等问题。而 AV1 在制定时就把 Film Grain 处理工具加进了标准,对于 Film Grain 编码和解码的支持度更高。
与开源 libaom 相比,微帧 Aurora-AV1 的优势在于编码速度更快、效率更高,其次是能支持 10bit Film Grain 的去噪处理;并且,在开源 libaom 编码器上保留 grain 容易出现明显的 banding,微帧 Aurora-AV1 的自适应量化模式也能更好的避免这种情况。
banding 示意
针对不同类型的 grain,微帧科技采用 Aurora-AV1 视频编码器进行了 3 个方向的尝试:去噪+合成(Grain Synthesis)、直接保留(Grain Preservation)、保留+合成(Preservation+Synthesis)。
01、去噪+合成(Grain Synthesis)
Grain Synthesis 是通过去噪处理去除视频中的 grain,并估计出 grain 参数,这些参数将随压缩视频流一起发送至解码器,解码后,再将 grain 合成并添加到重建的视频帧中。
此方法有助于保存已编码视频的 grain 外观,与直接对 grain 进行编码比,能保持更低的码率。
但 Grain Synthesis 的缺点在于:合成过程中的第一步需要生成一个 64x64 的模板,之后随机从模板中选取一个 32x32 的块。在选取的时候,x,、y 的坐标需要小于 32,导致相邻块选取的 32x32 块会有重叠,且朝向一致,在 grain 强的序列中的平坦区域非常容易产生 pattern,以及明显的 artifacts。
就此问题,微帧的解决方法是:选取 grain 的种子,只采用 pattern 没那么明显的种子进行合成。
左:源视频
右:通过微帧 Aurora-AV1 编码合成的 grain
两者几乎无差
02、直接保留(Grain Preservation)
若源视频中的 Film Grain 是未经压缩的,可以用 AV1 Film Grain 工具进行重建;但对于已被转码压缩的视频,则很难重建。因为 grain 经过压缩后,会出现低频分量,产生一定的 pattern,这些很难用 AR model 完全表示出来。因此,对于明显有低频分量的 grain pattern,需要通过直接编码的方式进行保留。
除此之外,对于 grain 比较细的序列,采用直接保留 grain 的方式,能让 grain 保留的更均匀,也能保证更好的清晰度,使得在无 grain artifact 的同时生成较好的 grain 视频。
值得一提的是,采用微帧 Aurora-AV1 直接编码保留 grain,能够抑制 grain 不一致和不同帧清晰度不一致的现象,这是普通 AV1 编码器目前所达不到的。
03、保留+合成(Preservation+Synthesis)
编码过程中还会遇到同一帧 grain 分布非常不均匀的情况,比如上半部分有 grain,下半部分没有 grain,这种情况不能依赖 Grain Synthesis 的方法,因为标准全图都为同一种 grain model。直接编码的方式则可能会出现 grain 保留不完整、不一致等情况。
对于类似这种复杂的 grain,微帧采用的方法是:将 grain 分解,针对难以用 Grain Synthesis 标准生成的 grain,直接依赖编码器进行编码;针对 Grain Synthesis 标准比较好生成的 grain,采用标准生成 grain,如高频的高斯噪声部分则可以采用 Grain Synthesis 来合成。
Preservation+Synthesis 的方式能解决 Grain Synthesis 的局限性,重现比较复杂 pattern 的 grain。同时,增加了 grain 合成的方式会比直接编码的方法,能保留更多的细小的 grain。
右:微帧微帧 Aurora-AV1 编码合成的 grain
版权声明: 本文为 InfoQ 作者【微帧Visionular】的原创文章。
原文链接:【http://xie.infoq.cn/article/e44ab7290e69b731cddbaab20】。文章转载请联系作者。
评论