前言

以前一直用Potplayer做电脑播放器的,配合SVP进行补帧,看电影很舒服。后来下了点动漫看,用SVP的效果也还行,但是放大后画面会显得模糊。搜了一下,使用VS滤镜可以超分放大,但还需要自己配置。有没有方便点的项目呢?在GitHub搜了一下,还真有做好的懒人包:hooke007/MPV_lazy。用了一下,真的是超级方便,包含了常见的放大滤镜、补帧滤镜等,效果甚至比SVP更好。

自用配置

字幕调整相关快捷键

对不同比例的视频,可能上下黑边的宽度不同。可以对字幕位置/字体大小调整,使其不遮挡画面。同样写入portable_config/input_uosc.conf

1
2
3
4
5
6
;                 add sub-pos -0.5
: add sub-pos +0.5
' add video-pan-y -0.01
" add video-pan-y 0.01
/ add sub-font-size 1
? add sub-font-size -1

滤镜+RIFE补帧

个人最常用的滤镜,看720P以上缩放到2K基本没问题。写入portable_config/input_uosc.conf即可。

1
Ctrl+3            change-list glsl-shaders clr "";change-list glsl-shaders set "~~/shaders/Anime4K_Denoise_Bilateral_Median.glsl;~~/shaders/Anime4K_Deblur_DoG.glsl;~~/shaders/Anime4K_Darken_HQ.glsl;~~/shaders/Anime4K_Thin_HQ.glsl;~~/shaders/Anime4K_Restore_GAN_UL.glsl;~~/shaders/Anime4K_Upscale_CNN_x2_UL.glsl;~~/shaders/Anime4K_Clamp_Highlights.glsl"        #! 着色器 > 自定义预设:线条加重细化+A4KGANx2放大

RIFE补帧+ESRGAN超分辨率放大

原本想先超分放大再补帧的,结果控制台一直报错。无奈,只能先补帧再放大了。可能会有一些残影,但实际看下来没有SVP多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
### N卡专用

import vapoursynth as vs
from vapoursynth import core
import k7sfunc as k7f

clip = video_in

# 超分辨率参数
H_Pre = 720
Lt_Hd = False
SR_Model = 5005
SR_Gpu = 0
SR_Gpu_T = 2
SR_St_Eng = False
SR_Ws_Size = 0
H_Max = 1440
SR_Lk_Fmt = False

# 补帧参数
RIFE_H_Pre = 1440
RIFE_Lt_D2k = False
RIFE_Model = 46
RIFE_Ext_Proc = False
RIFE_T_Tta = False
Fps_Num = 2
Fps_Den = 1
Sc_Mode = 1
RIFE_Gpu = 0
RIFE_Gpu_T = 2
RIFE_St_Eng = False
RIFE_Ws_Size = 0
RIFE_Lk_Fmt = False

# 先补帧
clip = k7f.FMT_CTRL(clip, h_max=RIFE_H_Pre, fmt_pix=1 if RIFE_Lk_Fmt else 0)
clip = k7f.RIFE_NV(clip, lt_d2k=RIFE_Lt_D2k, model=RIFE_Model, ext_proc=RIFE_Ext_Proc, t_tta=RIFE_T_Tta, fps_in=container_fps, fps_num=Fps_Num, fps_den=Fps_Den, sc_mode=Sc_Mode, gpu=RIFE_Gpu, gpu_t=RIFE_Gpu_T, st_eng=RIFE_St_Eng, ws_size=RIFE_Ws_Size)

# 再超分辨率放大
clip = k7f.FMT_CTRL(clip, h_max=H_Pre, fmt_pix=1 if SR_Lk_Fmt else 0)
clip = k7f.ESRGAN_NV(clip, lt_hd=Lt_Hd, model=SR_Model, gpu=SR_Gpu, gpu_t=SR_Gpu_T, st_eng=SR_St_Eng, ws_size=SR_Ws_Size)
clip = k7f.FMT_CTRL(clip, h_max=H_Max, fmt_pix=1 if SR_Lk_Fmt else 0)

clip.set_output()