FullHD映像を4Kに変換する
以下の投稿で4K⇒FHD変換の方法を紹介しましたが、今回は逆にFullHD動画を4Kに変換(アップスケール/アップスケーリング/アップコンバート)する方法を紹介したいと思います。
wave.hatenablog.com
今回も同様にffmpegを使用しますので、Windows/Mac/Linuxいずれでも構いませんが、PCが必要です。
変換コマンド
基本
以下のコマンド1発で変換できます。
ffmpeg -i INPUT_FILE -vf scale=-1:2160 OUTPUT_FILE
冒頭で紹介した4K⇒FHD変換の投稿を読んでいただいた方は気付いたかもしれませんが、scaleオプションの垂直解像度指定が2160に変わっただけです。
応用
4K⇒FHD編と同様に、リスケール(今回は拡大)のアルゴリズムを11種類(fast_bilinear, bilinear, bicubic, experimental, neighbor, area, bicublin, gauss, sinc, lanczos, spline)から指定できます。
lanczosを選択した場合のコマンド例は以下の通り。
ffmpeg -i INPUT_FILE -vf scale=-1:2160:flags=lanczos OUTPUT_FILE
accurate_rndオプションを付加することで、演算時に高精度な端数処理行わせることができ、高画質を期待できます。
ffmpeg -i INPUT_FILE -vf scale=-1:2160:flags=lanczos+accurate_rnd OUTPUT_FILE
4K⇒FHD変換時は縮小(多くのデータから少ないデータにまとめる)処理なので、アルゴリズムをどうするかシビアに考える必要性は相対的に低いのですが、FHD⇒4Kの場合は少ないデータから多くのデータを生成する必要があります。具体的にはFullHD比で4倍のピクセルデータを捻り出さなければなりません。言い換えるなら、出力に必要な情報の4分の3も入力データが足りないのです。それだけ大量の情報を、良い感じに補完(言い方を変えると捏造)するのは至難の業であることが想像つくのではないでしょうか。
故に、どのアルゴリズムが変換対象の映像に対して適しているか、慎重に見極める必要があります。いや、画質なんてどうでもいい、とりあえず4Kになってればいいんだよという用途(ちょっと思い当たりませんが)であれば何でも構いませんけど。
以下に、各アルゴリズムによる拡大例を示します。
アルゴリズム比較
以下の検証用画像(水平・垂直線、15deg間隔の直線、同心円状の曲線で構成)をFullHDから4Kに変換する場合と同様に、各アルゴリズム(accurate_rndを付与)で縦横2倍(合計4倍)のピクセル数に変換してみます(JPEG等の圧縮アルゴリズムの影響を排除するため、入出力共にPNGで実験しています)。
検証用画像
fast_bilinear
bilinear
bicubic
experimental
neighbor
area
bicublin
gauss
sinc
lanczos
spline
まとめ
水平線と垂直線以外は結構違うと思いませんか?ジャギーが目につくものや、輪郭がはっきりしないものなど。
違いがよく判らない方のために、GIFにして時間軸に並べてみます。
水平・垂直線だけで構成されている映像なら、どのアルゴリズムでも大差ないですが、そんな映像はわざわざCGで作らなければありません。実際の映像には直線や多様な曲線的要素が含まれています。検証用画像は単純にコントラスト比が最大となる白と黒だけで構成していますが、実際の多くの映像はカラー映像ですから輪郭線(境界線)付近の色の混じり具合など、実際に目視してみると気になる点も多いはずです。
故に、画質観点からは変換対象映像とアルゴリズムの組み合わせを複数試してみた後に、ベストだと感じるものを最終的に採用するのがよいでしょう。ですが、短くない変換時間を要するため、全てのアルゴリズムを試行するのは現実的ではないかもしれません。その際は、上記サンプルなどを参考にアルゴリズムを絞り込んでみるなどの工夫をするのが良いのではないでしょうか*1。
また、このようにして生成された4K映像は、元のソース映像と変換時のコマンドを残しておけば何度でも生成することができ、無駄に大きいだけでマスタとして保管すべき映像ではありません。恒久的に残すなら変換元の映像ファイルの方です。
以上。