快手Film Grain编码技术:胶片质感跃然眼前

在电影的黄金时代,胶片作为一种独特的载体,散发着无可比拟的魅力。胶片颗粒(Film Grain)的存在赋予画面呼吸感,以其独特的质感和纹理,为影像注入了更多的情感,带给观众极具艺术的视觉感受。

胶片颗粒是由胶片成像引入的一种噪声,如今,它不再局限于电影艺术,在视频中加入胶片颗粒的做法已被广泛应用。

如果直接对无规则的细小胶片颗粒进行编码,就需要降低量化步长,消耗更多的比特数,极大增加了带宽成本,同时也会影响运动估计的准确性。为此,主流编码标准如AV1、VVC等都开发了Film Grain编码工具,提供高效的胶片颗粒编码手段。

行业内,Film Grain编码工具普遍在编码前去除视频的高频噪声,利用原始视频和去除噪声的视频对高频噪声进行建模,将模型参数写入码流,解码端还原高频噪声。这种方式降低了编码复杂度,还原了视频的颗粒质感,同时能掩盖编码引入的伪影,在较低的码率下获得更好的主观质量。但在部分标准中,支持Film Grain语法的解析属于可选功能,因此各家解码器对该功能的支持程度并不相同。

快手音视频技术团队基于自研芯片StreamLake-200(SL200芯片)推出了Film Grain编码技术,在后处理阶段实现胶片颗粒的生成,该过程独立于解码,使Film Grain技术在客户端的应用成为可能,也为在后处理阶段进一步提升视频质量提供了技术参考。目前,该项技术已经在快手App落地,为用户带来更为细腻的视觉体验。

快手Film Grain编码技术在落地过程中,主要分为如下两部分:编码端基于SL200芯片的denoise和Film Grain analysis,以及客户端播放器Film Grain synthesis。

编码端:

基于SL200芯片的Film Grain analysis

编码端建模流程主要包括:

  1. 对去噪图像进行边缘和复杂纹理的分析,生成边缘图像;
  2. 对原视频和去噪视频做差获取噪声视频;
  3. 噪声模型的参数估计。
快手Film Grain编码技术:胶片质感跃然眼前
编码端建模的流程图:
输入视频共两个,原视频(source video)和去噪视频(denoised video),其中去噪视频是基于SL200芯片的去噪模块产生的。

生成边缘图像

噪声图像中包含真实的噪声和图像边缘及复杂的纹理信息,目标是对视频中的噪声建模,因此需要对去噪视频进行边缘检测,从而在噪声分析时规避高频图像边缘和复杂纹理区域的干扰。

边缘图像的生成分别在原始分辨率、下采样2倍分辨率和下采样4倍分辨率三个图像尺度上执行边缘检测,在每个尺度上都使用Canny边缘检测器,再进行形态学扩张来确定边缘;然后将不同尺度上的边缘图像上采样到原始分辨率进行合并;应用形态学膨胀和形态学腐蚀来获得最终的边缘图像。边缘图像输出给噪声分析估计模块,指导其在图像的平坦区域提取噪声,进而分析并构建噪声模型。

噪声模型的参数估计

噪声的截止频率是最重要的参数之一,噪声被近似建模为由若干低频基图像叠加而来的图像,其中基图像的最大频率就被称为截止频率(cut-off frequency),分为横向截止频率和纵向截止频率两种。

截止频率的估计方法如下,取所有位于平坦区域的不重叠64×64像素块(Film Grain block)做DCT变换,然后取 DCT 不同频率系数的平均值,再分别求横向频率和纵向频率上的DCT系数均值(average vectors)。将频率值作为自变量,分别以DCT横向频率系数均值和纵向频率系数均值为因变量,构建曲线;而所有DCT系数的平均值作为阈值,曲线与阈值的交点横坐标即被定义为对应方向上的截止频率(下图所示的X1和X2)。在解码端,高于截止频率的高频信息将被忽略,因此该模型仅是对原始噪声的一种近似。

快手Film Grain编码技术:胶片质感跃然眼前

除了截止频率信息外,噪声强度是另一个用来描述噪声特征的参数。噪声强度与原始视频的亮度有关,相关的参数分别为强度间隔数、强度间隔上下界,即该模型将0-255的像素亮度范围划分为(num_intensity_intervals_minus1+1)个强度间隔,每个强度间隔用上下界参数标识,并且具有唯一的缩放因子表示噪声强度。

噪声强度的估计采用了计算去噪图像中平坦区域内每个块的平均亮度值(average intensity value)和噪声图像中对应块的方差(scaling factor),以平均亮度值为函数自变量,以噪声方差为函数因变量,用三阶多项式回归拟合曲线,最后使用Lloyd max非均匀量化对拟合曲线进行量化,产生如下图所示的分段函数,该分段函数就是上述参数值设定的依据。

快手Film Grain编码技术:胶片质感跃然眼前

客户端:

播放器Film Grain synthesis

客户端胶片颗粒重构过程

在用户拉取携带胶片颗粒的码流后,客户端上屏前需要完成胶片颗粒的重构,其过程如下:

首先,预处理生成胶片颗粒数据库(GrainDataBase)。该数据库由13*13个64*64大小的像素块组成,每个像素块都对应了一个不同的截止频率组合,用于模拟具有不同截止频率的噪声图像(Grain Block)。像素块矩阵的生成过程是首先建立一个全零的64×64矩阵,然后根据横向和纵向截止频率,用随机数填充矩阵左上角的低频区域,最后对该数组使用IDCT变换,即得到此截止频率下的像素块矩阵;

其次,生成噪声图像,以分辨率为1080P的图像YUV数据为例,取其中一分量图像划分为若干个8×8的块:

  • 计算每个8×8像素块的均值,根据SEI信息,确定匹配的像素强度区间、对应的截止频率、缩放因子(scaling factor);
  • 取得的截止频率作为索引,从胶片颗粒数据库中选择对应的噪声图像(Grain Block),再从Grain Block中随机选择一个8×8块,根据缩放因子(scaling factor)计算噪点图(Grain Image)。所有的8×8像素块均依此操作;
  • 由于是以8×8块为粒度进行处理的,块与块的边缘会有一定的割裂,需要再对上述噪点图进行去块操作得到最终噪点图(finalGrainImage);

最后,将噪点图和原图像进行融合。

快手Film Grain编码技术:胶片质感跃然眼前

Film Grain在播放器端中落地的难点

解决Android硬解与FilmGrain格式兼容

Android常用的硬解模式 MediaCodecSurface 默认输出RGB纹理,而Film Grain 需要在YUV空间处理,导致两者格式上不兼容。为解决兼容性问题,需调整Android解码输出模式为 MediaCodecByteBuffer(mccb)模式。但不同手机厂商对 mcbb 的兼容性不一致, 使用上会出现诸如系统崩溃、ByteBuffer stride 无法对齐等棘手问题。由于mcbb的兼容性问题,团队利用快手自研的机型画像平台,生成常用Android设备的解码器能力数据,如 mcbb 的解码速度、解码成功率等,分析数据,从而决定可开启的设备列表。

算法处理速度优化

使用汇编加速Film Grain算法中对像素的处理,提升了7倍,例如在荣耀20S手机上,单帧1080p Y分量Film Grain处理耗时从 10ms降低为1.5ms左右。

包体优化

胶片颗粒数据库(GrainDataBase)不作为先验知识预先写入代码文件,而是直接在实际处理过程中生成,避免占用过多包体空间;

Film Grain画质效果展示

在降低10%平均码率的情况下,胶片颗粒仍能很好地抑制光滑平面的块效应,同时恢复细节纹理信息,改善图像主观画质。以下是两组Film Grain效果对比:

案例1

快手Film Grain编码技术:胶片质感跃然眼前
源视频
快手Film Grain编码技术:胶片质感跃然眼前
添加胶片颗粒后的效果图

源视频上方和下方的平坦区域存在大面积的块效应,同时中指处有明显的条纹伪影;在添加胶片颗粒后,块效应和伪影被掩盖,画面更具质感。

目前,快手Film Grain编码技术已在快手App落地。随着用户对点播和直播场景体验需求的不断变化,快手音视频技术团队将持续探索,为画质体验提供卓越的技术支持。

*本文中涉及影视作品及图片截图仅作效果演示。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论