1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Real-ESRGANで動画の画質改善をしてみた

Posted at

何をするのか

アナログテレビ時代の動画データ(アニメ)があります。
視聴に何も問題はありませんが、デジタル放送の動画と比べると、輪郭が甘かったり、全体に「ざらついた」感じがしたりします。
遅まきながらReal-ESRGANという、AIを利用した超解像度処理があることを知りました。

生きているうちにチューリングテストをクリアする人工知能が出てくるとは思っていませんでした。
最近は、AI技術の発展速度が速すぎて、話題すら追いつくことができません。

Real-ESRGANの超解像度処理は、画像の大きさを縦・横4倍(標準設定で16倍の面積)に拡大してくれるとともに、輪郭を保ったまま「ノイズ」を消してくれます。
「古典画像処理」でも、輪郭を保ったままでノイズを除去する手法(画像先鋭化)があります(OpenCVに組み込まれたいます)が、Real-ESRGANのほうがきれいな結果を得ることができます。
そこで、Real-ESRGANを利用して動画データの画質を改善してみようと思います。
本稿は、画質改善したときのメモです。

を参考にしました。

Real-ESRGANとは

「デノイズを強化した超解像モデル」だそうです。
画像を縦・横4倍に拡大する場合、面積は16倍になりますので、元の画像の15個分のピクセルを作ることになります。
「古典画像処理」では、近傍のピクセルの値を利用して、拡大画像のピクセルを作るのですが、どうしてもぼやけたものになります。
Real-ESRGANでは、ニューラルネットを利用して拡大(超解像)画像を作ります。
拡大と同時に、ノイズもなくしてくれます。
動画を1秒間に30枚の絵と考えれば、動画の画質改善もできます。
アニメに特化しているみたいですが、実写画像にも利用できるみたいです。
例えば、640x850ピクセルの画像を

(クリックすると、実際の大きさで表示されます)
Real-ESRGANで縦・横2倍の大きさに拡大すると、

ぼけることなく輪郭を保ったままで大きくし、かつ、ノイズも除去してくれています。

使用したPCのスペックと使用したソフトウエア

項目 スペック
CPU Core-i9 13900
GPU GeForce GTX 1660Ti RAM 6GB
Real-ESRGANにGPUは必須です
OS Windows11 Pro
ffmpeg ffmpeg-2023-02-27-git-891ed24f77-essentials_build
ffmpeg.exeはデータファイルと同じディレクトリに置きます
Real-ESRGAN realesrgan-ncnn-vulkan-20220424-windows.zip
realesrgan-ncnn-vulkanは付属ファイルがたくさんありますので、データファイルとは別のディレクトリにします

Real-ESRGANの実行ファイルは、「Portable Windows / Linux / MacOS executable files」にリンクされていますので、リンクよりダウンロードします。
Portable executable filesには実行ファイルと一緒に、モデルデータも入っていますので、ほかに用意することなく試すことができます。

試した動画データ

項目 スペック
ファイル名 nanoha_op.mkv
2004年の作品
画像サイズ 1440 x 1080
mpeg
長さ 1分43秒

(ほんとうは、ちゃんとした画像です)

奈々様が歌うオープニング innosent starter が好きなんです。

画質改善の手順

1.元の動画を静止画に分解する

ffmpeg -i nanoha_op.mkv -vcodec png -s 720x540 -r 30 png0\image_%05d.png

DOS窓のコマンドラインに打ち込んで実行してください。(ffmpegは動画と同じディレクトリに入れておきます)
パラメータの中に %05d というのがあるので、バッチファイルでは動きません。
-s 720x540 で、画像の大きさを縦・横1/2にしています。
元の大きさですと、超解像度処理をするときや動画に再合成するときに時間がかかります。
1/4の大きさの画像ですと、時間は短縮されますが、できあがりが良くありませんでした。
png0のディレクトリは、あらかじめ作っておく必要があります。

2.元の動画から音声を分離する

ffmpeg -i nanoha_op.mkv -vn -acodec aac -b:a 128k -ac 2 -ar 48000 temp.aac

あとで、画像処理した動画に結合させます。

3.Real-ESRGANで、分解した画像を拡大した画像を作る

realesrgan-ncnn-vulkan.exe -i "D:\ProgramTest\AI Enhance\png0" -f png -o "D:\ProgramTest\AI Enhance\png1"

D:\ProgramTest\AI Enhance\png0D:\ProgramTest\AI Enhance\png1 は私の環境です。
png1のディレクトリもあらかじめ作っておきます。
realesrgan-ncnn-vulkan.exeはデフォルトのパラメータで動かしました。
png0png1ディレクトリはともに、SSDに作っています。

realesrgan-ncnn-vulkan.exeのオプションに
-i input-path input image path (jpg/png/webp) or directory
とディレクトリを指定できるようになっているのが不思議でした。
一括変換は、今回のようなときに使うのですね。

4.拡大した画像から動画を作る

ffmpeg -framerate 30 -i png1\image_%05d.png -vcodec libx264 -preset slower -tune animation -pix_fmt yuv420p -s 1280x720 -aspect 16:9 -r 30 temp.mp4

ffmpegを使って静止画像を結合して動画にします。
このとき、動画のコーデック(H264)、サイズ(1280x720)、アスペクト比(16:9)、フレームレート(30)、コンテナ(mp4)も指定します。
画質はGPU(h264_nvenc)よりも、CPU(libx264)の方が良いので、libx264を使います。

5.作成した動画に音声を付ける

ffmpeg -i temp.mp4 -i temp.aac -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 nanoha_op_eh.mp4

先に分離しておいた音声データを結合し、動画にします。

画質改善結果

処理にかかった時間など。

処理 時間 その他
静止画に分解 すぐに終了 3118枚の画像ができました
音声分離 すぐに終了
Real-ESRGAN処理 約4分40秒 GPUの使用率が60%ぐらいになりました
動画再構成 約40秒 CPUの使用率は100%近く
音声結合 すぐに終了

今回、Real-ESRGANのオプションは標準で行いました。
オプションや画像の大きさによって処理時間はかなり変わります。

Real-ESRGAN処理をしているときのGPUの稼働状況です。

GPUは約60%、温度は約85℃になっていました。
GPUは「3D」だけグラフが上がっています。
メモリーをもっと食うと思っていましたが意外です。
GPUのファンが大きな音を立てて回りました。
Real-ESRGAN処理をしているときのCPUの稼働状況です。

約15%、周波数も5GHzになっています。

できた動画はというと、

(ほんとうは、ちゃんとした画像です)

  • 輪郭がはっきりし、
  • ”ぼけ”がなくなり、
  • 「色を塗り直した」ような感じ になりました。

音声もうまく合っていて、十分満足できる品質です。

使うことができるか

静止画に分解、音声分離、音声結合はすぐに終わりますが、Real-ESRGAN処理と動画再構成に、合わせて5分20秒かかっています。
もし、24分(30分番組は、オープニング、エンディング込みで正味24分です)の動画ならば、約75分かかる計算になります。
オープニングやエンディングを高画質化するのならば良いのですが、本編を高画質化することは、私の環境では、実用的ではないようです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?