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が良いだろう。

おまけ

かんたんアプコンキットを用意しました。

ダウンロード

※2021/07/11更新
※Windows64bit / NVIDIA or AMD GPU必須
※githubから直接ダウンロードしたexeを使用しているのでご安心ください。
→ 気になるようであれば置き換えてください
※自己責任でご利用ください

※waifu2x以外のソフトもありますので是非ご確認下さい。

準備

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と設定します。
複数のGPUを指定する場合はカンマ区切りで指定します「 -g 1,2,3 」
PCのすべてのGPUを使用する場合は「 -g 」オプションを消します。※マイニングリグで動かす場合等

最適な値が見つかったら「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」が生成されているので再生してみてください。

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

コメント

  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のいい所をこれから探していこうと思います。

  9. これ、ものすごく便利ですね。DVD品質の動画を2倍にするだけで印象が随分変わります。アプコンキットの提供、ありがとうございます!

  10. Ryzen7-3700X
    RTX3070
    で動作しました。

  11. AMD Ryzen 1600af
    AMD Radeon RX570 OC8G
    で問題なく動作しました。ありがとうございます!

  12. Ryzen7 3800X + RTX 2070S + RAM 32 ブロック400で
    約5分の2K動画をアプコンで5時間位かかりましたがこんなもんでしょうかね

    ソースがHDで最終的に2Kか4Kにしたいんですが、HDの状態でアプコンしたほうが良いのかな…

    いずれにしてもキットがなければ出来なかったと思います、ありがとうございます

  13. Ryzen7-3700X
    RTX2060Super

    アップコンキットが非常に便利。
    あちこち使い方を見て回ったけど理解しきれなかったので・・。

    おかげで、古い動画がきれいになりました!

  14. Corei7-3770
    GTX1650

    アプコンキットありがとうございます。
    VHSビデオキャプチャしたもの(i240)で色々試していますが、結構時間もかかるので、アップコンバート前にコントラストや明るさ等の調整をするか、あとで調整するか、どちらが効率が良くなると思われますか? 実際には当方でやってみなければ納得できないとは思いますが・・・

  15. アプコンキット利用させていただきます!
    早速の質問で恐縮ですが,画像サイズを2倍にしている工程で倍率を任意にすることは可能でしょうか?また,この工程でのサイズが最終的な変換後の動画サイズだと認識しておりますが合っておりますでしょうか?
    目的としては1280×720のサイズの動画ファイルを1920×1080のフルHD相当のものに変換したいと考えております.
    よろしくお願いいたします.

    • だったら一度、720pから960×540pにダウンスケールした動画を書き出してアプコンすればいいのでは?

  16. アプコンキットのご提供ありがとうございます。
    step3を実行すると、コマンドプロンプトで「(アプコンの場所)\\FINAL_(日付).mp4: No such file or directory」とエラーが出るのですが、どうすればよろしいでしょうか?

  17. アプコンキットの配布ありがとうございます。
    Step3でcmdファイルを実行したところ、コマンドプロンプト上で
    「(アプコンの場所)\\FINAL_(日付).mp4: No such file or directory」
    とエラーが出るのですが、どう対処すればよろしいでしょうか?

  18. 最初のffmpegで画像に分割するときのアウトプット指定で「%%09」の%が2つあるとエラーになりますね。
    何故か他の人が書いている手順もここが同じ様になっていてエラーになります。
    はて・・?

  19. 上手くいけました、ありがとうございました
    これってフォルダ奇麗にしないと次ができない感じですかね?

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