Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一键慢镜头:视频插帧,让老电影“纵享丝滑”

一键慢镜头:视频插帧,让老电影“纵享丝滑”

作者头像
OpenMMLab 官方账号
发布于 2022-02-24 12:46:17
发布于 2022-02-24 12:46:17
2.2K00
代码可运行
举报
文章被收录于专栏:OpenMMLabOpenMMLab
运行总次数:0
代码可运行

MMEditing 是面向底层视觉任务的工具包,属于 OpenMMLab 开源算法体系。近期,我们在 MMEditing 中拓展了一个新的方向:视频插帧。本文将简要介绍视频插帧的技术原理,并带大家使用 MMEditing 实现一个视频插帧的 Demo。

难度:入门

高清与流畅缺一不可

经过社区开发者的不懈努力,MMEditing 已经支持了大量先进的超分辨率模型,可以将视频和图像从低分辨率无损放大到高分辨率,解决了观众对超清画质的追求经典电影欠佳的画质之间的矛盾。

然而这还不够,影响观看体验的不仅仅是画质,还有流畅度,否则。。

技术层面上,画质对应分辨率,而流畅度则对应帧率。 视频是连续播放的图像序列,帧率则表示图像序列的播放速度。帧率通常以 FPS(Frames per second),即每秒帧数为单位,帧率越高,视频的流畅度越高,观感体验越好。在知乎上,相关的讨论也层出不穷。 现如今,主流视频平台上 30 FPS、60 FPS 的视频随处可见,部分平台已支持 120 FPS 的视频。但受限于早期摄影技术以及互联网有限传输带宽,许多经典影视作品只有 24 FPS 甚至 15 FPS 的帧率,让我们在回味经典时不免有些小遗憾。而视频插帧技术可以提高低帧率视频的流畅度,让经典重现精彩。

什么是视频插帧

视频插帧旨在提高视频的帧率和流畅度,让视频看起来更加“丝滑”。 提升帧率似乎并不困难,只需要在相邻的视频帧之间插入一个新的视频帧,视频的帧率就可以提高一倍。但问题是,这一帧图像的内容应该是什么样的? 假设当前帧为

,下一帧为

,中间帧为

,三者均为

的三维数组。 我们可以令

,但这样只是形式上提高了帧率,视频流畅度没有得到改善。 我们也可以令

,其中

,即通过像素加权平均产生模糊的中间帧,从而起到一定的过渡效果。但这种方法会降低单帧图像的质量,产生虚影。如下图所示,第1、5、8帧是清晰的,而其余中间帧都包含虚影。

而最优方案,则是根据视频中物体运动状态,估计出一个清晰的中间帧,如下图所示。但这个方法有一定难度,因为这个理想的中间帧并不存在于原视频中,也不能通过简单的像素平均从相邻帧获得。因此,视频插帧与图像超分辨率类似,都需要解决“无中生有”的问题。

图片出处:https://commons.wikimedia.org/wiki/File:Motion_interpolation_example.jpg深度学习出现之前,视频插帧的主流技术大多基于光流。简单来说,我们通过光流估计算法,得到当前帧

和下一帧

之间的运动矢量场

,再通过图像扭曲(Image wrapping)技术,用一半矢量场

对图像

做扭曲,就可以得到中间帧

,如下示意图所示:

这种方法依赖光流的估计,而传统的光流估计算法通常速度较慢,精度也较低。

插播一条广告:OpenMMLab 开源算法体系中的 MMFlow 是首个光流算法的统一框架,支持多种基于深度学习的光流算法。

深度学习时代的视频插帧

随着深度学习技术的出现,光流估计、视频插帧技术也得到了发展。目前,基于深度学习的视频插帧算法可分为以下几类:

  • 基于 流 的算法,包括光流、路径选择、运动补偿
  • 基于 CNN 的算法,包括一般 CNN 算法、基于核的算法、基于 GAN 的算法
  • 基于相位的算法
  • 复合多种方案的算法

各类算法各有优劣,目前 MMEditing 已支持的 CAIN 算法属于基于 CNN 的算法,下面的视频就是使用 MMEditing 支持的 CAIN 算法进行两次插帧,将帧率从 24 FPS 提高到 96 FPS 的效果。为了凸显差异,我们将视频慢放,可明显看出插帧处理的效果。 (视频可见原文链接)

Demo 实现

目前 MMEditing 已支持 CAIN 算法,接下来将详细介绍其调用方法。

安装 MMEditing

准备环境

  • Linux / Windows / macOS
  • 如需使用 NVIDIA GPU 请确保驱动版本不低于 418

a. 创建 Python 环境 我们推荐使用 Conda 创建 Python 环境,以 Python 3.8 为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n mmedit python=3.8 -y 
conda activate mmedit 

b. 安装 PyTorch 和 MMCV MMEditing 基于 PyTorch 和 MMCV,支持 PyTorch 1.5 以上的所有版本,此处以 PyTorch 1.7 为例。

例:安装 CUDA 版本的 PyTorch 和 MMCV

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install pytorch==1.7.1 torchvision cudatoolkit=10.1 -c pytorch 
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7/index.html "opencv-python<=4.5.4.60" 

例:安装 CPU 版本的 PyTorch 和 MMCV

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install pytorch==1.7.1 torchvision cudatoolkit=10.1 -c pytorch 
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7/index.html "opencv-python<=4.5.4.60" 

您可以根据需要调整 PyTorch 的版本,但需要根据 PyTorch 的版本调整 MMCV 的下载路径,具体请参考 安装 MMCV — mmcv 1.4.5 文档 针对 macOS 平台,您需要从源码编译 MMCV,详见 从源码编译 MMCV — mmcv 1.4.5 文档

c. 克隆 MMEditing 代码仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/open-mmlab/mmediting.git 
cd mmediting 

d. 安装 MMEditing 使用 pip 安装相关依赖,并从源码安装 MMEditing

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -r requirements.txt 
pip install -v -e .  # or "python setup.py develop" 

e. 验证安装 安装完成后,可以切换到 /home 目录,并尝试在 python 中导入 mmedit,导入成功则证明安装成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd ~ 
$ python 
 
>>> import mmedit 
>>> mmedit.__version__ 
'0.12.0' 

调用插帧程序

我们提供了一个插帧的小 demo 方便大家测试视频插帧的效果,调用命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo/video_interpolation_demo.py \ 
    configs/video_interpolators/cain/cain_b5_320k_vimeo-triplet.py \ 
    https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_320k_vimeo-triple_20220117-647f3de2.pth \ 
    ${INPUT_PATH} \ 
    ${OUTPUT_PATH} \ 
    [--fps_multiplier ${FPS_MULTIPLIER}] \ 
    [--fps ${FPS}] 

其中,INPUT_PATH 是输入视频的路径,OUTPUT_PATH 是输出视频的路径。路径可以是一个视频文件路径,也可以是包含若干图像的文件夹(图像排列需要有序)。 输出视频的帧率(FPS)可由 --fps 参数指定,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo/video_interpolation_demo.py \ 
    configs/video_interpolators/cain/cain_b5_320k_vimeo-triplet.py \ 
    https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_320k_vimeo-triple_20220117-647f3de2.pth \ 
    input.mp4 \ 
    output.mp4 \ 
    --fps 60 

也可根据 --fps_multiplier 在输入视频帧率的基础上倍增(前提是 INPUT_PATH 为视频文件路径)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo/video_interpolation_demo.py \ 
    configs/video_interpolators/cain/cain_b5_320k_vimeo-triplet.py \ 
    https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_320k_vimeo-triple_20220117-647f3de2.pth \ 
    input.mp4 \ 
    output.mp4 \ 
    --fps_multiplier 2.0 

可使用重复调用插帧程序,以获得更高帧率的视频:

  • 处理 1 次,帧率 x2
  • 处理 2 次,帧率 x4
  • ……

视频后处理

下面这段代码可以将两个视频左右拼接,并放慢速度,得到文章开头的对比视频。代码行数虽然较多,但逻辑并不复杂,仅调用 MMCV 和 OpenCV 视频相关的功能,限于篇幅我们这里就不详细介绍啦。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2 
import mmcv 
import numpy as np 
 
 
def vfi_cain_demo(ori_path, vfi_path, result_path, slow=1.0): 
    """Compare ori video and interpolated video. 
 
    Args: 
        ori_path (str): Path of original video. 
        vfi_path (str): Path of interpolated video. 
        result_path (str): Path of the result video. 
        slow (float): Slow factor. 
    """ 
 
    print(f'load the original videos: {vfi_path}') 
    ori_reader = mmcv.VideoReader(ori_path) 
    ori_fps = ori_reader.fps 
    ori_images = [] 
    for img in ori_reader: 
        ori_images.append(img) 
 
    print(f'load the interpolated video: {vfi_path}') 
    vfi_reader = mmcv.VideoReader(vfi_path) 
    vfi_fps = vfi_reader.fps 
    vfi_images = [] 
    for img in vfi_reader: 
        vfi_images.append(img) 
 
    print(f'merge videos and save to {result_path}') 
    h, w = vfi_images[0].shape[:2] 
    rate = round(len(vfi_images) / len(ori_images)) 
    fourcc = cv2.VideoWriter_fourcc(*'mp4v') 
    video_writer = cv2.VideoWriter(result_path, fourcc, vfi_fps/slow, (w, h)) 
    for i in range(len(vfi_images)): 
        image = np.zeros_like(vfi_images[i]) 
        print(i, rate, i//rate) 
        image[:, :w//2] = ori_images[i//rate][:, :w//2] 
        image[:, w//2:] = vfi_images[i][:, w//2:] 
        image[:, w//2:w//2+1] = 0 
        video_writer.write(image) 
    cv2.destroyAllWindows() 

拷贝并调用以上函数即可获得对比视频。

欢迎关注

如果大家对视频插帧、底层视觉和 MMEditing 感兴趣,可以关注我们的代码库:

https://github.com/open-mmlab/mmediting​github.com/open-mmlab/mmediting

点亮右上角的小星星。

相信一致和模块化的设计可以减少大家复现各个算法的难度,提升使用体验。 未来我们会添加更多视频插帧算法,并发布插帧算法的系列教程。小伙伴们有什么想法可以积极留言,提issue。MMEditing 是共创共享的非盈利项目,我们也欢迎大家参与建设,多提 PR。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一键慢镜头:视频插帧,让老电影“纵享丝滑”
MMEditing 是面向底层视觉任务的工具包,属于 OpenMMLab 开源算法体系。近期,我们在 MMEditing 中拓展了一个新的方向:视频插帧。本文将简要介绍视频插帧的技术原理,并带大家使用 MMEditing 实现一个视频插帧的 Demo。
OpenMMLab 官方账号
2022/04/08
1.3K0
一键慢镜头:视频插帧,让老电影“纵享丝滑”
让电影动漫统统变丝滑,480帧也毫无卡顿,交大博士生开源插帧软件DAIN
视频的帧率已经远远赶不上人民群众的需求了,所以有不少人都在研究如何把普通视频变成高帧率视频。
量子位
2020/02/21
1.1K0
改善伪影,这种插帧新方法让视频更丝滑,网友:我的PS 2能玩4K游戏了吗?
视频帧插值(VFI)是当前视频处理中的一种常见方法,广泛用于提高帧速率和增强视觉质量,它支持各种应用,例如慢动作合成、视频压缩和用于动态视频去模糊的训练数据生成。此外,在实时速度下,高分辨率视频(如 720p、1080p)上,视频帧插值算法还有许多潜在的应用。
机器之心
2020/11/20
1.4K0
改善伪影,这种插帧新方法让视频更丝滑,网友:我的PS 2能玩4K游戏了吗?
纹理感知视频插帧
Danier 首先介绍了项目的背景。视频插帧(VFI) 任务,即在视频中给定两个连续的帧 I0 和 I1,以生成不存在的中间帧 It,其中 t 通常是 0.5,用于两倍时域上采样。
用户1324186
2022/02/18
8430
纹理感知视频插帧
技术解码 | 腾讯云视频插帧技术
本期的技术解码 为大家带来腾讯云视频插帧技术的详细解析 随着信息科技与互联网技术的高速发展,视频已逐渐成为人们获取信息的重要来源。为了提升人眼的视觉主观感受,各大厂商的视频采集和播放设备的性能也得到了飞速发展。视频的帧率作为视频质量的一个重要指标,对人眼的主观感受也影响良多。但是高帧率的视频对网络传输带宽、传输设备等的要求也随之增高。因此,为了降低成本,实现对低帧率(Low Frame Rate)的视频适时进行帧率增强是目前视频行业研究的热点问题。另外,针对现存低帧率,网络传输丢帧的视频做插帧增
腾讯云音视频
2021/04/15
2.6K0
NeurIPS 2019 Spotlight | 超清还不够,商汤插帧算法让视频顺滑如丝
分辨率从 480p,720p,再到 1080p,现在有了 2K、4K;帧率也从 25FPS 到 60FPS,再到 240FPS,960FPS 甚至更高……
机器之心
2019/12/24
9530
零基础 Pytorch 入门超分辨率
超分辨率(Super-Resolution, SR)重建技术的基本思想是釆用信号处理的方法,在改善低分辨率(Low Resolution, LR)图像质量的同时,重建成像系统截止频率之外的信息,从而在不改变硬件设备的前提下,获取高分辨率(High Resolution, HR)的图像。
OpenMMLab 官方账号
2022/01/18
1K0
零基础 Pytorch 入门超分辨率
叮咚~你订阅的 OpenMMLab 2 月月刊已送达(文末福利)
下面我们继续了解下 2 月 OpenMMLab 各个算法库都有哪些亮点功能发布吧~
OpenMMLab 官方账号
2022/04/09
8830
叮咚~你订阅的 OpenMMLab 2 月月刊已送达(文末福利)
丝滑!CVPR 2021 视频插帧论文+开源代码汇总
全世界每天更新的成果太多了,我们没有办法仔细研读每一篇文章,而从摘要入手,获取文章研究的主要内容和成果,与自己目前的需求对比,是否吻合,再决定是否详细研读,无疑能节省大量的时间。
AI算法与图像处理
2021/05/07
2.4K0
CVPR2024 | 视频插帧视觉效果新突破!上海交大提出PerVFI,视频插帧新范式
分享一篇来自CVPR2024的视频插帧工作《Perception-Oriented Video Frame Interpolation via Asymmetric Blending》。
CV君
2024/06/17
1.4K0
CVPR2024 | 视频插帧视觉效果新突破!上海交大提出PerVFI,视频插帧新范式
AI黑科技!从此只看高清视频
最近发现一个特强的视频超分算法——BasicVSR,在真实数据集中,实现了前所未有的视觉重建效果,最近它还拿下了超分比赛NTIRE 2021三冠一亚的优异成绩,登上了CVPR 2022。
Ai学习的老章
2022/04/11
1.7K0
AI黑科技!从此只看高清视频
视频帧率和刷新率,是一回事吗?
视频插帧,指通过在原始视频的每两帧画面中增加一帧或多帧,缩短每帧之间的显示时间,修正人眼视觉暂留形成的错觉,从而提升视频的流畅度。帧是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。我们常说的帧率,简单来说,就是1秒时间内传输的图片的帧数,通常用FPS表示,帧率越高,画面越流畅。
微帧Visionular
2024/11/12
3130
视频帧率和刷新率,是一回事吗?
Super SloMo:用神经网络脑补超级慢动作
内容提要:为了解决视频画面卡顿、不够顺畅等问题,视频插帧大法应运而生。英伟达提出的 Super SloMo 方法在众多方法中一骑绝尘,对于一段普通设备录制的视频,能「脑补」出高帧率慢动作视频。有了这一神器,视频制作的门槛得到进一步降低。
HyperAI超神经
2021/03/25
1.4K0
Super SloMo:用神经网络脑补超级慢动作
【趣味实践】自动补帧算法——RIFE的使用
视频制作者往往对于高帧率的视频画面有所追求,因为更高帧率的画面意味着在相同时间内能够播放更多帧画面,意味着视频观感更为流畅。 本篇就来尝试一个开源的自动补帧算法——RIFE。
zstar
2022/09/29
3K0
【趣味实践】自动补帧算法——RIFE的使用
基于运动的视频插帧技术
Kokaram首先对视频插帧技术的背景、目标进行了介绍,并以单帧插值为例解释了帧插值实际上就是运动插值的过程。同时对近年出现的基于卷积神经网络的方法进行了分析,事实上使用CNN获取图像光流同样是为运动插值过程服务。
用户1324186
2020/01/14
2.1K0
【竞赛小汇】NTIRE2021 视频超分竞赛
NTIRE2021的视频超分竞赛仍然延续NTIRE2020以及AIM2019/20采用了REDS数据集,它的训练集、测试集以及验证机分别包含24000,3000,3000高清(
AIWalker
2021/05/24
1.2K0
【竞赛小汇】NTIRE2021 视频超分竞赛
影史第一片《火车进站》秒变 4K 高清,AI 预测+插值,黑白也能变“彩电”
《火车进站》是人类历史上的第一部电影,由路易·卢米埃和奥古斯特·卢米埃于 1895 年拍摄于法国一沿海城市,整部电影只有45秒。
AI研习社
2020/02/21
1.6K0
MM2023 | Reparo:低速网络中通过智能帧恢复的QoE感知实时视频流传输
实时视频流传输中,从上传客户端到媒体服务器的上行带宽通常是不足的。因此,上传客户端可能需要以更低的比特率对高质量的视频帧进行编码,从而降低用户的QoE。为解决这个问题,已经有一些方案被提出:
用户1324186
2024/04/18
3130
MM2023 | Reparo:低速网络中通过智能帧恢复的QoE感知实时视频流传输
三个开源工具搞定 100 年前的老视频复原!就是这么强大!
点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 作者 | OSC神秘老司机 来源 | https://www.oschina.net/news/115801/use-ai-to-recover-images 近日,一段拍摄于 100 年前的老北京城影像被央视转发,在微博上火了。据了解,该视频出自一位 B 站的 UP 主大谷的游戏创作小屋。作者大谷利用 AI 技术,把一段拍摄于 1920 年的北京城黑白视频,渲染成了高清流畅的彩色视频,配以颇具地方特色的 BGM,还原了
程序猿DD
2023/04/17
1.9K0
三个开源工具搞定 100 年前的老视频复原!就是这么强大!
迈克尔杰克逊的4K高清修复视频技术解码
近日网上的一个迈克尔杰克逊代表作《Smooth Criminal》MV官方高清修复版,的视频赚足了大家的眼球。这次的高清修复不仅分辨率达到了4K,原本的25帧录像也提升到了60帧。逼真得甚至可以看清MJ领带上得问题,完全就像是使用现代设备拍摄的一样。
代码医生工作室
2020/06/17
3K0
迈克尔杰克逊的4K高清修复视频技术解码
推荐阅读
相关推荐
一键慢镜头:视频插帧,让老电影“纵享丝滑”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档