4K動画をFullHDに変換する

 最近のスマートフォンでは、ハイエンドではなくミッドレンジモデルでも4K解像度で録画可能なモデルが増えてきています。
 せっかくならキレイに記録したいし、端末にその機能があるなら4Kで録画するというユーザも多いのではないでしょうか。

 ところで4Kで録画しても、搭載している液晶は極々一部の端末を除きFullHD以下の解像度であることがほとんどです。このため4K解像度で再生することができず、端末の液晶解像度に縮小された映像を見るという再生形態が多いのではないでしょうか。
 これでは4K映像のメリットは発揮しきれず、ファイルサイズが無駄に大きく、内蔵メモリやSDカードの容量を圧迫した状態になってしまっていると言うこともできるでしょう。

 また、スマートフォンに限らず、デジタルカメラの録画機能やアクションカムなどでも4K解像度での記録に対応したモデルが増えてきています。
 それでも、再生するPCやTVはFullHD以下の解像度であることが多いのではないでしょうか。

 ということで、以下に4K映像をFullHDに変換(縮小/リスケール/ダウンサンプリング)する方法を示します。
 

 ここで紹介する方法では、変換にはffmpegを使用します。Windows/Mac/Linuxのいずれでも構いませんが、PCが必要です。

変換コマンド

基本

 短いコマンド1発で変換できます。

ffmpeg -i INPUT_FILE -vf scale=-1:1080 OUTPUT_FILE

 INPUT_FILEには入力ファイル名(変換したいファイル名)を、OUTPUT_FILEには出力ファイル名(変換後のファイル名)を指定します。

REM example
ffmpeg -i IMG_0001.mov -vf scale=-1:1080 FHD_IMG_0001.mp4

 scale=-1:1080で垂直解像度をFullHDの1080に指定しています(720を指定すればHD解像度になります)。
 別にscale=1920:-1と指定し、水平解像度をFullHDの1920に指定しても同じです(1280を指定すればHD解像度になります)。
 ※-1は指定した水平or垂直解像度と入力ファイルのアスペクト比(縦横比)に合わせて、垂直or水平解像度を自動設定するという意味です。
 入力ファイルのアスペクト比が確実に16:9だと解っているのであれば*1、scale=1920:1080と指定しても問題ありません。
 

応用

 縮小時のアルゴリズムを指定することができます。指定可能なアルゴリズムは、以下の11種類あります。

fast_bilinear
高速バイリニア
bilinear
バイリニア
bicubic
バイキュービック
experimental
実験的アルゴリズム
neighbor
ネイバー(近傍)
area
エリア(領域平均)
bicublin
バイキューブリン(輝度にはバイキュービックを、色にはバイリニアを適用)
gauss
ガウス
sinc
シンク(ジンク)
lanczos
ランチョス
spline
スプライン(自然なバイキュービックスプライン)

 experimentalは何をしているのかソースコードを読まないと解りませんが、その他は一般的なスケーリングアルゴリズムです。それぞれの具体的な処理を記述すると膨大になってしまうので、興味のある方は適宜検索していただきたく。
 なお、全ての場合において確実に優れたアルゴリズムは残念ながらありません(だから多様な種類がある)ので、入力ファイルに応じて好みのアルゴリズムを探してみるしかありません。

 例えば、スケーリングアルゴリズムとしてlanczosを指定する場合は、以下のようなコマンドとなります。

ffmpeg -i INPUT_FILE -vf scale=-1:1080:flags=lanczos OUTPUT_FILE

 品質を優先し、各アルゴリズムでの演算時の端数処理を高精度に行う場合は、以下のようにaccurate_rndオプションを付加出来ます。

ffmpeg -i INPUT_FILE -vf scale=-1:1080:flags=lanczos+accurate_rnd OUTPUT_FILE

 

元ファイル捨てていいの?

 スマートフォンなど記憶容量の限られた端末には変換後の小さいファイルを残し、元の4K解像度のファイルは外付けHDDやNAS等に保存しておくような運用が望ましいのではないでしょうか。
 今後4K解像度のテレビやモニタ等を絶対に買わないという方は削除してもいいかもしれませんが。
 

そもそも4Kではなく、FullHD以下で撮ればいいのでは?

 面倒なことはしたくないという人や、画質とかよく解らんしどうでもいいという人にとっては、最初からFullHD以下で撮るのが面倒が無くていいと思います。

 ですが、ほとんどの4K録画対応機は、FullHD録画時よりも4K録画時の方が高ビットレートで記録できます。だからこそ、情報量が多く高画質に繋がっています。(約200万画素のFullHDに対し、4Kでは4倍の約800万画素となるため、高ビットレートが必要となりファイルサイズが大きくなってしまうわけです。)
 高ビットレートの4K映像からFullHDに変換後の映像のビットレートが、直接FullHDで録画した場合より高ければ、同じFullHD解像度であっても、より高画質を期待できます*2
 ファイルサイズが 4Kで録画したファイル > 4Kから変換したFullHD > FullHDで直接録画したファイル といった関係になるよう変換するのがよいでしょう。
 上記のコマンド例には特に記載していませんが、ffmpegではビットレートを指定することもできます(-b:v 30Mで映像ビットレート30Mbps)。但し、ビットレートが高すぎると端末に依っては再生できないこともありますので、一気に大量に変換せず、まず1ファイルずつ試してみるといいと思います。


 かなり掻い摘んだ説明のため、ffmpegを全く使用したことが無いユーザにとっては、例示したオプション以外の指定に困惑するかもしれませんが、とりあえず単純な変換だけなら上記に掲載したようにコマンド1発で簡単に行えます。
 



以上。

*1:実は入力ファイルのアスペクト比が4:3等だったというような場合には、出力映像が横に伸びてしまいます。

*2:高感度ノイズを記録するのにビットレートを消費するなど、闇雲にビットレートを高めれば必ず高画質になるというわけではない。また、変換元がH.265、変換先がH.264などコーデックが異なる場合には単純にビットレートで比較できない。