Twitterに投稿 はてなブックマークに追加 Google Bookmarksに追加

目次 >> ffmpeg >> H.264でエンコード

H.264でエンコードする

H.264でエンコードする場合、2つのモードがある。品質固定モードと、ビットレート固定モードである。
これらは排他的であり、なにもオプションを指定しないと、品質固定モードでエンコードされる。

H.264を指定するには

-c:v libx264

とする。

品質固定モード

品質は-crfで指定する。
とれる範囲は0から51。値が小さいほど、高画質になるが、その分ファイルサイズは増える。
デフォルト値は23。
このモードは1パスである。

crf値の選択

ビットレートは、crf値が6減るごとに、およそ倍になる。
18以下でほぼ見た目上の劣化がなくなる。0でロスレスとなるが、ロスレスエンコードには、-cfr 0よりも-qp 0が推奨されている。なおロスレスエンコードを行うと、ffmpegベースのプレーヤー以外では再生できないプレーヤーもあるので注意。
デフォルト値は23であり、通常使われる範囲としては18から28の間が推奨されるが、アーカイブが目的であれば、18よりも小さい値を、モバイル機器で一時的に見るだけであれば、28より大きい値を指定するのもありである。

ビットレート一定モード

-b:vでビットレートを指定すると、品質一定モードからビットレート一定のモードに変わる。
1パスと2パスモードでエンコードできる。当然のことながら2パスの方が同じビットレートでも画質は上がる。保存用であればフルHDで25Mbps、4kで100Mbps程度はほしい。

プリセット

-presetオプションはエンコード速度と品質もしくは出来上がるファイルサイズを決定する。

-preset [ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo]

デフォルトはmedium。

品質固定モードの場合、出来上がる品質は同じであるが、速度が速くなるほど、ファイルサイズは大きくなる。
時間がある限り-preset praceboを使うとより小さいファイルにすることができる。

ビットレート一定の場合は、同じファイルサイズでも、時間をかけた分、品質が向上する。

tune

プリセットで指定した後、さらにtuneで詳細な指定が行ない、動画を最適化できる。
通常使うオプションは、

-tune [film, animation, grain, stillimage, fastdecode, zerolatency]

で、デフォルト値では無指定である。

filmは実写の動画向きに最適化される。
animationはアニメ向けに最適化される。
grainはざらざらが残るような古い映画などをエンコードする際に使われる。
stillimageは、スライドショーなど、動きのほとんどない場合に使う。

fastdecodeはCABACおよびin-loop deblockingを無効にし、デコードの際の負荷を減らす。その分画質は落ちる。モバイル機器など、貧弱な環境向けにエンコードしたい場合に使う。

zerolatencyは再生の際のレイテンシーを減らしたい場合に使う。頭出しは速くなるが、ファイルサイズは少し増加する。

複数のオプション、例えばfastdecodeとzerolatencyを両方指定したい場合は、カンマで区切って指定する。

-tune fastdecode,zerolatency

H.264で互換性を高める

いくつかの古いプレーヤーは、YUV 4:2:0でエンコードされたファイルの再生しかサポートしていない。
また、Windowsエクスプローラーでサムネイルを表示させる場合や、PowerPointで再生するためには、このオプションが必須である。
YUV 4:2:0でエンコードするには、

-pix_fmt yuv420p

もしくは

-vf format=yuv420p

オプションを付加する。なお、複数の-vfを入れると、最後ののみ有効になるので、-vfオプションが複数ある場合はカンマで区切ること。

ダウンロードしながらの再生に対応する

動画のインデックス情報はmoov atomに格納されているが、これは通常、ファイルの最後に付加されている。

エンコードする際に、

-movflags +faststart

というオプションをつけると、moov atomがファイルの最初につくようになり、動画ファイルを完全にダウンロードしなくても再生を始めることができるようになる。

なお、動画サイトではサイト側で自動的に付加される。

最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて20.04、21.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2021 Chikuma Engineering Co., Ltd. All Rights Reserved.