[ソフトウェア] ffmpeg+libvpxでVP9(WebM)エンコード:使い方と主要コマンドオプション【動画】
ffmpegとlibvpxでは、微妙に設定の仕方が異なる模様。注意。
また解説サイトによって言っていることがまちまちで、中には公式サイトでもページによって書かれていることが異なる場合もある。
基本的には、自分でいろいろ試しながらやってみるしかない。
-crf:固定品質
値:0~63
(?)Constant Rate Formatの略。
フレームごとに一定のビットレートを保持し、全体のクオリティを高く保つための設定。
名前からすると固定ビットレート(CBR)のようだが実際には異なり、VBRの一種。
動画の質を上げるためにエンコード後の動画サイズや処理負荷を気にしないなら、これを選んだほうがいい。
設定できる値は0~63で、0になるほどクオリティが高い。
同時に「-b:v」を設定できる。-crf時にこれを指定すると、「最大平均ビットレート」を指定することになる。
そのため、-b:vで低めの値を設定すると、-crfの値にかかわらず-b:vの値を基準にエンコードされてしまって意味がなくなるので、同時にかならず「-b:v 0」オプションを指定する。
また、少しでも動画のクオリティを上げるためには、下記の-qmin/-qmaxを指定したほうがいい。
コマンドの例:
-vf scale=640x480 -b:v 0 -deadline good -speed 0 -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm
-b:v:平均ビットレート(ABR)
値:数値+M(メガビット)、K(キロビット)
-b:vを指定すれば、おのずとこのABRになる。
全体の平均ビットレートを指定する。要するに、普通のVBR。
-crfと同じく、少しでも動画のクオリティを上げるためには、下記の-qmin/-qmaxを指定したほうがいい。
-deadline
値:realtime, good, best
デフォルト値:good
別名:-quality(ffmpeg)
処理付加と動画クオリティの関係を大まかに決める。
best:エンコードの負荷は大きいが、動画クオリティは最もいい。
good:デフォルト値。大半の場合にはこれで十分。
realtime:高速エンコーディング。ライブ向け。
-cpu-used
値の範囲:0~4(-deadlineがgood/best)、5~8(-deadlineがrealtime)
デフォルト値:0
別名:-speed(ffmpeg)
値が0に近いほど、指定されたビットレートが守られ、動画のクオリティが上がるものの、反対に処理の負荷が多くなる(エンコード時間が長くなる)。
省略されることが多いが、他の設定が同じでもこれが異なると、出力された動画のクオリティが変わってくる重要なオプション。
なお、「0」を指定すると、信じがたいほどに処理に時間がかかる。よほどの理由がない限り、1~4の値を指定するようにしよう。
「4」以上を指定すると、動画を最適化するRate–distortion optimization(RDO)機能がオフになるので注意。
また、-deadlineの指定によって、この-cpu-usedで設定できる値が異なってくる。
2-passでエンコードする場合、パスごとにそれぞれ別の設定をできる。1回目は低めの値でいい(4くらい)。
なお、マイナスの値も指定できるが、プラスの場合となんら変わりない。わかりづらくなるだけなので、使わないようにしよう。
-qmin/-qmax
値:数値+M(メガビット)、K(キロビット)
別名:-minrate/-maxrate
quality minimum/quality maximumの略。ビットレートの下限値と上限値を決める。
-b:vや-crfの値を基準に決める。
ABRのための設定のようにも思えるが、実際には-crfでも使う。できるだけクオリティを上げたい場合は、動画の出力解像度に合わせて両方指定したほうがいい。
主要な参考値はこちら。
ABR
Frame Size/Frame Rate | Target Bitrate (VOD, kbps) | Min Bitrate (50%) | Max Bitrate (145%) |
---|---|---|---|
640x360p @ 24,25,30 | 276 | 138 | 400 |
640x480p @ 24,25,30(VGA) | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280x720p @ 24,25,30 | 1024 | 512 | 1485 |
1280x720p @ 50,60 | 1800 | 900 | 2610 |
1920x1080p @ 24,25,30(フルHD) | 1800 | 900 | 2610 |
1920x1080p @ 50,60 | 3000 | 1500 | 4350 |
3840x2160p @ 24,25,30(4K) | 12000 | 6000 | 17400 |
3840x2160p @ 50,60 | 18000 | 9000 | 26100 |
参考サイト:Google Recommended Settings for VOD
-threads
エンコード時に利用するマルチコアCPUのスレッド数を指定する。
物理コア数のことなのか論理コア数のことなのか、ソフトウェア上のスレッドのことなのか不明。
-lossless:ロスレスVP9(可逆圧縮)
可逆圧縮にする場合は「1」を指定する。
レビュー
情報がひとまとめになっているサイトが公式を含めひとつもなく、非常にわかりづらい。
またffmpegを利用する場合、そちらのコマンド、オプションを覚えなければならない。
この辺の問題も、なかなかWebMが普及しない原因か。
VP9(libvpx-vp9) のエンコード設定について | ニコラボ
最新ffmpeg/高度なオプション – netvista
encoding – Why low qmax value improve video quality? – Stack Overflow