動画の高画質化
【追記】処理速度を速めるために
★ Pythonの標準実装だと、Python環境で重いPytorchを使うので、処理に時間がかかる → Tencentが公開しているVulkanベースのC++実装版(realesrgan-ncnn-vulkan)を使ったほうが速度が出るらしいので切り替えた
★ タイルサイズが小さすぎると処理時間がかかるため、専用GPUメモリに余裕があれば、タイルサイズを大きくすること → タイルサイズを自動判定にしたら256になっていたので、更新した
★ Real ESRGANx2plusが処理重でよくないモデルらしいので、realesr-animevideov3(アニメやイラストでおすすめ。2倍3倍4倍対応)やgeneral-x4v3(実写でおすすめ。4倍固定)という軽量モデルをつかうことにした。
★ 「フレームを一度HDD/SSDに保存するのではなく、FFmpegでデコードした映像ストリームを標準出力(stdout)経由でAIの推論プロセスにパイプで直接流し込み、処理後のフレームもそのままエンコーダーにパイプで戻す仕組みにすると、ディスクI/Oのボトルネックが消え、高速化する」。 → ただし、ディスクに連番画像(PNG)を保存しないため、途中経過がわからない(今処理しているフレームの色味などが確認できない)。またGPUが常にフル稼働しているなら、これ以上GPU速度が上がらないため、FFmpegによるCPU処理ができてもGPU側の処理をまたなくてはならず、大幅な高速化は見込めない → これまで通りSSDに保存することにした
AIモデル
アップスケーリング用のAIモデルとして
・ Real-ESRGAN
・ Waifu2x
があり、今回はReal-ESRGANを採用
AIモデルは
%LOCALAPPDATA%\HighResolution\weights
にダウンロードされており、プロジェクトフォルダの中にない
動画の拡大倍率と処理時間
・ 動画を縦横2倍にする(=動画面積を4倍にする)には「Real ESRGAN x2plus」をつかい、縦横4倍にするには「Real ESRGAN x4plus」をつかう
・ 15分のMP4(850x480px)を2倍の高画質(1700x960px)にするのに4時間もかかった(→Real ESRGAN x4plusを使うといつまでも処理が終わらないから使わない!)
動画ファイルサイズ
縦横2倍(面積4倍)にするとファイルサイズが5倍に行かないくらいになった
高画質化の流れ
1 動画からフレーム(静止画)を1コマずつ切り出す
2 AIモデルに画像を読み込ませて、高画質化(720p->1080p, 1080p->4k)を行う
3 高画質化したコマを再び音声と合成して1つの動画ファイルに書き出す
GPU条件
・ CPUだけで高画質化処理すると、1秒の動画の処理に数分かかるほど重い作業のため、基本的にGPUが必要
・ RTX3060Ti 8GBでも動くように指定
専用GPUと共有GPU
・ 共有GPUとはCPUをGPUとして扱った場合のメモリのこと
・ 共有GPUを使うと処理速度が非常に遅くなるため、専用GPUメモリだけを使うのが一般的
GPUで行われる処理の種類
・ GPUを使って行う処理は「3D, Video Encode, Video Decode, Copy」の4種類に分けられる
・ 高画質化処理を行うとタスクマネージャーで3Dだけ使用率100%になり、ほか3種類は0%になるが、高画質化処理(=AIモデルを使って画像を拡大する処理)は膨大な行列計算であり、3D処理なのでこれは正常な動作
・ 3D使用率100%はGPUの計算性能をフルで利用しているということ。車に例えると「アクセルベタ踏みで最高速度で走っている状態」
※ これに対して専用GPUメモリの使用GBは車に例えると「トランクの容量」であり、荷物をたくさん積んで走ったほうが処理時間が減る
※タイルサイズを増やして専用GPUメモリが増えても、3D使用率は増えないので大丈夫
GPU温度
・ GPU温度は90度になった
・ 95~100度になると自動シャットダウンするため、できれば85度以下に下げたほうがいい
・ タイルサイズを大きくするとGPU負荷が上がり、GPU温度が上がる
タイルサイズ
・ 各フレームを一度に処理するとGPUへの負荷が大きすぎるので、各フレームを複数のタイルにわけて処理する
・ タイルサイズを増やすと一度に処理する面積が増えるため、専用GPUメモリを多く消費するが、全体の処理時間を減らせる
(タイルサイズを自動にしたら、専用GPUメモリ8GB中1.2GBしか使わなかったので、タイルサイズを512〜1024にふやしてOK。増やすことで処理速度を上げられる(VRAMの使用率は80%くらいまで上げてOK)
アプリの使いかた
・ AI生成されたコードをGPU付きのパソコンにコピーし、setup.ps1をメモ帳ではなくPowerShellで実行したあと、run.batをクリックする
なお、Windows/System32/high-resolutionで
PowerShell -ExecutionPolicy Bypass -File .\setup.ps1することで、権限付与して実行できる
BACK