RIFE在Linux下好像并没有什么现成的方案,除了付费的SVP可以使用RIFE简单地实时补帧,现有的教程好像也很少,正好我最近配置好了RIFE,写一篇教程送给还在思考要怎么配置RIFE的各位。内容是根据个人经验所写,如果有什么地方错误,请指正,谢谢。
如果是N卡,那么在Linux上的RIFE性能是会有一定提升的,根据我的测试,RTX4060在windows下使用mpv_PlayKit最高只能运行RIFE4.25lite,而在linux下使用我的配置文件可以运行RIFE4.26,具体提升幅度,个人预估可能有25%。 而AMD显卡对比Windows则是会大幅下降性能,如果你的显卡低于RX7900GRE,那么在Linux上配置RIFE可能并不是那么的合适。 所以如果你的显卡是A卡,并且追求性能,那么可以去考虑windows平台下hooke007大佬的mpv_PlayKit。 具体原因根据我参考github资料,推测是因为hooke007大佬配置的DX API的RIFE是支持FP16的,而Linux是不支持DX的,但VK API的RIFE插件似乎目前并不支持FP16,所以Windows平台的RIFE性能是Linux平台RIFE的两倍多。 I卡我有一张A750但是没有进行配置和测试,具体怎么样配置各位可以去自行探索。
https://github.com/hooke007/mpv_PlayKit 我使用的是ArchLinux,其他Linux发行版的操作可能有所不同,但应该可以当作参考。
本教程只包含如何在Linux下配置RIFE,更多的其他的内容在本教程并不会看到。如果你想通过快捷键来控制RIFE的开启停止,又或者是修改mpv.conf来提升RIFE的性能,那么请参考其他的教程。
关于性能消耗,根据我的实测,可能并不严谨,但希望可以起到参考。
RTX4060 RIFE 4.26 24>48
RX7700XT RIFE 4.26 24>6~12
RX7900XT RIFE4.26 24>40~48
我目前所了解的使用RIFE的方法主要是通过VapourSynth插件实现,接下来的方法也都围绕VapourSynth插件。
如果你的显卡是N卡20系及以上,可以使用"vs-mlrt"。
如果你的显卡是I卡A380及以上,也可以考虑使用"vs-mlrt",并安装OpenVINO及相关依赖。
https://github.com/AmusementClub/vs-mlrt 如果你的显卡是AMD显卡,可以使用"VapourSynth-RIFE-ncnn-Vulkan"。
"vs-mlrt"实际上也支持AMD的"MIGX",但是我在github上提过一个issue,开发者表示"MIGX"的目前并不支持"RIFE"。
https://github.com/styler00dollar/VapourSynth-RIFE-ncnn-Vulkan 1、安装所需软件
安装paru
sudo pacman -S paru 安装MPV(系统更新常常会导致依赖变动,若按教教程配置后无效,请尝试mpv-full、mpv-full-git、mpv-full-build-git)
paru -S mpv 安装TensorRT
paru -S tensorrt 安装VS滤镜
paru -S vapoursynth 下载VS插件
paru -S vapoursynth-plugin-mlrt-trt-runtime-git 安装RIFE模型包
paru -S vapoursynth-plugin-mlrt-ext-models-rife 2、编辑配置文件
编辑RIFE的VS滤镜
sudo nano ~/.config/mpv/vs/rife.vpy 输入以下内容
import vapoursynth as vs
from vapoursynth import core
import vsmlrt
clip = video_in
#向上取整:1920*1080>===>1920*1088
w, h = clip.width, clip.height
w = ((w + 63) // 64) * 64
h = ((h + 63) // 64) * 64
#向下取整:1920*1080>===>1920*1024
#w, h = clip.width, clip.height
#w = (w // 64) * 64
#h = (h // 64) * 64
clip = core.resize.Bicubic(
clip,
width=w,
height=h,
format=vs.RGBS,
matrix_in_s="709"
)
clip = vsmlrt.RIFE(
clip,
model=46,
multi=2,
backend=vsmlrt.Backend.TRT(
device_id=0,
workspace=None,
engine_folder="/home/username/.cache/vsmlrt",
num_streams=4,
max_aux_streams=2,
fp16=True,
force_fp16=True,
use_cuda_graph=True,
#use_cublas=True,
#use_cudnn=True,
#use_edge_mask_convolutions=True,
#use_jit_convolutions=True,
#static_shape=True,
#heuristic=True,
#short_path=True,
#builder_optimization_level=5,
#tiling_optimization_level=2,
)
)
clip = core.resize.Bicubic(
clip,
format=vs.YUV420P10,
matrix_s="709"
)
clip.set_output()
#模型版本
#补帧倍速
#使用的后端
#使用的显卡序号:0=第一张显卡
#分配显存的大小:None=自动
#编译完成的模型的保存路径
#显卡线程数:1~8
#最大辅助流数:1~8
#是否使用fp16加速:提升性能但会轻微降低质量
#强制使用fp16精度
#是否使用cuda加速
#是否使用cuBLAS库:优化矩阵运算
#是否使用cuDNN库:优化卷积神经网络
#是否使用边缘掩码卷积:降低性能但减少模糊和重影
#是否使用即时编译卷积:提升性能但会增加编译时间
#是否使用静态形状:提升性能但会增加编译时间
#是否使用启发式算法:TRT自动选择最佳算法
#是否使用短路径优化:减少重复计算
#构建器优化等级:0~5
#平铺优化等级:0~2
#查看模型列表
#python3 -c "import sys;sys.path.append('/usr/lib/vapoursynth');import vsmlrt;[print(f'{m.value:>4} = {m.name}') for m in vsmlrt.RIFEModel]"
#查看后端列表
#python3 -c "import sys; sys.path.append('/usr/lib/vapoursynth'); import vsmlrt; print(*[b for b in dir(vsmlrt.Backend) if not b.startswith('_')], sep='\n')" 编辑mpv.conf
sudo nano ~/.config/mpv/mpv.conf 输入以下内容
[rife]
profile-cond=height <= 1080 and container_fps <= 24
vf=vapoursynth="~~/vs/rife.vpy"
correct-pts=yes
hr-seek=yes
hr-seek-framedrop=no
#在满足"高度<=1080"并且"帧率<=24"的情况下自动开启
#加载vf滤镜脚本
#是否修正时间戳
#是否开启高精度跳转
#是否在跳转时丢帧 VapourSynth-RIFE-ncnn-Vulkan(A卡参照此处)
1、安装所需软件
安装paru
sudo pacman -S paru 安装MPV(系统更新常常会导致依赖变动,若按教教程配置后无效,请尝试mpv-full、mpv-full-git、mpv-full-build-git)
paru -S mpv 安装VS滤镜
paru -S vapoursynth 下载VS插件
paru -S vapoursynth-plugin-rife-ncnn-vulkan 2、编辑配置文件
编辑RIFE的VS滤镜
sudo nano ~/.config/mpv/vs/rife.vpy 输入以下内容
import vapoursynth as vs
from vapoursynth import core
clip = video_in
#向上取整:1920*1080>===>1920*1088
w, h = clip.width, clip.height
w = ((w + 63) // 64) * 64
h = ((h + 63) // 64) * 64
#向下取整:1920*1080>===>1920*1024
#w, h = clip.width, clip.height
#w = (w // 64) * 64
#h = (h // 64) * 64
clip = core.resize.Bicubic(
clip,
width=w,
height=h,
format=vs.RGBS,
matrix_in_s="709"
)
clip = core.rife.RIFE(
clip,
model=23,
factor_num=2,
gpu_id=0,
gpu_thread=4,
tta=False,
uhd=False,
sc=False,
skip=False,
skip_threshold=60
)
clip = core.resize.Bicubic(clip, format=vs.YUV420P10, matrix_s="709")
clip.set_output()
#模型版本
#补帧倍速
#使用的显卡序号:0=第一张显卡
#显卡线程数:1~8
#是否使用tta:对每帧进行8次不同变换处理,然后取平均值
#是否使用场景检测
#是否跳过插入静态帧(需要 VMAF 插件)
#跳过插入静态帧的检测阈值:默认60
#查看插件github页面
#https://github.com/styler00dollar/VapourSynth-RIFE-ncnn-Vulkan 编辑mpv.conf
sudo nano ~/.config/mpv/mpv.conf 输入以下内容
[rife]
profile-cond=height <= 1080 and container_fps <= 24
vf=vapoursynth="~~/vs/rife.vpy"
correct-pts=yes
hr-seek=yes
hr-seek-framedrop=no
#在满足"高度<=1080"并且"帧率<=24"的情况下自动开启
#加载vf滤镜脚本
#是否修正时间戳
#是否开启高精度跳转
#是否在跳转时丢帧 
无头骑士异闻录

恶魔之谜

碧蓝档案