2022年1月7日金曜日

3DSの映像を4K解像度に変換する方法

 3DSの液晶解像度は上画面が400x240ピクセル、下画面が320x240ピクセルとなっています。とてもお手軽な解像度なので、録画したデータをPCの画面で拡大するとかなり厳しい見見た目になります。
 ということで、無料で利用できる機能・サービスの範囲で解像度の低い映像を高解像度化する方法の1例をご紹介します。

 動画を直接高解像度化できると簡単なのですが、無料でなんとかしようとしていますのでひと手間、二手間必要です。
 静止画であれば高解像度化はかなり方法が出回っています。お勧めはこちらのサイトで紹介されている「LapSRN」です。pythonの経験がないと難しいですが、もし読める程度のスキルがあればサンプルも掲載されているのでイケると思います。

Super Resolution in OpenCV

ざっくりとした手順は、録画した動画をffmpegを利用して静止画に分解します。その静止画を1枚づつ上記サイトで紹介されている手法で高解像度化します。全ての静止画の高解像度化が終わったら、ffmpegを利用して逆に動画に戻す、という方法を使います。1分の動画を処理するのにも数時間かかりますが、出来上がりはなかなか満足するのではないかと思います。それはいってみましょう!

■録画

 PC上でエミュレーションされている前提ですが、まずはなんとか録画しましょう。お手軽なのはWindows本体の機能でウィンドウごと録画してしまう方法です。Xbox Game Barという機能がありますので、調べてみてください。静止画でキャプチャするとこんな感じになりますね。


■録画した映像から音声の抽出

 ffmpegの紹介記事を見てもらうと良いですが、コマンドとしてはこんな感じです。mv.mp4の動画ファイルから音声のみを192Kの音質で抽出します。後で使うのでこんな感じで抽出しておきます。

ffmpeg -i mv.mp4 -f mp3 -ab 192000 -vn bgm.mp3

■動画を静止画に分解

 動画を指定したコマ数(1秒間に何画像抽出するか?)で静止画に落とします。以下の例だと、mv.mp4という動画ファイルを、"crack"というディレクトリに、image_00001.pngから順番に数字を加算して画像ファイルにしてくれます。1秒10枚と指定すれば、60秒の映像なら600枚になります。
 "-r"で指定している30はフレーム数です。元の映像ファイルのプロパティを確認すればわかりますので同じ値を指定しておくのが無難です。

ffmpeg -i mv.mp4 -vcodec png -r 30 crack\image_%05d.png

■静止画を高解像度化

 たったこれだけで高解像度化されます。これはpathに指定されたファイルを高解像度化して変数resultに格納しているだけですので、順番に読み込み、保存する処理を加えてください。PCのスペックに依存しますが、1枚処理するのに数分かかりますので寝る前に走らせておく、そんな感じです。

1sr = cv2.dnn_superres.DnnSuperResImpl_create()
2
3path = "LapSRN_x8.pb"
4 
5sr.readModel(path)
6 
7sr.setModel("lapsrn",8)
8 
9result = sr.upsample(img)

 

■高解像度化した静止画を動画に戻す

 静止画に分解するときの逆の処理です。

ffmpeg -y -r 10 -i crack\%05d.png -an -vcodec libx264 -pix_fmt yuv420p output.mp4

■音声を加える

 保存しておいた音声を付け加えます。

ffmpeg -y -i mv.mp4  -i bgm.mp3 -c:a aac -map 0:v:0 -map 1:a:0 fin.mp4

0 件のコメント:

コメントを投稿

妖怪ウォッチ2 QRコード集

ニコニコ動画に投稿させて頂いた動画を一覧にしておきました。メモにご利用ください。