waifu2xで動画をアップコンバートする

動画をアプコンしよう

昔の動画は解像度が低く最近のディスプレイで見ると悲しくなります。
そこでwaifu2xを用いてアップコンバートしてみたいと思います。
(参考)4Kディスプレイで640×480動画を再生した場合のイメージ

waifu2xとは

畳み込みニューラルネットワークを使用し画像を超解像度化するソフトウェアです。
簡単に言うとAIを用いて画像を”綺麗に”拡大します。

GitHub – waifu2x

動画を画像と音声に分解する

waifu2xは動画を直接拡大することができないため画像に分解後処理を行います。
ffmpegを使用し音声と画像ファイルに分けます。

画像へ変換

ffmpeg.exe -hide_banner -i %1 -q:v 1 -y "%~dp0\_temp-project\image-frames\image-%%09d.png"

音声の抽出

ffmpeg.exe -hide_banner -i %1 -map_chapters -1 -map_metadata -1 -vn -sn -dn -c:a pcm_s24le -y "%~dp0\_temp-project\streams\audio.wav"

waifu2xを用いて画像を拡大する

NVIDIAで処理する場合
waifu2x-caffe
※cuDNNの使用を推奨

NVIDIA/AMD/CPU(内蔵GPU)で処理する場合
waifu2x-ncnn-vulkan
※waifu2x-caffeより速い。AMD利用者はこれを使うしか無い!

CPUで処理する場合
処理が遅いためかなり時間がかかります。諦めましょう。

waifu2x-caffeの場合

@rem blocksizeはGPUメモリ消費量・処理速度に影響します。
set NOISE=2
set SCALE=3
set BLOCKSIZE=200
waifu2x-caffe-cui.exe -i "../_temp-project/image-frames" -o "../_temp-project/image-frames2x" -m noise_scale -n %NOISE% -s %SCALE% -p cudnn -c %BLOCKSIZE% -y cunet

waifu2x-ncnn-vulkanの場合

@rem blocksizeはGPUメモリ消費量・処理速度に影響します。
set NOISE=2
set SCALE=3
set BLOCKSIZE=200
waifu2x-ncnn-vulkan.exe -i "../_temp-project/image-frames/" -o "../_temp-project/image-frames2x/" -n %NOISE%  -s %SCALE% -t %BLOCKSIZE%

複数のGPUで処理する

複数GPUを持っている場合は画像を分けて分散処理させると速く処理ができる。
私は奇数・偶数で分けて処理している。
2台のGPUの性能が異なる場合は適当な比率で画像を分ける。
↓2台のGPUを使用していることが確認できる。

画像・音声から動画を作成する

画像は先程拡大した物を、音声は分解したものを使用しマージを行う
※動画の出力設定はお好みで

@rem 元動画のフレームレートを指定
set FPS=29.97
set PRESET=veryslow
ffmpeg.exe -framerate %FPS% -hide_banner -strict -2 -i "%~dp0\_temp-project\image-frames2x\image-%%09d.png" -i "%~dp0\_temp-project\streams\audio.wav" -r %FPS% -qp 0 -vcodec libx264 -pix_fmt yuv420p -preset %PRESET% -acodec aac -b:a 192k -y "%~dp0\FINAL.mp4"

結果

640×480の動画を3倍にしてみた。
2005年に発売されたゲーム「Nursery Rhyme -ナーサリィ☆ライム-」のオープニング

4Kディスプレイで見た場合

アップスケール前と後

高性能なGPUを持っていれば誰でも簡単にアプコンができる。

GPUってどれがいい?

手持ちのGPUで速度を測ってみたので参考にどうぞ

waifu2x-ncnn-vulkanを使えばNVIDIA・AMDどちらも速い。ただし2倍までしか対応していない。
アップスケールした画像をさらにアップスケールすることで2,4倍としていける。
waifu2x-caffeはNVIDIA・CPU限定だが2,2.5,3倍等、任意の倍率を指定できる。

ワッパはNVIDIA、コスパはAMDが良いだろう。

おまけ

かんたんアプコンキットを用意しました。
ダウンロード (via SonicFast)
※Windows64bit / NVIDIA or AMD GPU必須
※githubから直接ダウンロードしたexeを使用しているのでご安心ください。
→気になるようであれば置き換えてください
※自己責任でご利用ください

※2020/07/02更新
upconvert_v3.zip
ffmpeg更新(脆弱性CVE-2020-12284/CVE-2020-12284に対応)
waifu2x-ncnn-vulkan更新
MITライセンス表記を追記。
※RTX Superのモデルでは動かないかもしれません。
 動作報告、コメントにてお待ちしております。

※当サイト記事の無断転載はおやめください。

準備

GPUドライバを最新に更新する。

GPUに合った最適な設定を作る

GPUに合った最適な設定を探る必要があります。
testフォルダを開き「test.png」を「waifu2x-test.cmd」にドラッグアンドドロップ、上手く変換できるか試してみましょう。
上手く変換できるとtest_result.pngが同フォルダに生成されます。

waifu2x-test.cmdを右クリックから「編集」を選び開く

「BLOCKSIZE」には初期値として150が設定されています。
この数値が大きければ大きいほど処理速度が速くなりますが、GPUのメモリを消費します。
数値を少しずつ上げ変換テストを行い、GPUに合った最適な値を探していきます。

数値を上げすぎるとエラーが出て正常に変換されません。以下はエラー例です。

「-g 0」はどのGPUを使うかのオプションです。
パソコンが認識している0番目のGPUという意味です。
CPU内蔵GPU、外付けGPUと2つ認識している場合は後者を使用したいので-g 1と設定します。

最適な値が見つかったら「step2_up-scale_2x.cmd」にその値を設定しましょう。

以上で初期設定完了です。

動画を画像と音声に分ける

アップコンバートしたい動画を「step1_extract.cmd」にドラッグアンドドロップしてください。

分解が始まります。

分解された画像は「\_temp-project\image-frames」に入ります。

分解された音声は「\_temp-project\streams」に入ります。

分解した画像をアップコンバートする

「step2_up-scale_2x.cmd」を実行するだけです。
拡大された画像は「\_temp-project\image-frames2x」に保存されます。

※更に倍にしたい場合は「stepx_more_scale.cmd」を実行後再度「step2_up-scale_2x.cmd」を実行。

拡大した画像と分解した音声を結合し動画を作成する(マージ)

「step3_merge_nvenc.cmd」を右クリックから「編集」を選び開く。

※元動画のFPSをFPS=に設定してください。
※NVENCを使用する設定にしているのでAMDユーザの方はhevc_nvencをlibx264に書き換えてください。

編集後、「step3_merge_nvenc.cmd」を実行。
処理終了後「FINAL_{実行年月日}.mp4」が生成されているので再生してみてください。

いかがでしたでしょうか?
コメントを頂けると幸いです。

こんな感じになります

千の刃濤、桃花染の皇姫 -花あかり- OP 1440p + 字幕

コメント

  1. アプコンキット便利です!
    ありがとうございます

    • ごみなのはあなたの性格だと思われます。

  2. 使い物にならない。
    そもそもテストすらうまくいかない。
    core19-9900K
    RTX2070super
    64GB
    のスペックでテストがうまくいかずごみ。

  3. BLOCKSIZEは100=1GBですね
    例えば8GBのVRAMを搭載していて0.5GBぐらい食われてたら700(=7GB)ぐらいが限界ですかね?

    あとtestの画像しかやってませんが一応変換出来ましたよ
    スペック
    i5-9400f
    rtx2060s
    16GB 2933Mhz
    今度動画もやってみます

  4. アプコンキットをwaifu2x-caffeに差し替えたら動きました

  5. -vcodec hevc_nvenc
    を削除したら、GPUなしでも行けました。

    便利ですねー。昔の動画あさりがはかどります。
    ありがとうございます。

  6. ちょうどLapis Lazuliの動画をアプコンしてみようと思ったら、サンプル画像がLapis Lazuliで笑ってしまいました(奇遇ですね)

  7. Ryzen7 3700X
    DDR4-3200 32GB
    RTX2070Super(VRAM8GB)
    環境ですが、testで
    set BLOCKSIZE=999999999
    が通るのですが、これは無問題なのでしょうか?あまりに桁数増やすと出力画像が真っ黒の□になるので失敗とわかるのですが…

  8. 9900K
    RTX2060S

    環境で問題なくいけました。凄く簡単でありがたいです
    5分くらいの動画でもそこそこ時間がかかるのでBLOCKSIZEのいい所をこれから探していこうと思います。

タイトルとURLをコピーしました