即時補幀提昇動畫影片FPS ~ Linux版MPV播放器+Vapoursynth MVTools設定教學

目錄
解說如何在Linux系統設定MPV,配合Vapoursynth的MVTools插件達到即時補幀效果,類似Windows上的mpv-lazy那樣。
不知何為補幀?請看這部影片補幀後的效果:
後面再教學如何配合動畫升頻軟體Anime4K一同使用,操爆電腦硬體。
1. 概述與本文目標 #
即時補幀(補畫格,real time interploation,motion interpolation)即在播放影片的時候將影片FPS提高(如30 FPS → 60 FPS),而不用像RIFE那樣需要等整部影片轉檔完成。
目前影片補幀的方案主要有:Vapoursynth MVTools(開源)、RIFE(開源)、DAIN(開源)、SVP(閉源)、DmitriRender(閉源)
Vapoursynth是一款開源的伺服器幀渲染軟體,為AviSynth的後繼者。可以用來處理影片轉檔,配合MPV播放的話即是套用其濾鏡(由插件提供)來改善影片品質,例如本文主角"MVTools",專門給影片插幀/補幀用的。
MVTools與同為補幀軟體的RIFE ( RIFE使用教學) 有什麼差呢?MVTools能在播放中給影片補幀,全靠CPU運算,雖然耗CPU資源但速度還能接受;相較之下,RIFE預設得將整部影片用GPU轉檔才能看。雖然有人嘗試將RIFE作為即時補幀插件(見 VapourSynth-RIFE-ncnn-Vulkan),但仍需要RTX等級的顯示卡才不會卡頓,對一般使用者來說要求過高。(我是窮鬼)
儘管RIFE可能是目前效果最好的開源補幀演算法了,但MVTools的補幀其實也沒到很差勁的地步,只比專有軟體SmoothVideoProject差些,所以就將就看吧。
整合補幀技術的播放軟體,最著名的專案便是 mpv-lazy了,開發者將Anime4K和MVTools內建,使用者不需要手動設定便可使用。不過該軟體因為將一堆靜態執行檔包在一起,只支援Winodws版本,Linux雖然也有原生MPV但需要手動設定一些東西。
那麼,我們不妨將目標簡化:只要能在Linux播放影片時,補幀到60FPS+提昇畫質即可,所以我們就來手動設定吧。
2. 安裝必要套件 #
- 系統:Arch Linux
- CPU:Intel I5-7400
- GPU:Nvidia GTX1050Ti (安裝閉源驅動)
- 系統Python版本:3.11.3
- Vapoursynth版本:R63
- 首先需要安裝啟用VapourSynth的套件,Arch Linux預設的
mpv
套件無此選項,故需要從AUR安裝特別版mpv-vapoursynth-git
:
sudo pacman -R mpv
yay -S mpv-vapoursynth
- 接著安裝mvtools,它的函式庫位於
/usr/lib/vapoursynth
sudo pacman -S vapoursynth-plugin-mvtools
mkdir ~/.config/mpv
cd ~/.config/mpv
wget https://gist.githubusercontent.com/phiresky/4bfcfbbd05b3c2ed8645/raw/d2431bc64b2cff0c80c5953bca71968dcdf82971/motioninterpolation.vpy
- phiresky的vpy有點小問題,請開啟該檔案,找到
vapoursynth.get_core()
的字串,將其替換成vapoursynth.core
3. 撰寫MPV設定檔啟用mvtools #
- 編輯
~/.config/mpv/mpv.conf
,填入最基本的播放參數
keep-open=yes
sub-auto=fuzzy
hwdec-codecs=all
profile=gpu-hq
- 編輯
~/.config/mpv/input.conf
,填入開關Vapoursynth濾鏡的快捷鍵,我設定為「b」。等號後面的路徑是剛才下載的vpy檔案的位置。
b vf toggle vapoursynth=~~/motioninterpolation.vpy
- 如果您想要一開啟MPV就自動啟用補幀功能,在
~/.config/mpv/mpv.conf
加入以下內容:
vf=format=yuv420p,vapoursynth=~~/motioninterpolation.vpy:4:4
接著在檔案管理器使用MPV播放一部非60FPS的影片
按Shift+I,顯示目前影片幀率
按b啟用補幀功能,繼續播放,觀察幀率是否有變化
4. 配合Anime4K升頻軟體使用 #
Anime4K是提昇動畫畫質(升頻)的軟體,可將720p變1080p,1080p變接近4K。
- 請參考
Linux版Anime4K教學,將Anime4K的快捷鍵設定好。如果要跟Vapoursynth一起用的話,沿著
~/.config/mpv/mpv.conf
的設定檔直接往下寫就好了,例如:
CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A (Fast)"
CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B (Fast)"
CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C (Fast)"
CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_Restore_CNN_S.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A+A (Fast)"
CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_S.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B+B (Fast)"
CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_S.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C+A (Fast)"
CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared"
b vf toggle vapoursynth=~~/motioninterpolation.vpy
- 同樣,如果您希望一啟動MPV便自動啟用Anime4K的A+A模式,那就把以下內容加到
~/.config/mpv/mpv.conf
尾端
glsl-shaders="~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_Restore_CNN_S.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"
5. 播放MVTools+Anime4K影片有多耗系統資源 #
以下是播放普通1080p影片,什麼都沒開的情況
接著是啟用補幀+Anime4K的影片,可以看到GPU和CPU使用率都暴漲。
如同RIFE,Vapoursynth的MVtools也可以給影片補幀轉檔,減少播放時的開銷:
vspipe --arg in_filename="影片路徑" --arg display_fps=60 --y4m motioninterpolation.vpy -| ffmpeg -i - -crf 18 output.mkv