快轉到主要內容

Linux版Anime4K使用教學,一鍵提昇動畫畫質

· 民國115年丙午年
·
切換正體/简体 ·
分類 Linux系統 Linux好用軟體
標籤 Anime4K Video Upscaling MPV
目錄

如果你找到的動漫影片畫質低下想要改善,或是看到喜歡的圖片畫質卻不夠做成桌布,那麼你就需要能用魔法放大圖像的工具。

在這裡為您介紹bloc97開發的「Anime4K」,它是可以即時提昇2D動畫畫質的開源工具。不用轉檔播放影片立即生效。可在Linux上達成類似mpv-lazy的效果。

除此之外還有以Anime4K技術製成的轉檔工具「Anime4KCPP」,類似Waifu2x,專門把動漫圖片和影片放大之用。

Anime4K支援Linux、Windows、macOS系統,甚至Android、iOS手機也能用。

說到整合Anime4K的播放器,當屬Windows系統的mpv_lazy了。雖然MPV也有Linux版本,但是mpv_lazy的腳本不能直接在Linux用。本文將簡介Linux版MPV搭配Anime4K的手動裝法。

1. Anime4K效果預覽
#

Anime4K具體效果如何呢?請先看圖。

Anime4K可以將1080p影片提昇至接近4K畫質,細節變清晰了:

艦隊Collection總有一天在那一片海

或是720p變類似1080p

Fatekaleid liner 魔法少女伊莉雅2wei Herz!

順帶一提,MPV可以當圖片檢視器(開啟主程式後把圖片拖進去),你可以把Anime4K當作暫時提昇圖片畫質的一個「濾鏡」工具。

2. 比較Anime4K與其他AI圖片放大技術
#

Anime4K最直觀感受的是線條變得清楚。根據開發者說法,Anime4K僅針對H.264、H.265、VC-1編碼的1080p影片最佳化,720p以下放大會更容易糊掉,因此用來放大1080p影片效果最好。其實還要看你片源的位元率如何,如果品質差則放大後鐵定糊掉。

且Anime4K是針對動畫訓練的,對動畫以外的影片幾乎無效。如果要放大真人電影的,用FSR或DLSS這類的會比較好。

開發者也在Github issue指出,Anime4K不是生成對抗網路,放大效果並沒有比Waifu2x、SRGAN、ESRGAN、Real-ESRGAN好。

Anime4K不是最好的影像放大技術。如果你實際拿Anime4K,跟Waifu2x和GAN之類的放大圖片技術比較,你會發現Anime4K還是有很多模糊的地方。

如下圖,Anime4K與Real-ESRGAN 4x Anime6B的比較。

同樣是放大四倍,Anime4K仍有許多模糊之處。

(超級長的廢話解說版)

聲明:此為AI影像處理對抗式生成網路的學術研究,不是單純在看胸部。哪一個AI放大影片的效果較好?Anime4K與Real-ESRGAN的原理差異是什麼呢?

左側為Anime4K,右側為Real-ESRGAN,兩者同樣進行四倍放大。此處選用胸前服飾區域作為比較對象,因為該區域同時包含皮膚陰影、布料皺褶、曲線輪廓、蕾絲花紋與高對比邊界,是一個非常殘酷的局部高頻特徵測試場。若演算法的線條重建、紋理分離與細節推論能力不足,這類區域會立刻露出馬腳。換句話說,這不是單純看胸部,這是benchmark的一環。請稱之為「局部非剛性曲面與裝飾性邊緣結構的超解析觀察樣本」。

Real-ESRGAN是處理真實世界盲超解析(real-world blind super-resolution)問題。所謂盲超解析,是指模型並不知道輸入圖片實際經歷過哪些劣化過程,例如模糊、縮放、雜訊、JPEG壓縮、ringing、overshoot等瑕疵。Wang、Xie、Dong與Shan(2021)指出,Real-ESRGAN是從ESRGAN延伸而來的實用型影像修復方法,並以純合成資料訓練,透過高階劣化模型模擬複雜真實世界影像退化。其論文摘要也提到,Real-ESRGAN使用U-Net discriminator搭配spectral normalization,以提升判別器能力並穩定GAN訓練過程(Wang et al., 2021)。官方GitHub也將Real-ESRGAN定位為「practical algorithms for general image/video restoration」,並明確說明其訓練資料為純合成資料。因此,Real-ESRGAN的強項不是單純把圖片放大,而是試圖從低品質、未知退化的輸入中恢復出視覺上合理的高解析結果。這裡的「合理」不代表百分之百還原原始作畫,而是模型根據訓練資料分布與GAN對抗訓練所推論出的高頻細節。這也是為什麼Real-ESRGAN處理後的圖片常常看起來更銳利、更有細節,但同時也可能帶有模型「腦補」的痕跡。這不是單純的放大,而是一次統計意義上的影像重建。

相較之下,Anime4K的技術哲學完全不同。Anime4K官方README明確表示,它是為了讓使用者能即時觀看放大的動畫而設計,並不鼓勵把動畫重新編碼成4K,因為重編碼不可逆、可能引入artifact、佔用更多空間,而且已經遺失的資訊無法真正找回。Anime4K也明確指出,它主要針對原生1080p優化。Anime4K在v4版本中引入line reconstruction algorithm,用來處理1080p動畫中常見的distribution shift問題。官方說明指出,實際流通的動畫素材常因製作預算、時間限制與合成品質差異而呈現很大的變異,傳統超解析演算法不一定能處理;GAN雖然能隱含地建模這種分布偏移,但速度慢且訓練困難。因此Anime4K選擇以顯式的線條重建方式修正這種分布偏移,使傳統MSE取向的超解析演算法能更好地應用於不同動畫素材(Anime4K, n.d.)。Anime4K的核心價值不在於生成最多細節,而是在有限時間內改善動畫線條的感知清晰度。官方也直接承認,Anime4K不是SRGAN類方法的替代品;SRGAN類方法在低解析或嚴重劣化圖片上通常表現更好,只是難以即時運算。官方甚至在低解析實驗中指出,FSRCNNX與Anime4K屬於可即時運作的方案,而waifu2x與Real-ESRGAN則不是即時方案(Anime4K, n.d.)。

基於上述原理差異,我們回到在下圖的比較。

從結果來看,左側Anime4K的線條確實有被強化,角色服裝外輪廓與主要陰影邊界比原始低解析輸入更容易辨識。然而,蕾絲花紋與布料皺褶仍保留明顯的柔焦感,局部線條之間的分離度不足,邊緣也有暈開與黏連的現象。這種結果符合Anime4K的技術定位:它擅長在播放時快速提高線條觀感,但不會像GAN式超解析模型那樣嘗試大量重建細節。因此,Anime4K的輸出比較像「即時銳化後的動畫畫面」,而不是「重新生成的高解析圖片」。

右側Real-ESRGAN則呈現出更強的局部結構重建能力。蕾絲圖案的曲線、胸前布料皺摺、肩帶邊界與皮膚陰影的交界都更清楚,線條之間的分離感也更強。尤其在服裝裝飾區域,右圖不只是把線條變深,而是讓原本模糊成一團的紋樣重新形成較可辨識的圖案結構。這正好符合Real-ESRGAN的設計哲學:透過訓練資料中學到的影像先驗,對輸入影像中不完整或劣化的高頻資訊做出視覺上合理的推論。

總結,Anime4K並不是畫質上限最高的超解析技術,Real-ESRGAN也不是最適合播放器即時播放的濾鏡。二者不是單純的上下位關係,而是不同使用情境下的技術選擇。Anime4K是即時運算的動畫線條增強方案,Real-ESRGAN是離線推論的生成式影像修復模型。左圖的模糊不是單純失敗,而是即時演算法在速度與畫質之間取捨的結果;右圖的銳利也不是免費午餐,而是模型推論與細節生成的結果。


Anime4K的優點在於它是「即時運算」,宛如影片播放器的特殊濾鏡,不需要像GAN要等轉檔完成。

即使有人將GAN做成了濾鏡,要做到即時運算放大,需要更高階的顯示卡。Anime4K則是像Nvidia GTX1050Ti這種入門獨顯都能跑。

如果你只是想要「看起來」影片畫質很好,那麼Anime4K就是個經濟實惠的選擇了。

3. Linux版MPV如何使用Anime4K
#

Linux要用MPV播放影片,再載入Anime4K的GLSL著色器達成提昇畫質的效果。為防止lag,最好使用獨立顯示卡運算。或許新型CPU的內顯也跑得動。

我的系統為Ubuntu,顯示卡為Nvidia GTX1050Ti獨顯。

  1. 安裝MPV播放器

  2. Anime4K得依獨立顯示卡運算才不會lag。以Nvidia顯示卡來說,Linux只需要安裝Nvidia專有驅動,不需要依賴CUDA。

  3. 取得Anime4K的GLSL檔案

git clone https://github.com/bloc97/Anime4K.git

cd Anime4K
  1. 將Anime4K的全部GLSL檔(非目錄)複製到MPV設定檔目錄下的shaders目錄:
mkdir -p ~/.config/mpv/shaders/

find glsl -type f -exec cp "{}" ~/.config/mpv/shaders/ \;
  1. 編輯MPV的快捷鍵設定檔~/.config/mpv/input.conf
vim ~/.config/mpv/input.conf
  1. 加入啟用Anime4K的快捷鍵。以下為參考Github說明所填寫,適用於GTX1650以下低階顯示卡的設定值。
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"
  1. 原理:Anime4K的開發者提供了數十種以上的著色器,包含放大、修復、銳化、降噪、去模糊。參見開發者Github,他定義了A、B、C、A+A、B+B、C+A五種模式,每種模式由多個著色器組成。每按一個Ctrl+數字的組合鍵就會啟用對應的模式提升畫質,使用者要自行判斷哪個比較好。

  2. 接著用MPV播放影片試試吧,檔案管理器裡對影片右鍵應可選取用MPV播放。

  3. 影片播放時按CTRL數字鍵1~6開啟Anime4K提昇畫質,按CTRL+0還原。目前Anime4K v4共有6種模式,通常使用A+A模式效果就夠好了。

  4. 啟用Anime4K時可按ShiftI再按2,查看Anime4K的shader有無顯示在user shader列表,代表正確執行。

  5. 如果要設定MPV播放影片便自動套用Anime4K A+A模式,在~/.config/mpv/input.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"

4. 配合Vapoursynth補幀
#

參見Linux版Vapoursynth MVTools設定教學

5. 用Anime4KCPP轉檔放大影片
#

Anime4KCPP是採用Anime4K技術的「轉檔」軟體,將Anime4K的升級畫質結果轉成影片儲存,這樣播放就不需要額外耗費顯示卡運算了。

這可以說是離線版的Waifu2x,更棒的是還能轉影片。

Github提供的程式僅Windows和Android版有圖形界面,Linux只有純文字模式。

  1. Linux版要自行編譯,首先安裝編譯用的套件:
sudo pacman -S cmake gcc clang opencv python-opencv boost qt5-tools
  1. 開始編譯:
git clone https://github.com/TianZerL/Anime4KCPP.git
cd Anime4KCPP && mkdir build && cd build && cmake ..
make -j$(nproc)
  1. Anime4KCPP的執行檔位於bin,查看是否有正確安裝:
cd bin
./Anime4KCPP_CLI -V
  1. 接著開始轉檔。Nvidia顯示卡轉檔時可調用CUDA加速,圖片轉檔通常不會超過10秒。

  2. 範例一:將同目錄下的圖片input.png放大4倍,保持圖層透明度,輸出為output.png

./Anime4KCPP_CLI -i "input.png" -o "output.png" --GPUMode --zoomFactor 4 --alpha --CNNMode --HDN
  1. 成果

  2. 範例二:影片放大2倍,MP4轉MKV,使用AVC1編碼:

./Anime4KCPP_CLI -i "input.mp4" -o "output.kmv" --GPUMode --videoMode --codec avc1 --CNNMode --HDN

更多參數參考Github Wiki

順帶一提,此款工具可以配合RIFE使用,讓動漫影片變成4K60FPS的豪華內容。

相關文章


感謝您的閱讀。我寫作是為了誠實表達想法,而不是追逐社群互動與流量。我很樂意傾聽你在仔細閱讀我文章之後的心得。若有內容勘誤 or 技術問題 or 回饋想法,歡迎透過本站「關於」頁面的Email與我聯絡。