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で実験しています)。
 

検証用画像

f:id:kachine:20160910121556p:plain
 

fast_bilinear

f:id:kachine:20160910122005p:plain
 

bilinear

f:id:kachine:20160910122130p:plain
 

bicubic

f:id:kachine:20160910122143p:plain
 

experimental

f:id:kachine:20160910122156p:plain
 

neighbor

f:id:kachine:20160910122214p:plain
 

area

f:id:kachine:20160910122234p:plain
 

bicublin

f:id:kachine:20160910122248p:plain
 

gauss

f:id:kachine:20160910122305p:plain
 

sinc

f:id:kachine:20160910122317p:plain
 

lanczos

f:id:kachine:20160910122332p:plain
 

spline

f:id:kachine:20160910122346p:plain
 

まとめ

 水平線と垂直線以外は結構違うと思いませんか?ジャギーが目につくものや、輪郭がはっきりしないものなど。
 違いがよく判らない方のために、GIFにして時間軸に並べてみます。
f:id:kachine:20160910123039g:plain
 水平・垂直線だけで構成されている映像なら、どのアルゴリズムでも大差ないですが、そんな映像はわざわざCGで作らなければありません。実際の映像には直線や多様な曲線的要素が含まれています。検証用画像は単純にコントラスト比が最大となる白と黒だけで構成していますが、実際の多くの映像はカラー映像ですから輪郭線(境界線)付近の色の混じり具合など、実際に目視してみると気になる点も多いはずです。
 故に、画質観点からは変換対象映像とアルゴリズムの組み合わせを複数試してみた後に、ベストだと感じるものを最終的に採用するのがよいでしょう。ですが、短くない変換時間を要するため、全てのアルゴリズムを試行するのは現実的ではないかもしれません。その際は、上記サンプルなどを参考にアルゴリズムを絞り込んでみるなどの工夫をするのが良いのではないでしょうか*1
 また、このようにして生成された4K映像は、元のソース映像と変換時のコマンドを残しておけば何度でも生成することができ、無駄に大きいだけでマスタとして保管すべき映像ではありません。恒久的に残すなら変換元の映像ファイルの方です。
 



以上。

*1:もし時間と予算に余裕があるのなら、究極的には撮り直し・レンダリングし直し・描き直し等々、高解像度ソースを改めて制作すればいいのでしょうけど、それこそ現実的ではないでしょう