动手点关注 干货不迷路 👆
暑假期间小跳出去旅游,沿途用手机记录下了许多美丽景色。回家路上,小跳打开手机想用慢倍速去细细品味自己拍摄的视频,发现视频强烈的卡顿感让其“黯然失色”。失望的小跳想起前段时间在抖音上看到的剪映 APP 丝滑慢放教程,抱着试一试的态度打开了剪映,几番操作下来,视频发生了质的改变,像是回到了拍摄的那瞬间,把当下没被记录的片段统统还原出来,卡顿感“一键”全无。是什么技术让视频还原出当下的瞬间,让卡顿视频变得如此丝滑?本文对字节跳动智能创作团队自研视频插帧技术进行了深度解剖,为大家找到了丝滑视频的秘诀。
视频帧率(单位:fps)指的是每秒播放的画面数。在一定范围内,帧率越高,视频观感越流畅。早期电影的帧率在 20~60 fps,现代电视广泛使用的帧率标准是 25 fps 和 30 fps。
随着技术的发展,电视、手机等播放设备能够支持播放更高帧率的视频。如今用户已经不满足陈旧的 20~30 fps 视频标准。由于网络传输、拍摄丢帧、后期编辑等原因,线上甚至存在不少实际帧率低于 15 fps 的视频。为了消除低帧率视频的卡顿感,需要使用插帧技术来提升视频的帧率,从而给观众带来丝滑流畅的播放体验。
插帧算法通过计算原视频的帧间运动关系,在两帧之间插入符合运动关系的中间帧,从而提升视频的帧率。
两帧之间插入新的中间帧
针对不同的使用场景、不同的后端设备,算法方案也有所不同。当前业界常用的解决方案有:
帧融合或重复帧
Adobe Premiere,Final Cut Pro 等专业剪辑软件中也集成了该方法,作为插帧的一个可选方法
传统 MEMC 方案
MEMC (Motion Estimation, Motion Compensation) 是一类运动补偿算法。此类算法会对相邻两帧进行运动估计,补偿出原视频中本身没有的画面,达到提升视频帧率的目的。MEMC 所生成的中间帧符合原视频的平滑运动关系,因此可以使视频更流畅。但对于运动复杂的场景,很难在有限的算力条件下得到精确的结果。
运动补偿示意
深度学习方案
基于深度学习的方案,通常将原视频相邻两帧作为神经网络的输入,结合光流神经网络、遮挡估计等技术,来预测两帧之间的中间帧。深度学习方法可以提取图像语义信息,因此往往在遮挡估计等方面表现更优。但深度学习方法往往计算量大,很难在移动设备上应用。
目前基于深度学习的光流算法较为成熟,可以计算两帧之间的密集光流。用了光流信息,可以将前后两帧图像 Warp 到中间时刻,从而合成中间帧。
Nvidia SuperSlomo 提供一个在 Nvidia GPU 上运行的深度学习插帧算法,但对显卡性能有较高的要求。
图源 Nvidia SuperSlomo 论文
视频插帧多端解决方案
服务端
服务端拥有 GPU 算力,因此适合采用深度学习方案来获得更平滑的插帧效果。自研服务端插帧算法为抖音业务提供了云端帧率提升转码能力,以改进低帧率短视频的观看体验。日后也会以云服务的形式,逐步对更多业务线、ToB 客户开放。
移动端
如果能直接在移动设备上使用插帧算法,那么算法能力可以触达更多的视频创作者,在视频生产环节即可提升视频流畅度。针对移动端使用场景,我们研发了基于 MEMC 的插帧算法,并针对 MEMC 算法存在的问题做了细致的优化。
PC 端
专业视频创作者往往使用桌面端专业剪辑软件进行视频创作。自研的视频插帧解决方案也为 PC 端的剪映专业版提供了插帧能力。对于配备有独立显卡的 PC 设备,可采用深度学习方案来保证更好的插帧效果;其他 PC 设备可复用移动端的核心算法,来保证算法运行的性能。
神经网络模型压缩
插帧网络结构示意
内容自适应的插帧可行性分析
并不是所有的视频的内容都适合使用插帧,对于相邻帧变化剧烈的场景(例如转场、剧烈运动),插帧算法无法生成一个合理的结果,甚至可能引入严重伪影。因此我们对视频内容进行插帧可行性判断,根据图像特征、运动幅度等信息,自适应地决定是否为当前帧进行插帧。
更高效的 MEMC 策略
块匹配是一个基于搜索的运动估计算法,需要在前后帧的一定领域内搜索最匹配的图像块。对于运动复杂的视频,这种方法往往需要较大的搜索空间,才能搜索出最优运动向量。这给移动端应用带来了算法瓶颈。我们研发了一套光流指导的块搜索策略,来解决块匹配的性能和效果的问题。
在金字塔最大尺度上做块搜索
无论是多尺度快速光流,还是光流指导的块搜索,整个计算过程都可并行计算。使得算法在移动设备上,也能高效运行。
端上异构计算
在端上使用了 CPU+GPU 的计算方式,将计算密集型任务分配给 GPU,使用 opencl 或 metal 实现算子,并根据平台做特定的性能调优;而计算稀疏型任务则在 CPU 上完成计算,并使用多线程等操作进行性能优化。通过异构计算,在端上可以实现 5 倍左右的加速比,性能达到落地需求。
端上算法分级策略
抖音、剪映等 app 覆盖用户量级大,用户机型多样。为了保证算法的机型覆盖率,让不同机型用户获得最佳体验,我们采用了端上算法分级的策略。根据用户机型的计算能力,端上插帧算法分为高、中、低三个档位,高档位优先保证效果,适合高端机型;低档位优先保证性能,适合低端机型。
剪映变速-智能补帧
剪映智能补帧入口
自动变速创意玩法
帧率提升
王家卫电影风格
辅助其他视频算法节省算力
低功耗实时视频插帧
结合厂商能力,在算法与工程上极致优化插帧性能。服务端只需下发更低帧率的低码率视频,使用高性能、低功耗的插帧算法,端上进行实时插帧还原高帧率视频。不仅保证用户体验,还能节省带宽成本。
结合编解码器进行智能补帧
H.264 编码器内部会进行运动估计,通过编码运动补偿残差来进行帧间编码。新一代 H.266 编码器在运动估计准确性、运动补偿准确性上进行了更深入的优化。将编解码器与插帧进行结合,运动估计信息能够被插帧算法复用,插帧算法也能够进一步优化帧间编码的压缩率。
[1] Jiang, Huaizu, et al. "Super slomo: High quality estimation of multiple intermediate frames for video interpolation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
[2] Niklaus S, Liu F. Context-aware synthesis for video frame interpolation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 1701-1710.
关于我们
火山引擎联系方式
🙋♂️ 点击“阅读原文“,获取最新招聘资讯!