エンコード設定の読み方 — CRF・プリセット・2パスは何を変えるのか
ffmpegのコマンドに並ぶ -crf 23 -preset slow -pass 2 は、それぞれ別の質問に答えるつまみです。何を一定に保つか(CRF)、探索にどれだけ時間をかけるか(プリセット)、全体を先に読むか(2パス)。量子化ステップの式とレート歪み最適化から、各パラメータが効く理由を1つずつ解き、コピペで使える実コマンドと現場の落とし穴まで降ります。
比喩: 引っ越し業者への3つの注文
動画エンコードの設定は、引っ越し業者への注文に置き換えるとほぼそのまま通じます。
1つ目の注文は「予算で頼むか、仕上がりで頼むか」。トラック2台分の予算で頼めば、荷物が多かろうと少なかろうとコストは固定です。これがビットレート指定。逆に「食器は1枚も割らないでください、トラックの台数はお任せします」と頼めば、仕上がりが固定でコストは成り行きです。これがCRF(品質指定)。
2つ目は「作業員がどれだけ丁寧に詰めるか」。時間をかけて隙間なく箱詰めすれば、同じ仕上がりでも箱の数は減ります。これがプリセット。速いプリセットは雑な箱詰め、遅いプリセットは丁寧な箱詰めです。
3つ目は「下見をしてから荷造りするか」。先に家中を見て回れば「本棚は大きい箱、洗面用品は小さい箱」と最適に配分できます。これが2パスです。
この3つは独立したつまみです。ここを混同すると設定の意味が読めなくなるので、1つずつ中身を開けていきます。
直感: 3つのつまみは別の質問に答えている
ffmpegでよく見る次のコマンドを、質問に分解してみます。
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a copy output.mp4
-crf 23— 何を一定に保つか? → 品質を一定に保ち、ファイルサイズは成り行き-preset slow— 圧縮の選択肢をどれだけ丁寧に探すか? → 時間をかけて探し、同じ品質をより少ないビットで実現- (このコマンドに無い)
-pass 1/2— 全体を先に読んでからビットを配るか? → サイズを狙い撃ちしたいときだけ使う
よくある誤解が「プリセットを遅くすると画質が上がる」です。半分誤りで、CRF指定なら画質はほぼ同じまま、ファイルが小さくなるが正解です。プリセットは品質のつまみではなく、同じ品質を達成するコストのつまみです。
仕組みの根っこ: すべてはQP——「どれだけ丸めるか」
3つのつまみの意味を理解するには、その下にある1つの数字を知る必要があります。量子化パラメータ(QP)です。
動画圧縮の基礎で見たように、エンコーダは画面をブロックに分け、周波数変換した係数を「割って丸める」ことで情報を捨てます。どれだけ粗く丸めるかを決める割り算の分母が量子化ステップで、H.264ではQP(0〜51の整数)から次の関係で決まります。
読み下すと「QPが6増えるごとに、丸めの粗さが2倍になる」。 は割り算の分母(大きいほど多くの情報が捨てられる)、 はエンコーダが場面ごとに選ぶ整数です。QPが小さければ係数がほぼそのまま残って高画質・大容量、QPが大きければ係数がゼロだらけになって低画質・小容量。動画エンコードの品質とサイズは、突き詰めればこの1つの数字の綱引きです。
丸めが画質をどう壊すかは、静止画ですが同じ原理をその場で体感できます。
コメント
コメントにはログインが必要です