waifu2x - AI 圖像縮放和圖像降噪程式

簡介


waifu2x是一個用於動漫風格圖像的圖像縮放和圖像降噪程式,也支援處理普通圖片。

waifu2x的核心是一個用於超解析度成像的卷積神經網路(SRCNN)。它使用了NVIDIA CUDA技術,但也有使用OpenCL和Vulkan的替代實現。

https://zh.wikipedia.org/wiki/Waifu2x

下載


waifu2x ncnn Vulkan
https://github.com/nihui/waifu2x-ncnn-vulkan

使用說明


基本用法

waifu2x-ncnn-vulkan -i infile -o outfile [options]...

選項說明

-h
顯示說明

-v
詳細輸出

-i input-path
設定輸入路徑,可為檔案路徑或目錄。

-o output-path
設定輸入路徑,可為檔案路徑或目錄路徑。

-n noise-level
設定降噪等級,-1/0/1/2/3, 預設為0。等級越高效果越強,-1=不降噪。

-s scale
設定縮放等級,1/2, 預設為2。1 為不縮放,2 為兩倍。

-t tile-size
設定分塊大小,>=32/0皆為自動, 預設為0。使用較小的值來減少 GPU 記憶體使用,預設值為自動。

-m model-path
設定模型路徑,預設為models-cunet,位於程式目錄下的資料夾 (models-*),用來針對不同類型的圖片,models-cunet: 一般圖片,models-upconv_7_anime_style_art_rgb: 插畫,models-upconv_7_photo: 照片。

-g gpu-id
使用 GPU,預設為0。可用 0,1,2 對於多 GPU。

-j load:proc:save
三階段執行續數量 (圖片解碼 + waifu2x 放大 + 圖片編碼)。預設為 1:2:2,使用較大的值可能增加 GPU 使用率與消耗更多 GPU 記憶體。對於小尺寸圖片可用 4:4:4,而大尺寸圖片可用 2:2:2,預設值通常對於大多數情況都不錯。如果發現 GPU 負載很低,則嘗試增加執行續數量以加快處裡。

-x
啟用 tta 模式

-f format
設定輸出格式 (png/webp, 預設為ext/png),對於 png 格式的支援性較好,webp 編碼輸出的檔案則較小,以上兩者皆為無損。

應用


圖片放大與降噪


將 input.jpg 放大2倍、降噪強度2,儲存為 output.jpg
waifu2x-ncnn-vulkan -v -i input.jpg -o output.jpg -n 2 -s 2

處理 intputdir 目錄下的所有圖片,儲存至 outputdir 目錄下
waifu2x-ncnn-vulkan -v -i intputdir -o outputdir -n 2 -s 2


影片放大與降噪


由於 waifu2x 不支援影片格式輸入,必須先將影片轉換成連續圖片再用 waifu2x 處理圖片,由於是作為暫時的檔案,建議使用建議使用無損格式。最後將處理過的圖片轉成影片,再與片源音訊重新封裝合成新的影片檔即可。以下示範使用 ffmpeg 將影片轉換成圖片再轉回影片。

基本用法
ffmpeg [options for input] -i inputfile [options for output] outputfile

影片轉換成連續圖片

以下假設片源 input.mpg 影像規格為 `mpeg2video, yuv420p, 704x480 [SAR 40:33 DAR 16:9], 24000/1001 fps`。

為了方便之後將連續圖片轉換成影片,使用 `-r` 將輸出 fps 轉換為為固定不變的 fps 即 CFR。輸出檔名 `%7d` 為圖片的編號,由 0 起始,往前補 0 為 7 位數。注意,CMD 中使用 %% 表示 %。

ffmpeg -i input.mpg -r 24000/1001 -f image2 "frames_original\%7d.png"

由於`yuv420p` 與 png 不相容,ffmpeg 將自動轉換成其他合適格式,以及 png 不支援非 1:1 的 SAR,將輸出錯誤的 DAR (顯示比例): `704x480 [SAR 1:1 DAR 44:30]`。因此,之後將圖片轉回影片時可使用 `-pix_fmt` 與 `-aspect` 選項,來轉換像素格式與強制指顯示比例。

放大圖片

將 frames_original 目錄下的所有圖片放大降噪處理後輸出到 frames_scaled 目錄
waifu2x-ncnn-vulkan -v -i frames_original -o frames_scaled -n 2 -s 2


輸入圖片 704x480 將得到 png 影像規格為 `rgb24, 1408x960 [SAR 1:1 DAR 44:30]` 的圖片,由於 1408x960不是標準解析度,若想得到符合標準解析度的寬或高,之後使用 ffmpeg 將圖片轉回影片時利用 `-s` 選項再次縮放畫面。

連續圖片轉換成影片

輸入是連續圖片檔必須使用 `-r` 來強制指定正確的輸入 fps;使用 `-pix_fmt` 轉換像素格式與片源相同;使用 `-aspect` 修正錯誤的顯示比例。對 input.mpg 使用 `-vn` 禁用影像,並使用 `-c:a copy` 複製音訊。1408x960 不是標準解析度可用 `-s` 縮放輸出解析度到標準規格。

將 frames_scaled 目錄下的 PNG 圖片轉換成影片
ffmpeg -f image2 -r 24000/1001 -i "frames_scaled\%7d.png" -vn -i input.mpg -s 1280x720 -c:v libx264 -refs:v 5 -preset:v slower -crf:v 18 -pix_fmt yuv420p -aspect 16/9 -c:a copy output.mkv


分段處裡

由於一次將整個影片輸出為圖片,將得到數量龐大的檔案,這對硬碟是不小的負擔。為了減輕硬碟的壓力,可以使用 `-ss` 與 `-t` 指定開始與持續時間將一個片段影片輸出為連續圖片。

ffmpeg -i input.mpg -ss 00:00:00 -t 60 -r 24 -f image2 frames_original/%6d.png

waifu2x-ncnn-vulkan -v -i frames_original -o frames_scaled -n 2 -s 2

ffmpeg -f image2 -r 24000/1001 -i "frames_scaled\%6d.png" -s 1280x720 -c:v libx264 -refs:v 5 -preset:v slower -crf:v 18 -pix_fmt yuv420p -aspect 16/9 clips\000.mkv

假設影片長度為 00:24:35,重複以上步驟並使用不同的時間點得到多個分段影片。
`-i input.mpg -ss 00:01:00 -t 60` -> png files -> 001.mkv
`-i input.mpg -ss 00:02:00 -t 60` -> png files -> 002.mkv
`-i input.mpg -ss 00:03:00 -t 60` -> png files -> 003.mkv
中間省略......
`-i input.mpg -ss 00:24:00` -> png files -> 024.mkv

以上會得到 000.mkv ... 024.mkv,共 25個影片檔。將所有分段影片的檔名或完整路徑儲存為utf8編碼的純文字文件。

clipslist.txt
file '000.mkv'
file '001.mkv'
file '002.mkv'
中間省略......
file '024.mkv'


串連所有分段影片並與片源音訊重新封裝合成新影片
ffmpeg -f concat -safe 0 -i clipslist.txt -vn -i input.mpg -c copy output.mkv
kingdragon wrote:
簡介waifu2x是...(恕刪)

轉出來效果應該很好,可惜有點難
Ariouk wrote:
可惜有點難


一鍵轉換 PowerShell 腳本
http://www.wikifortio.com/762397/waifu2x_script.7z
執行 bat 檔

片源檔案路徑
拖曳片源到 cmd 視窗上得到路徑,按 ENTER

輸出檔案路徑
直接按 ENTER,會套用預設值 "片源所在目錄\檔名.scaled.mkv"

暫存資料夾路徑
直接按 ENTER,會套用預設值 "片源所在目錄\檔名_waifu2x_temp\"

Press Enter to continue
不要按 ENTER,直接關閉 cmd 視窗,編輯 bat 所在目錄的 txt 設定檔

BOX_WIDTH、BOX_HIGHT 是解析度限制
當圖片放大後的解析度大於此值 將會自動縮小到符合這個寬高

例如
SCALE=2
BOX_WIDTH=1280
BOX_HIGHT=720
如果片源是 640x480 [4:3] 最終會得到 960x720 [4:3]
640x480 x 2 = 1280x960 → 960x720

不要二次縮放可以把值設很大
BOX_WIDTH=99999
BOX_HIGHT=99999

編輯 txt 設定檔完畢後儲存 再次執行 bat
確定參數正確,按 ENTER 開始轉換
轉換完畢後將 txt 設定檔與暫存資料夾刪除

轉換圖片中關閉 cmd 視窗 下次執行 bat 時會繼續剩下未完成部分
使用這個腳本記得教把系統睡眠關掉 防止流程中斷
kingdragon wrote:
waifu2x

感謝如果有mac版的腳本就好了,我用mac m1模擬windows的效能很差跑要十個小時😅
OLED愛好者~
推個分享
不過我常用的是 waifu2x-caffe , 有圖形化操作介面方便一點
kingdragon
因為waifu2x不支援影片 主是講搭配ffmpeg處裡影片
kingdragon
處裡影片是也有GUI方案 但時常發生錯誤 最後還是靠自己寫腳本善後.....
文章分享
評分
複製連結

今日熱門文章 網友點擊推薦!