見出し画像

Real-ESRGANを使ってアップコンバートを行ってみた話。

ThinkStationを購入しXeonとQuadroな環境を手に入れてひと月が経過していました。折角なのでその性能をフルパワーで使った事をやってみたいと思ったので「Real-ESRGAN」を使って動画をアップコンバートをする事にチャレンジをしてみました。

Real-ESRGANとは

ディープラーニングで画像をアップスケールする物です。すごくざっくり言うとwaifu2xより高性能にしたアップスケールと言えば話は早いでしょう。
Real-ESRGANはオープンソースかつ、3種類の内から手軽に使用ができる物となっています。

  • オンラインインターフェース(Webですね)

  • ポータブルな実行ファイル(exeとかですね)

  • Pythonスクリプト(おっぱいですね)

Real-ESRGANのGitHub
https://github.com/xinntao/Real-ESRGAN

OSに関してもクロスプラットフォームに対応しており、Windows/Mac/Linuxに対応しています。Pythonは3.7または3.8が必要になります。(それ以降でも使えると思う)
「導入なんて面倒くせぇ!!使うだけでいいわ!!」な人はこちらで試せます。

動画のアップコンバートに使った環境

マシン: ThinkStation P510
OS: Windows 11 (22H2)
CPU: Intel Xeon E5-2650 v4 (Haswell)
GPU: NVIDIA Quadro M2000
メモリ: 32GB
ストレージ: SSD/512GB&HDD/1TB

CPUは元々Xeon E5-1620 v4を積んでいましたが、換装をしています。
OSはお察しの通りバイパスで無理やりインストールしています。

アップコンバートを行うには

Anime4K、madVRのようにリアルタイムで行う事ができない為、原始的なやり方で行います。

  1. アップコンバートを行う動画を用意する

  2. アップコンバート前の動画を画像と音源に分離させる

  3. 画像のアップスケールが終わるまでひたすらに待つ(相当なお覚悟を)

  4. アップスケールをした画像を動画化と音源を結合

  5. アップコンバートな動画の完成

  6. おまけに60fps化などはご自由に

という工程をやります。特に重要なのが「画像のアップスケール」です。
動画から相当な枚数の画像を徐々にアップスケールするのでGPUのパワーと時間と労力が試されます。今回アップコンバートを行うと決めた動画は以下になります。

livetune氏が手掛けた楽曲、TransferのMVになります。この動画が投稿されてちょうど10年だった事と未だに聴いてる曲なのでこのMVのアップコンバートを行う事にしました。この動画の解像度は最大で720p、1080pでもないので現在の環境で視聴するとボケボケな感じです。サンプルとして720pとアップスケール後の画像を出してみます。

アップスケール前
720p、拡大すると線がボケているはずです。
アップスケール後
アップスケール後、線のボケもなくなりくっきりしています。

この画像だけならすぐなのですが、動画にするとなると画像の総数はなんと「8764枚」になります。これをやり終えるまでひたすらに待ち続けなければなりません。容量は後の項目で公開します。

使用をしたツール

有り難い事に動画のアップコンバートを行うツールを公開している方がいたのでそれを使う事にしました。
ダウンロード

アップコンバートを行う場合、容量の消費量がかなりえげつない事になるので余裕がある環境でやる事を推奨します。(動画の再生時間によって変化します)以下はツールの使い方です。

  1. step1のcmdに動画をドラッグ&ドロップをして分離

  2. step2のアップスケールを実行(長時間&GPUフル稼働、ストレージの大幅な消費を覚悟)

  3. step3でアップスケール後の物を結合(エンコード)

  4. 動画が完成

分離させた物は「_temp-project」のフォルダにそれぞれ格納されています。
手順は簡単なのですが、本当に時間がかかります。
自分が作業をやった環境では6分程の動画でおよそ3日を要する結果でした。画像は2枚分で1.5分という間隔で進んでいました。
某所でNVIDIAはcmdの編集をしなくても結合(step3)ができる話がありましたが、自分の環境ではエラーが出たので以下に変更をしました。

@echo off
@title Megre!
cd /d "%~dp0"

:: Frame Rate
set FPS=24

set time2=%time: =0%
set dttime=%date:~0,4%%date:~5,2%%date:~8,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%

ffmpeg64\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 -acodec aac -b:a 192k -y "%~dp0\FINAL_%dttime%.mp4"

timeout /t 5
exit 0

結合を行う場合は必ずアップコンバート前の動画のFPSを確認するようしてください。MediaPlayerClassic-BEのプロパティ上から確認ができたりします。

消費をした容量について

スクリーンショットで公開した方が良いと思うのでそちらを出しておきます。

使用した容量
アップスケール前とその後

元の容量が左の8.78GB、アップスケール後は80.4GBに跳ね上がっています。解像度は5120×2880になっていました。この様に消費する容量が倍になるのでストレージには余裕がある環境でやる事を推奨します。

アップコンバート後の動画

では長い説明をするのはアレなので結果となる動画を出します。

動画は5KになっていたのでPremiereProを使い4K/60FPSに変更しました。
因みに使ったPCで5Kの再生は処理落ちを起こすレベルでした…

最後に

今までチャレンジをしていなかった事がやれた事と未だにこのMVと楽曲が評価されている事が嬉しい限りでした。最初は終わりが見えないと途方に暮れながらの作業でしたが、終わった後は4Kの高解像度となり良い結果で幕を閉じました。AIの生成画像で批判があったりする世の中ですが、ディープラーニングを上手く使えば古い時代の映像も現代的な物に復元ができる時代なのでその手の技術が良い方向に行けばと思います。

…久々にクソ長い文章入力したわ、やっぱり長文は超苦手。

【追記】
Premire Proでとある致命的なミスをしていたので記事を書きました。
https://note.com/reindex/n/n9e01ffcbc609

この記事が気に入ったらサポートをしてみませんか?