x264 CLI オプション解説(設定解説)

ソフトウェア
スポンサーリンク

概要

  • X264 CLI のロングヘルプ( x264 –longhelp)に記載された事項についての解説です。
  • ここでは全てコマンドライン版の x264 でのオプション表示で記載しています。 AviUtl のプラグインとして使用可能な「 x264guiEx (拡張x264出力(GUI)Ex) 」とは表示が異なることには注意していただきたいものの、項目の名前を適宜読み替えていただければ参考にはなるかと思います。
  • X264 はRev3000 (2020/04/11) で解説します。期間の経過に伴って、オプションが追加されたり、変更される場合があるため、鵜呑みにせず用途に応じて設定ください。
  • フルヘルプ(x264 –fullhelp)については多岐に渡り過ぎる事から解説しませんが、使用頻度や重要度からすると、殆どの場合はロングヘルプのみの設定で問題無いと思います。
  • 解説は、動画の仕組みをある程度分かる人向けに書いています。
  • 青色マーカーの部分は、[x264 –longhelp]で表示される内容をそのまま引用しています。つまり、その他の部分が筆者の解説や見解になります。
  • 管理人はx264の開発者でもなければ、エンジニアでもありません。間違っている場合もある事から、参考までにお願いします。
  • 現時点では、解説は未完成です。気が向いたときに適宜更新をしていきます。

参考文献

  • wiki H.264 様
    • https://ja.wikipedia.org/wiki/H.264
  • 猫科研究所(felid labo) 様
    • http://up-cat.net/FrontPage.html
  • まるも製作所 様
    • https://www.marumo.ne.jp
  • 歴代2ch (5ch) 様

Syntax : x264 core:160 r3000 33f9e14

  • x264 core:160 r3000 33f9e14
  • Syntax: x264 [options] -o outfile infile
  • Infile can be raw (in which case resolution is required),
  • or YUV4MPEG (.y4m), or Avisynth if compiled withsupport (yes). or libav formats if compiled with lavf support (yes) or ffms support (no).
  • Outfile type is selected by filename:
  • .264 -> Raw bytestream
  • .mkv -> Matroska
  • .flv -> Flash Video
  • .mp4 -> MP4 if compiled withGPAC or L-SMASH support (no)
  • Output bit depth: 8/10

Options:

-h, –help

List basic options

  • x264のヘルプ(オプション)を表示させるコマンド①。
  • “–help” では本当に大切な項目や多用される項目のみ表示されるようになっております。最近のx264は賢い事から、拘りがない限りはここに出てくるオプションを設定するのみで事足りると思われます。気になることがあればまずはこれを。
  • まずは “–help” オプションに載っているオプションを弄ってみて、それでも納得いかない場合のみ “–longhelp” や “–fullhelp” の項目を弄ってみると良いと考えます。

–longhelp

List more options

  • x264のヘルプ(オプション)を表示させるコマンド②。
  • –helpでは表示されないもの含め、(特殊なオプションを除いて)x264で使用可能な殆どの項目を表示します。
  • “–help” には載っていないようなオプションの細かい詳細情報が記載されていることもあるため、暇なときにでも読んでみると参考になるかもしれません。
  • 殆どの場合は “–longhelp” の内容までで事足りると思われます。それでも納得出来ない方や特殊な事をしたい場合は “–fullhelp” を参照してみてください。

–fullhelp

List all options

  • x264のヘルプ(オプション)を表示させるコマンド③。
  • x264に搭載されている全てのオプションを表示できます。つまり、”–longhelp” にすら載ってないような特殊なオプションを調べることができます。
  • また一部のコマンドでは、”–longhelp” に項目はあっても、そこで選択可能なオプションの選択肢が省略されている場合があります。そういった特殊な選択肢や、その他の補足説明まで確認する事が出来ます。
  • 通常は “–longhelp” の内容で事足りるはずですが、 “–longhelp” には表示されない特殊用途のオプションを使用したい方や、更に設定を煮詰めたい一部の方は読んでみてもよいかもしれません。
  • はじめから “–fullhelp” をみると余り文字量で気が遠くなるので、–help, –longhelp を読んでから、それでも足りない場合のみに、段階を追って読むようにした方が良いと思われれます。そうじゃないと心が折れます、、、

Example usage:

  • Constant quality mode:
    • x264 –crf 24 -o
  • Two-pass with a bitrate of 1000kbps:
    • x264 –pass 1 –bitrate 1000 -o
    • x264 –pass 2 –bitrate 1000 -o
  • Lossless:
    • x264 –qp 0 -o
    • Maximum PSNR at the cost of speed and visual quality:
    • x264 –preset placebo –tune psnr -o
    • Constant bitrate at 1000kbps with a 2 second-buffer:
    • x264 –vbv-bufsize 2000 –bitrate 1000 -o

Presets:

–profile

Force the limits of an H.264 profile
Overrides all settings.
– baseline, main, high, high10, high422, high444

  • h264のプロファイル(ビデオの再生負荷や使用メモリ量を制限するもの)を設定するためのオプションです。h264はプロファイルによって、使用可能なオプションやビットレートの上限が定められています。
  • もしプロファイルに関する細かい事項が知りたい方は、「wiki h264」分かりやすく詳しく記載されていることから、気になる方は調べてみていただけると幸せになれると思います。
  • プロファイルは「baseline, main, high, high10, high422, high444」から選択可能です。
  • “–profile” にてプロファイルを指定すると、もし後続で特定プロファイルで使用不可能(規格で許された範囲を超える)なオプションを使用したとしても、x264がプロファイル内に収まるように下方修正してくれます。つまり「”–profile” は全ての設定に優先される(ユーザーが指定したオプションを上書きします)」ということに注意が必要です。
  • 現実的に使うは範囲としては「main ~ high」あたりで、それ以外を使う場合はかなり限定的な状況になるかと思われます。特にパソコン向けの動画では、効果は非常に限定的になると考えます。ただしパソコン以外で再生する用途、例えばBlu-ray機器やモバイル機器用途等でプロファイルを限定したい場合には設定する必要が生じる可能性があります。
  • 「main ~ high」以外で使用する可能性があるものを強いてあげるならば、「high10」あたりでしょうか。これは10bitエンコードを行う場合に必要になってきます。10bit動画はそれなりの知見が無いとエンコード設定や再生環境の準備が大変ですが、チャレンジしたい方はしてみても良いかもしれません。(10bitエンコードは、階調飛び(階調割れ、バンディングノイズ、とも言われます)に効果的と言われています。)

–preset

Use a preset to select encoding settings [medium]
Overridden by user settings.
– ultrafast,superfast,veryfast,faster,fast
– medium,slow,slower,veryslow,placebo

  • x264の開発者が準備したエンコードのプリセットを使用できるオプションです。ここに記載されたプリセットを選ぶだけで、基本的にはバランスの取れた設定をしてくれる優れた機能です。
  • 最近のx264は優れているため、プリセット指定だけでもそれなりに良い結果を得られます。初心者の方は積極的に使うべきで、ある程度慣れてから、オプションをカスタマイズしていくのがよいと思います。x264は余りに機能が多く、初めから全てを使いこなすことは困難かと思われます。
  • プリセットは「ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo」から選択できます。最も圧縮が高速だが画質が悪いのがultrafast、その逆で、最も低速だが画質がが良いのはplaceboになります。
  • “–preset” で設定された値は「ユーザーが指定したオプションで上書きされる」事に注意してください(ユーザーが設定したオプションを上書きする “–profile” とは反対の動きですね)。恐らくですが、x264開発者は “–preset” でベースの設定をつくり、その下地に対してオプションを追加していく方法を想定しているのだと思われます。
  • 個人的には、プリセットは「medium,slow,slower, veryslow」あたりが適正値だと思います。x264 が登場した当時ならばともかく、いまのパソコン性能ならば “fast” 以下の高速エンコードを選ぶ必要性は正直感じません。画質優先で設定してもよいのではと思ってます。
  • ただし “placebo” くらいまで行くと明らかにやり過ぎなので、程々にしてください。エンコード時間が伸びるわりに画質向上も限定的で、メリットは殆どないように思われます。プリセット名が “placebo(気休め)” っていっちゃってるくらいですし。
  • “x264.exe –fullhelp” では、プリセットの中身を確認する事ができます(”–longhelp”では確認できません)。非常に参考になる内容なので、自分でオプションを煮詰めたい場合には、”–fullhelp” の内容を一つの指針にするのも良い選択肢になります。
エンコードが早い順ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
画質が良い順placebo, veryslow, slower, slow, medium, fast, faster, veryfast, superfast, ultrafast

–tune

Tune the settings for a particular type of source or situation
Overridden by user settings.
Multiple tunings are separated by commas.
Only one psy tuning can be used at a time.
– psy tunings: film,animation,grain,stillimage,psnr,ssim
– other tunings: fastdecode,zerolatency

  • 映像ソースの特性を指定する事で、映像の特徴に応じた(x264開発者の)おススメ設定を上書き(一部設定は追加)するオプション。
  • (一例だが) ”animation” を指定すると、x264 の標準設定に対し、アニメに特化した x264 開発者のお勧め設定が上書きされます。一例ですが、具体的には「–bframes {+2} –deblock 1:1 –aq-strength 0.6 etc.」のような形で設定が追加されます。
  • つまりx264開発者は、アニメ素材には「B-framesを多めに、デブロックフィルターを強めに、適応量子化を弱め、(長くなるのであと省略)」の設定が良い、と考えているという事が分かります。
  • ロングヘルプではプリセットの内容は確認できませんが、”x264.exe –fullhelp” でその中身を確認する事ができます。もし自分でオプションを煮詰めたい場合には、”–fullhelp” の内容を一つの指針にするのも良いと思う。っていうか、めっちゃ参考になるのでゼヒみて!

–slow-firstpass

Don’t force faster settings with –pass 1

  • 2パスエンコードを有効にした場合のみに有効なオプションです。なお2パスエンコードとは「1パス目を映像ソースの解析目的でエンコードを行い、2パス目を1パス目の解析情報を元にエンコードを行う手法」の事を指します。
  • もしこの “–slow-firstpass” を使用すると、1パス目もユーザーが指定した全てのオプションを使用して変換が実施されるようになります。
  • 標準オプションのx264では「2パスエンコードの1パス目には、演算負荷が高いオプションは使用しない」設定になっています。これは、1パス目はあくまでも「2パス目のエンコードを行う際の参考情報(ビットレート配分を決めるためのエンコード)であるため」です。分析程度で時間をかけても時間帯効果が無いよね、という事えですね。
  • フルオプションで1パス目をエンコードしたところで、(効果は無いとは言いませんが)効果は限定的であるとされているので、正直使用する意味は殆どないと思われます。”–slow-firstpass” を指定するくらいなら、2パス目の設定を画質重視にしたほうが時間対効果が非常に優れていると考えます。

Frame-type options:

-I, –keyint

Maximum GOP size [250]

  • I-framesの最大間隔を設定します(I-framesとはキーフレームのことを指します)。なおこのオプションはI-framesの最大間隔であって、I-frames の使用頻度ではない事に注意する必要してください。
  • 一般的には、FPSの10倍(30fpsなら300、60fpsなら600)の値に設定することが望ましいといわれています。
  • I-frames は シーンチェンジ(現行フレームと1つ前のフレームと変化量が大きい時)か、 –keyint で指定したフレームが経過した場合に挿入される事になります。つまり、動きの激しいシーンでは –keyint で指定した値を待たずに I-frames はが選択され、逆に動きが少ない場面では –keyint で指定した値 に達した時点で自動的に I-frames が選択される、という動作になります。
  • P-frames、B-frames といった差分フレームは、この I-frames をベースに生成されます(I-frames は 動画のベース/起点になる非常に重要な重要な要素であります)。つまり、差分ではない I-frames には画像データが完全体で存在しているということであり、P-frames や B-frames と比べてサイズが非常に大きいという事に注意する必要があります。
  • ただし過剰に小さい数値を指定すると無駄にIフレームが挿入されることとなります。I-framesはP-frames、B-framesと比較してサイズが大きい事から、必要以上にI-framesが動画に含まれてしまうと、ビットレート指定の場合は全体画質の低下、クオリティー指定の場合は動画サイズの肥大化をまねくことにつながります。増やせばいいというものではなく、バランスが重要です。
  • Iフレームは画質以外にも、動画のシーク速度にも影響する事に注意をしてください。値があまりに大きい数値である場合、シーク速度が落ちる、シーク時に引っかかる、等の弊害が出る可能性があります。
メリットデメリット
過剰な I-frames の選択を避ける事ができるため、ファイルサイズが低下する可能性があるシーク速度が低下する可能性がある
シーク速度が向上する可能性がある過剰に I-frames が選択され、ファイルサイズが増大する可能性がある

-b, –bframes

Number of B-frames between I and P [3]

  • B-framesの最大の連続可能数を設定します(設定可能な最大数は16らしいです)。なお本オプションはB-framesの挿入頻度や閾値ではなく、最大連続可能数であることに注意してください。もしB-framesの挿入頻度や閾値を上げたい場合は、別のオプションでコントロールすることになります。
  • 数値が大きいほどB-frames挿入の自由度があがるため、動画の圧縮率は上がります。ただし数字が大きい程に演算負荷が上がる(エンコード時間が増える)ことには注意が必要です。バランスよく、程々に抑えるべきでしょう。
  • B-frames自体は、一般的にはIフレーム等と比較して画質は悪いものになりますが、ビットレートあたりのコスパがいい為、動画全体をとおしてみると画質は向上します。そもそも、動画は1秒間に30フレーム近く変わるため、B-framesが連続しない限りは、画質低下が分かる事がないと思います。
  • 最近のx264は賢いために、不必要にB-framesが挿入される事はありません。なので、画質面では–bframes になるべく大きな数値を指定した方が有利になります(ただしエンコード負荷は増えます)。
  • アニメ作品は、大きい数字を指定したときの効果が大きいとされます。これは、アニメ作品は実写と比較して類似なフレームが多い事から、B-framesを適用できる割合が高いためです。
  • 事実、x264オプションで ” –tune animation” を指定すると、–bframes が自動的に +2 されます。これはx264開発者も、アニメでは効果が大きいと認めた事に他ならないと考えています。
  • B-framesの最大値が大きいほど動画再生時のメモリの使用量が増えます。仮に余りに大きい数値を指定したとしても、性能に余力があるPCでは問題が起きることは稀でしょう。ただしスマホ等のメモリ量が制限されているモバイル機器では、演算性能やメモリが不足して再生出来なくなる可能性があります。
  • B-frames の数はH264のプロファイルやレベルによって制限されています。つまり “–bframes” で指定しても、”–profile” 等のオプションで上書きされる可能性があることには注意しましょう。
メリットデメリット
画質が向上するエンコード時間が増加する
エンコード時間が低下する画質が低下する

–b-adapt

Adaptive B-frame decision method [1]
Higher values may lower threading efficiency.
– 0: Disabled
– 1: Fast
– 2: Optimal (slow with high –bframes)

  • 「適応B-frames挿入」の設定、つまりB-frames の挿入アルゴリズムを設定する項目です。もう少しわかりやすく説明すると、「あるフレームをB-framesとするのか、P-framesとするのか、を決めるアルゴリズム」を設定する項目です。
  • 動画ファイルは「全てを記録するI-frames/ある画像をベースに差分のみを記録したP-frames/B-frames」から構成されます。つまり似た部分を共有し、差分のみを記録することで大幅なデータ削減を実現している訳です。(この辺りの詳細はオプション「-r, –ref」にて詳しく説明しているため、興味のある人は読んでみていただけると幸いです。)
  • 「P-frames/B-frames」は両方とも差分フレームではありますが、B-frames は P-frames よりも更にデータ量が小さくなります。つまりファイルサイズを小さくするためには、その状況に応じて P-frames, B-frames のどちらを使用するのか、適切に判断する必要があります。当然ながら、B-frames が有効な場面ならば、P-frames ではなく B-frames を使用するべきです。
  • B-frames は動画の画質に対する影響が非常に大きいため、圧縮率を考えるなら「モード2(最適なアルゴリズム)」を使用すべき。
  • オプションの説明に「- 2: Optimal (slow with high –bframes)」とある通り、「モード2(最適なアルゴリズム)」と最大B-frames数には注意が必要すること。「–bframes」を大きな値で設定するほどに、圧縮率は改善するが、一方でエンコード速度低下の影響幅が増大していく。
  • 0:「適応B-frames挿入」を使用しない。エンコード時間優先。
  • 1:「適応B-frames挿入(高速なアルゴリズム)」を使用する。画質はモード2に劣る。
  • 2:「適応B-frames挿入(最適なアルゴリズム)」を使用する。速度はモード1に劣る。
メリットデメリット
0エンコード時間が短縮される「適応B-frames挿入」が無効化される
画質が低下する
1「適応B-frames挿入(高速)」が有効となる
「0」 と比較し画質が向上する
「0」 と比較しエンコード時間が増大する
2「適応B-frames挿入(最適)」が有効となる
「1」 と比較し画質が向上する
「1」 と比較しエンコード時間が増大する

–b-pyramid

Keep some B-frames as references [normal]
– none: Disabled
– strict: Strictly hierarchical pyramid
– normal: Non-strict (not Blu-ray compatible)

  • 「B-framesの参照元に、B-framesを使いますか?」っていう設定。
  • 本来B-framesは、I-framesかP-framesを参照元にして生成される。しかしstrictまたはnormalを指定すると、B-framesの参照元にB-framesを指定する事も可能になる。そうなれば生成元の選択肢が増え、I-frames/P-frames/B-framesの3つからB-framesを生成する事が可能になる。
  • noneの場合に比べて、strictとnormalはビットレート当たりの画質が向上する。ただし、演算負荷が増大する(エンコード時間が延びる)。
  • none:オフにする。これは推奨されない。
  • strict:B-framesの参照元へ、B-framesを使用する事を許可する。ただし有効範囲はBlu-ray規格の範囲内に限定されることから、normal よりも効果は劣る。
  • normal:B-framesの参照元へ、B-framesを使用する事を許可する。h264規格では使用可能であるが、Blu-ray規格では推奨されない(使用不可能?)機能(Strictly hierarchical pyramid)を有効にすることから、Blu-ray向けの動画ファイルを作成する場合には使用できない。パソコンでみる動画ならstrictに拘る必要なく、通常はstrictよりも高画質が狙えるnormalで良い。
メリットデメリット
noneエンコード時間が早い画質が低下する
strictnone 以上に画質が向上する
(none と normal の中間の効果)
Blu-ray向けの動画にも使用できる
none 以上にエンコード時間が増大する
normalstrict 以上に画質が向上するstrict 以上にエンコード時間が増大する
Blu-ray向けの動画には適さない

–open-gop

Use recovery points to close GOPs
Only available with b-frames

–no-cabac

Disable CABAC

  • エントロピー符号化(簡単にいえば圧縮方式)の方式のうち、CABAC方式 を無効化する。これにより、演算負荷は下がるが、圧縮効率(画質)は低下する。
  • h264 では演算負荷が軽くて効果がそこそこのCAVLCと、演算負荷は高いが高圧縮が期待できるCABACの、2つのエントロピー符号化を採用している。
  • 何らかの事情でBaselineプロファイル(一番低いプロファイル)の動画を作りたい場合等に、本オプションを有効にする。
  • h264 にはBaseline, Main, Highの3つのプロファイルが存在する。PCならばHighで問題ないが、モバイル機器等の演算能力に限りがある機器ではBaselineが用いられる場合がある。(BaselineのみCABACを使用できない)
  • CABAC方式は h264 が高性能である事の一翼を占める機能である事から、CABAC方式 の無効化は推奨しない。
指定有無メリットデメリット
エンコード時間が減少する画質が低下する
画質が向上するエンコード時間が増加少する

-r, –ref

Number of reference frames [3]

  • 動画圧縮の根幹を支える技術の一つである、フレーム間予測で使用される、「参照フレームの距離」を指定するオプションです。なお参照フレームとは、差分フレーム(B-frames, P-frames)のベースになる部分の事。
  • 動画とは「画像を高速に、尚且つ連続で表示する事によって、静止画があたかも動いているように見える技術」の事である。イメージし辛い方は、パラパラ漫画(本の角に絵を書いて、高速で変化させるもの)を超高度にしたもの、と捉えて頂くとよいかもしれない。
  • なお日本の放送規格では、画像は約30枚/秒(正確には30000枚/1001秒)の速度で連続で表示されています。アメリカ等の放送規格では25枚/秒の速度で表示されています。
  • だから動画はその仕組み上「前後近くに存在する画像同士は、殆ど同じ(差異は余りない無い)」という事がいえます。例えば自動車のレースを思い浮かべてください。まず背景は、少しだけ引いたりズームしたする場合もあるかもしれませんが、急に大きく動く事はありません。またレース車両についても、タイヤの部分は高速で回っていることから絶えず変化しますが、それ以外の余り変わらないですよね。
  • 動画圧縮とは、この特性を用いて「全てを記録するI-frames/ある画像をベースに差分のみを記録したP-frames/B-frames」から構成されます。つまり似た部分を共有し、差分のみを記録する技術を活用する事によって、大幅なデータ削減を実現している訳です。
  • もしあるフレームを差分フレーム(便宜上 frames [n] とします)で表したいと思ったとき、隣接するフレーム (frames [n+1] とします)が、frames [n] に一番似ている確率が高いはずです。言い換えれば、 frames [n] との近似となる確率は、[frames [n] から離れる程に低下していきます。
  • ただ面白い点として「[frames [n] に隣接する画像([frames [n+1])が、必ずしも [frames [n] に一番似ている(差異が少ない)とは限らない」部分にあります。frames [n+3] が [frames [n+1] よりも、[frames [n] に似ている可能性だってあるわけです。
  • 前置きが長くなってしまいましたがこの「ref」とは、「[frames [n] のベースとなる画像の距離(選択肢)として、frames [n] から何枚先(又は何枚前)まで取りうるか」という事を決めるオプションになります。
  • 当然ながら数を増やせば増やす程に、近似の画像を見つける事が出来る可能性が向上し、動画の圧縮率は向上します。ただ、選択肢が多いという事は、それだけ探すの事に時間がかかる(演算負荷が高くなる)という事です。ですから無暗に大きい値をセットするのではなく、適切な値をセットする事が必要です。
メリットデメリット
圧縮率が向上する。
ビットレート当たり画質が向上する。
演算負荷が増大する
(エンコードの時間が長くなる)
演算負荷が減少する
(エンコードの時間が短くなる)
圧縮率が減少する。
ビットレート当たり画質が低下する。

–no-deblock

Disable loop filter

  • デブロッキングフィルタ(ブロックノイズを除去するフィルター)を無効化するオプション。なおデブロッキングフィルタは、h264規格で定められている画質向上フィルターである。
  • ブロックノイズは動画圧縮時に生成されるアーティフィクト(簡単に言えばブロック状のノイズ)のことであり、特に低ビットレート(低画質)の動画で発生しやすいノイズである。
  • 現在主流の動画圧縮規格では、圧縮にあたり1枚の大きな画像を小さなブロック単位(8dot×8dot 等)に分割し、その分割されたブロック単位で離散コサイン変換(DCTの事)や動き補償等の計算を行うことでデータ量を削減している。つまり、動画は連続する1枚の画像から成っているように感じられるが、実は小さなブロックの集まりから成っているということである。
  • ブロック単位で変換されるデメリットの一つとして、ブロック同士の境界線がクッキリと見えてしまう事がある。このアーティファクトをぞくに「ブロックノイズ」と呼ぶ。
  • ブロックノイズは一般的に、動きが極端に激しい場面や低ビットレートの動画で、情報量が足りないときに発生する傾向にある。
  • デブロッキングフィルタとは、この境界線をぼかして、境界線を目立たなくする効果がある。ただし、僅かに動画が眠くなる(意図しない細部もぼかされる)デメリットはある。ただし、そのデメリットは観ても分からない程度におさえられている。
  • ブロックノイズが発生し辛い極端な高ビットレートの場合を除き、このオプションを指定(つまりデブロッキングフィルタをオフ)にすると、ブロックノイズがぼかされずに見えてしまう(画質が低下する)原因となる。
  • デブロッキングフィルタの副作用として「画像が甘くなる(ぼやける)」事象が存在する。そのため一部では「デブロッキングフィルタを無効化するべき」という方方も存在するが、無効化は明らかにデメリットが多きいため、オフは推奨できない。
  • なおx264はデブロッキングフィルターが有効である前提で最適化されている事から、無効化する事で、設定のバランスが崩れる可能性がある。
  • 動画圧縮とは「如何にファイルサイズ小さくしつつ、画質を維持するか」という点が、至上命題である。つまりデブロッキングフィルタを無効化するという事は、個人的には至上命題を蔑ろにする事と同義であると考えている。
  • デブロッキングフィルタは非常に効果的な処理でえあるが、演算負荷が比較的大きい事に注意。とはいっても、重ねてですが無効化は推奨しませんが、、、
指定有無メリットデメリット
輪郭や細部が明瞭に保持されるデブロッキングフィルタが無効化される
ブロックノイズが低減されずそのまま残る(目立つ)
ブロックノイズが低減される
マクロブロックの境目が目立たなくなる
–deblock オプションの数字によっては、
画像が甘くなる(ぼやける)場合有り

-f, –deblock

Loop filter parameters [0:0]

  • デブロックフィルター(ブロックノイズを除去するフィルター)の強度と閾値を定めるオプションである。左がフィルター強度を、右側がフィルターの閾値を決める。デフォルトの0:0は、開発者が定めた最適値である。
  • ブロックノイズに関する詳細が知りたい方は、本ページの「–no-deblock」の欄を確認してください。
  • 強度を高くすると(数値を大きくすると)、ブロックの境目に掛かる除去フィルターが強く掛かることによってブロックノイズの隠蔽率は上がるが、本来は保持したい細かなディテールまで除去されてしまう可能性が生じる。つまり、副作用で画像がボケたり滲んだりする可能性がある。
  • 閾値を上げると、フィルターが適用されない対象が増える(より強力にブロックノイズが出ている場所のみにフィルターが有効となる)。
  • 最適値が[0:0]である事から、効果を弱めたい場合はマイナスで指定する。数値は[-6:-6]~[6:6]の範囲で設定可能らしい。
  • 基本的にはデフォルト値の[0:0]は丁度良い数値であるため、変える必要性は薄い。ただしもし変更するならば、実写映像は[0:0]~[-3:-3]のようにマイナス方向へ、アニメ映像は[0:0]~[3:3]のようにプラス方向への調整が望ましい。
  • 実写はシャープさを、アニメはノイズの少なさを優先したほうが、一般的には好ましく感じるとされる。アニメのようなベタ塗の映像ではノイズが目に付きやすいが、実写ではベタ塗では様々な色や線があり、ノイズが目立ちにくいためである。
メリットデメリット
ブロックノイズの隠蔽度が向上し、
目立たなくなる(特に低ビットレート時に効果大)
輪郭や細部がぼやけ、不明瞭になる可能性あり
全体的にボヤっとした眠たい画質になる可能性あり
輪郭や細部が明瞭に保持されるブロックノイズの隠蔽度が低下し、
目立つ(特に低ビットレート時に影響大)

–slices

Number of slices per frame

  • 色々調べたが良く分からないオプション・・・

–tff

Enable interlaced mode (top field first)

  • インターレース動画(対義語はプログレッシブ動画)の圧縮を有効とする。つまり、素材がインターレース動画ならば指定する。
  • またインターレスフラグを立てると同時に、top field を指定する。
  • top fieldとbottom fieldは片方しか指定できないので、–tffと–bffのオプションを両方有効化する事は出来ないはず。(未確認)
  • 基本的に、インターレースはプログレッシブに対して圧縮率が落ちる事には注意する。
  • インターレース素材を逆プルダウンしてからエンコードするのか、インターレースを保持したままエンコードするのかは、各自の考えで判断して選択したらいいと思う。どちらにもメリット、デメリットはある。
  • インターレースはh264特有のものではない事から、説明は割愛します。について気になる方は別途調べてください。

–bff

Enable interlaced mode (bottom field first)

  • オプション “–tff” の bottom field 版。
  • 詳しい事は “–tff” をみてください。

–pulldown

Use soft pulldown to change frame rate
– none, 22, 32, 64, double, triple, euro (requires cfr input)

  • インターレース素材に対して「soft pulldown(ソフトプルダウン)」を「明示する」オプション。
  • ソフトプルダウンは「エンコード時にプルダウンフラグを付けておき、再生時にプルダウンフラグに基づいてプルダウンする手法」。その逆は「予めプルダウンしたデータに対してエンコードする手法」、だと思う。
  • 再生時にプルダウンするという事は、再生機器や再生ソフトのプルダウンの性能次第で、出力結果が良くなる事もあれば、悪くなる事もある、ということである。
  • インターレース関係は正直詳しくないので、他のサイト見てくれた方がありがたい。

Ratecontrol:

-q, –qp

Force constant QP (0-81, 0lossless)

  • 画質を量子化クァンタイザ(QP値)で指定する。0指定でロスレスとなる。
  • 量子化とは、「アナログ信号などを離散値で近似的に表現すること」である。簡単に言えば、絵や動画(アナログ)をデジタル(つまり数値、正確に言えば0と1)に変換したりする場合に使用される技術の事。
  • 品質ベースで画質を指定したい場合には、通常は–crfを使用する方が良いといわれており、また様々なサイトを確認しても–qpを使っている方をみたことが無い。
  • 管理人的には「–qp」と「–crf」の違いが、正直いまいち分からない。想像だが、「–qpはQP値を指定するものであって、画像品質を指定するものでは無い」という事ではないだろうか。
  • 人間の目は機械的ではない。x264は目の特性(色調よりも明るさに敏感、複雑な部分の画質低下には鈍感、等々)を利用して、ビットレート当たりのみかけ上の画質を向上させている。恐らくだが、QP値を指定するという事は、それらの機能の一部無視されるのではないか?
メリットデメリット
画質が向上するファイルサイズが増大する
画質が低下するファイルサイズが減少する

-B, –bitrate

Set bitrate (kbit/s)

  • 画質をビットレートで指定するオプションになります。(逆に、品質ベースで画質を指定する場合は “–crf” を使用します。)
  • 本オプションは、「ファイルサイズが限定された特定の環境で、最高の結果を出したい場合」で有効活用できます。ただしそのような場合を除いて、–crf (品質指定VBR)を使用したほうが良い結果を残せると考えます。
  • また、敢えて ”–bitrate” を使用する環境下では、(1パスエンコードえはレート配分の精度に劣るため)基本的に2pass エンコードとセットで使う事になると思われます。わざわざビットレート指定でエンコードを行う場合はファイルサイズに上限がある場合と思われ、またそのような場合では上限ギリギリを狙って最良の結果を求める場合が大半だと思います。
  • 活用例
    • 活用例①:ファイルを確実にDVDやBlue-layに収めたい等で、エンコード後の容量を厳密に指定したい場合。
    • 活用例②:Youtubeやニコニコ動画等への投稿で、ビットレートや容量を厳密に指定したい場合。
数値メリットデメリット
画質が向上するファイルサイズが増大する
画質が低下するファイルサイズが減少する

–crf

Quality-based VBR (-12-51) [23.0]

  • 品質ベースで画質を指定するオプションになります。(逆にビットレートベースで指定する場合は “–bitrate” を使用します。)
  • 殆どの場合は、–crfでの指定が最も簡単で、また画質的にも良好な結果を残すことができると考えます。(わざわざビットレート指定でエンコードを行う場合は、ファイルサイズに上限がある場合ぐらいでしょうか)
  • “–crf” に似たオプションに “–qp” というものがあります。”–qp” と “–crf” は似たようなオプションですが、最大の違いは「”–qp” が量子化クァンタイザ(QP値)での指定」に対して「”–crf” は品質の指定」である点になります。
  • 働きは “–qp” と似ていますが、品質ベースで指定する際には “–qp” ではなく “–crf” を使用していただいた方が良いかと考えます。(特に、上記の説明を読んでも分からない場合は、 “–qp” を使用するメリットはなく、デメリットばかりです)
  • x264における品質は「フレーム単位」ではなく「時間単位」で考えられている事に注意する必要があります。”–crf” の値が同じであったとしても、動画の FPS が異なれば1枚当たりの画質は変わる、という事です。つまり「FPSのみが異なる同じ動画ファイルをx264に投入した場合、出力されるファイルサイズは違う」という事です。
  • ただし極端なfpsで無い(例えば実用域のPAL25fps-NTSC30fps)に於いては、影響は無視できる程度であると思われます。逆を言えば、120fpsや10fpsといった、極端な場合は注意した方が良いとも言えます。
メリットデメリット
画質が向上するファイルサイズが増大する
画質が低下するファイルサイズが減少する

–rc-lookahead

Number of frames for frametype lookahead [40]

–vbv-maxrate

Max local bitrate (kbit/s) [0]

  • ビットレートの最大値を指定するオプションです。0 指定すると、エンコーダーが自動で最適値をセットしてくれます。ほとんどの場合は、画質的にも設定何度的にも、自動が良いと思われます。
  • 主には Youtube やニコニコ動画への投稿等で、最大ビットレートを厳密に制限したい場合等で使用されるオプションになります。動画投稿サイトはビットレートの最大値を定めている事があります。動画サイトの規定に応じたファイルの場合はオリジナルデータそのままでアップされますが、もし規定値を超えた場合は動画サイト側で再エンコードされ、画質が低下する場合があります。
  • またh264のレベルを制限したい場合には、指定する必要があります。h264 は機器によって再生可能なレベルが制限されている場合があり、またレベルによって許容される最大値が制限されている場合が多々存在します。
  • 上記以外の場合では、あえて手動で制限を行うメリットは無いと考えます(少なくとも、私は思い浮かびません)。殆どの場合でx264は最良の値を自動で導きだす事から、自動[0指定]が最良の結果をもらたす事になる可能性がほとんどです。寧ろ自分で指定する事により、最適で無い値が指定すれてしまい、本来必要であったデータが行きわたらず画質が低下してしまう可能性が発生しうると考えます。
メリットデメリット
0x264が自動で最適な数値を指定してくれる。
ビットレート配分の自由度が向上する
(画質向上する可能性あり)
通常使用範囲内では無し
ビットレート配分の自由度が向上する
(画質向上する可能性あり)
通常使用範囲内では無し
通常使用範囲内では無しビットレート配分の自由度が低下する
(画質が低下する可能性あり)

–vbv-bufsize

Set size of the VBV buffer (kbit) [0]

  • VBV buffer サイズを指定するオプションです。ただしこの項目は非常に難解である事から、興味のある方は猫科研究所さんの記述を読んでほしい。(というか、私の知識では分かりません、、、)
  • 通常は自動[0]で問題無い。というか、どういう場合に変更するのかよく分からない、、、

–aq-strength

Reduces blocking and blurring in flat and textured areas. [1.0]

  • Adaptive Quantizationの略で、直訳すると「適応量子化」です。高周波成分と低周波成分に、それぞれにどの程度の情報量を割り当てるのかを決める(正確に言えば、高周波成分と低周波成分それぞれのQP値を変動させる)オプションである。
  • 当然の事ではあるが、同一画像内でも複雑な部分ほど情報量(ビットレート)が必要であり、逆に言えば単純な部分ほど、情報量は必要ない。
  • しかしながら、人間の目は複雑部分(高周波)の劣化程気づきにくく、逆に単純部分(低周波)の劣化程気づきやすい、という特性がある。
  • よって無理に複雑な部分に情報を割り当てるよりも、単純な部分への割り当てを増やした方が、目で見たときの画質は向上するよね。っていうのが大事な部分。
  • 誤解を恐れずに言えば、髪の毛や入り組んだ模様な複雑な部分にちょっとノイズが乗っても気づきにくいけど、空みたいな単純な部分にノイズが乗ると気づき易いよね、って事です。イメージしてください。
  • また複雑部分(高周波)よりも、単純部分(低周波)の際現に必要な情報量が少ないという事は、単純部分の方がコストパフォーマンスが良い(少しのデータを分け与えるだけで、画質は大きく向上する)
  • ただし、余りに大きい数字を指定する事は避けるべきである。劣化が気づきづらい部分であったとしてもある程度の情報量は必要であり、余りに大きい数字を指定すると高周波部分のデータが削減され過ぎて、高周波部分の劣化が目に付くようになる。
  • なおこの設定を強める事で、元画像との一致度(綺麗さ)を機械的に評価する指数である「PSNR / SSIM」といった指数は低下しますが、だからといって画質が悪化したとは認識しないでください。これらの指標は機械的に元画像との差異を比較するものですが、機械と人間では見え方が異なるため、数値の低下が人間の目で見たときに画質低下に直結するものではありません。(元画像からの乖離が進んでいても、人間の目では綺麗に見える、ということです。)
  • なおこれはテクニックの一つですが、このオプションの強度をコントロールすることで、フィルムグレイン(主に階調割れ防止や、映像にレトロな雰囲気を出すために付与される場合がある粒子上の人工ノイズ)の保持も可能となります。
  • 画像における高周波とは、髪の毛/波しぶき/オブジェクト同士の境目/等々。つまりざっくりいえば、細々とした雑多な部分のこと。
  • 画像における低周波とは、肌/(ベタ塗な)空/(ベタ塗なオブジェクト)/等々。つまりざっくりいえば、込み入ってない単純な部分のこと。
メリットデメリット
0機械的な画質指標である SSM は向上する
(人の目で見た時の画質は劣化する事に注意)
適応量子化が無効化される
人の目で見た時の画質は、確実に劣化する
低周波へのレート配分が増加する
ベタ塗の面(空や人肌、等)の画質が向上する
高周波へのレート配分が減少する
線(髪の毛や物体の境目)の画質が低下する
アニメでは輪郭が破綻、画質が低下する
高周波へのレート配分が増加する
線(髪の毛や物体の境目)の画質が向上する
アニメでは輪郭の再現性/画質が向上する
低周波へのレート配分が減少する
ベタ塗の面(空や人肌、等)の画質が低下する

-p, –pass

Enable multipass ratecontrol
– 1: First pass, creates stats file
– 2: Last pass, does not overwrite stats file

  • 2パスエンコード(マルチパスエンコード)を使用する場合に使用するオプションです。
  • 多用されるのは2パスまでが多いが、実はそれ以上(例えば3パスや4パス)でも指定可能である。ただし3パス以上にしたところで画質が大きく改善される事はないので、意味が無いとは言わないが、普通は2パスまでで良い。
  • 当然ながらパス数を増やせば増やす程にエンコード時間は激増するので、無暗やたらに増やさないようにする事。3パス以上を選択するくらいなら、2パスにして、高画質化が狙えるエンコードオプションを沢山積んだほうが、幸せになれると思われます。
メリットデメリット
1エンコード時間が短いビットレート配分の正確性が低い
2ビットレート配分の正確性が向上する
(画質が向上する)
エンコード時間が長くなる
2以上2よりもレート配分の正確性が向上するかもしれない
(2よりも画質が向上する可能性はあるが、効果は限定的)
エンコード時間がさらに長くなる

–stats

Filename for 2 pass stats [“x264_2pass.log”]

  • 2パスエンコード(マルチパスエンコード)を行う場合の、1パス目実行時に生成されるログファイル(解析ファイル)のファイル名を指定するオプションです。
  • 設定しなくてもデフォルト値で生成されるため、指定しなくとも問題はありません。何らかの都合でファイル名を自分でつけたい場合にのみ、このオプションを使用する事ができます。
指定有無メリットデメリット
好きな名前でログファイルを生成できる無し
x264 が自動でログファイル名を決めてくれる無し

Analysis:

-A, –partitions

Partitions to consider [“p8x8,b8x8,i8x8,i4x4”]
– p8x8, p4x4, b8x8, i8x8, i4x4, none, all
(p4x4 requires p8x8. i8x8 requires –8x8dct.)

  • マクロブロックを分割するサイズを指定するオプションです。(動画圧縮技術の一つである “動き補償” は、マクロブロック単位で実行される。)
  • h264では圧縮のために、動画(画像)をまずは16×16サイズのマクロブロックに分割する。その後必要に応じて、16×16のサイズでは大きすぎる場合には、更に細かくブロックを分割する。
  • “partitions” とはつまり、16×16のブロックを追加でどこまで分割できるか、を決めるオプション。ここで設定した値は「分割できる」ブロックサイズであり、もし「x264が使用しない方が良い」と判断したら、その値は使用されない事もある事に注意する。
  • 基本的には選択肢が多い程に画質は向上するため、基本的には “all” で良い。ただし、選択肢が多ければ多い程に演算負荷があがるため、早くエンコードしたい方はデフォルトの “p8x8,b8x8,i8x8,i4x4” でも良いと思う。
  • ここまで聞くと大きいブロックサイズ(8×8)は不要で小さいブロック(4×4)のみで良いと思われる方がいるかもしれないが、そうではない。何故なら、動き補償の情報はブロック単位で必要であるため、ブロック数が増えれば増える程に動き補償に使用する情報量が増大する。よって、大きいブロックでまかなう事が可能な部分では大きいブロックを、そうでないなら小さいブロックが選択される事によって圧縮率は向上する。
  • ただし “p4x4” を指定するには “p8x8″が、”i8x8” を指定するには別オプションで指定する “–8x8dct.” を有効にしておく必要がある。つまり、小さいブロックサイズを有効にする場合には、それよりも多きなサイズのブロックを有効にしておく必要がある。
  • “–me”, “–merange” のオプションと大きく関係するオプションである。動き補償の計算は ”–partitions” で決めたブロックサイズで、動き補償のサーと方法と範囲は “–me”, “–merange” でしている。
  • “動き補償” を計算するにあたっては、使用できるブロックサイズの選択肢が多い程に有利(画質が上がる)になることから、基本的には “–partitions all” を指定しておけば良い。(過去には “p4x4” を有効にした方が画質が落ちる事があったらしが、それは過去の話で、いまはエンコーダーが改善されているので使用した方が良い結果になる。このことは、今のレビジョンの “–preset” でも確認でき、開発者お勧めの高画質設定では ”all” が指定されている事からも、確認できる)
  • 基本的には動画の縦横のサイズが大きい程に、使われるブロックサイズは大きくなる傾向になる。逆に小さい縦横サイズの動画は、小さいブロックサイズの登場頻度が多々くなる。
  • 基本的には、動画中の大きなパーツが動く場合は大きい値が、細々とした部分が小さく動く場合には、小さな値が使用される傾向が高まる。

–direct

Direct MV prediction mode [“spatial”]
– none, spatial, temporal, auto

  • 「Direct MV」とは「ダイレクト モーションベクトル」のこと。つまり直訳すると「ダイレクト モーションベクトル の予測方式」を決定するモードのこと。もう少し説明を加えると、「”ダイレクト” に分類されるマクロブロックに対する、動き補償の方式を決めるオプション」のこと。
  • なおこのオプションは「マクロブロック」や「動き補償」を知らないと理解が難しいと思いますので、知らない方は「–partitions」の項目を先に確認していただけると良いと思います。
  • 「動き補償の方式」は以下4パターンから選択可能。
    • none:Direct MVを使用しない
    • spatial:空間軸 Direct MV (2D Direct MV)を使用する。つまり「動き補償の参照元に、同一フレーム内のマクロブロックを使用する」ということ。
    • temporal:時間軸 Direct MV (3D Direct MV)を使用する。つまり「動き補償の参照元に、前後フレームのマクロブロックを使用する」ということ。
    • auto:x264 がシーンに応じてフレーム単位で、最適な Direct MV を spatial と temporal から選択、切替使用する。
  • spatial は、前後フレームで比較したときに映像が大きく変化するシーン(アクション映画の戦闘シーンのような、映像が激しく動くシーン)で、効果的な方式です。
  • temporal は、前後フレームで比較したときに映像が殆ど変化しないシーン(ドラマの日常シーン、殆ど人や背景が変化しないシーン)での圧縮率向上が見込むことができます。
  • 動画作品は始まりから終わりまで一定のテンポで進むことは殆どなく、画面の変化量は常に変化しており、激しいシーンや動かないシーンが頻繁に切り替わります。また「Direct MV」の方式によって得意なシーンが異なるため、「auto」のシーンに応じた最適な方式の自動選択は非常に強力な武器となりますので、通常は無条件で「auto」にしておけば問題ありせん。問題ないというか、「auto」にするべきです。
  • また none は「Direct MV」が使用できなくなりますので、動画圧縮に与えるデメリットが非常に大きいことから、使用すべきではありません。
メリットデメリット
none圧縮率が大幅に低下する。(使用する意味無し)
spatial動きが激しいシーンで圧縮率が向上する。 動きが少ないシーンの処置が苦手 。
temporal動きが少ないシーンで圧縮率が向上する。 動きが激しいシーンの処置が苦手。
autoシーンに応じて spatial と temporal が自動選択される。
spatial と temporal の良いとこどりの最良な選択。

–weightp

Weighted prediction for P-frames [2]
– 0: Disabled
– 1: Weighted refs
– 2: Weighted refs + Duplicates

  • 色々検索してみても日本語の情報が少なく、なかなか確信(誤用にあらず)に迫ることが出来ないオプション。ただ英語のサイトの情報をいくつか漁ってみると、以下のサイトの解説は結構核心をついているのではないかと思う。確信には至ってないけど、、、
  • 参照元のフレーム(P-framesの参照元なのでI-framesのこと)に重み(優先度/重要度)をつけて、P-framesの圧縮を向上させるためのオプション。
    • – 0: Disabled → 無効
    • – 1: Weighted refs → 参照フレームに重みづけを行う
    • – 2: Weighted refs + Duplicates → 参照フレームに重みづけを行う + 複製
  • 「-1: Weighted refs」 で参照フレームに重みづけを行い、圧縮率を向上させる。
  • 「-2: Weighted refs + Duplicates」 では 「-1」 に加えて 「Duplicates」 も使用する。下記引用から読み取るに、「全く同じ(又は殆ど同じ場合?)データが存在する場合には、そのフレームの仮想複製(実質0bit)を作成する」という事だと思われる。
  • P-frames は I-frames の差分フレームである事から、I-frames と比較してデータ量は少ないものの、当然ながら決して ゼロ ではない。でも条件は限定されるが、他のフレームを丸っと引用する事で対象の “P-frames” のデータをゼロにする事が出来るオプションが、” Duplicates” なのだと推察できる。
  • なお私は、重みの定義が良く分かっていないです。想像するに「I-frames からの距離」または「I-frames との一致度」のどちからだとは思うが、、、 詳しい方がいらっしゃれば教えてください!
  • ちなみに過去のレビジョンの x264 だと “0: Disabled” 以外の場合に、正常に再生できないデコーダーがあったらしい。これは x264 のバグというよりは、h264 の規格に沿ってない再生ソフトが多数存在したためらしいが、最近ではそのようなバグも見かけなくなった(らしい)。

x264 [info]: Weighted P-Frames: Y:2.7% UV:2.1%

x264 [info]: ref P L0: 56.2% 10.9% 15.7% 5.2% 3.9% 2.8% 2.4% 1.3% 1.3% 0.3% 0.0%

x264 [info]: ref B L0: 81.1% 9.2% 4.6% 1.9% 1.3% 1.0% 0.6% 0.2%

264 [info]: ref B L1: 94.6% 5.4%

Which reference picture was actually used by P and B partitions. L0 is the list of past reference pictures. L1 is the future. This example output came from a preset=veryslow encode, with ref=9, but the P reference list has 11 entries. The last two are the virtual duplicates produced by the way x264 implements weightp. The decoder of the produced stream won’t see them; they don’t take DPB (decoded picture buffer) space.


Like with consecutive B frames, if the list trails off to near zero, you could have used a lower refs with little impact. Note that this list doesn’t tell you how much better a match was found: Even if the list doesn’t trail off to zero, it might not hurt compression much at all to user fewer refs if the refs from farther back were only slightly better. It also doesn’t tell you if there were really good matches farther back than it was checking. ((speculation) Only very synthetic input with a repeating pattern has much chance of seeing a big jump in compressibility when going e.g. from 8 to 12 refs, with a pattern that repeats every 10 frames.)

MeGUI/x264 Settings/x264 Stats Output | https://en.wikibooks.org/wiki/MeGUI/x264_Settings/x264_Stats_Output

–me

Integer pixel motion estimation method [“hex”]
– dia, hex, umh

-m, –subme
Subpixel motion estimation and mode decision [7]
decision quality: 1fast, 11best

  • 「フレーム間予測技術」の一種である 「動き補償」 で使用される方式を決めるオプション。もう少し正確にいうと、「動き補償」で使用するための元データを検索にするにあたり、どこを調べるのか?を決めるオプション。
  • 「フレーム間予測」 とは、過去や未来のフレームに基づいて、そこからの現在のフレームとの差分のみを抽出して符号化(圧縮)する技術の事である。つまり、P-frames, B-frames を作成するための手法。
  • “–partitions” と密接に関係するオプションであり、動き保証の検索は ”–partitions” で設定されたブロック単位で実行される(はず)。
  • なお検索範囲は “–longhelp” で表示される “–merange” で設定する。
  • 画質に大きく影響するが、同時に、計算負荷(エンコード時間)にも大きく影響するため、コスパを考え、なにを設定するかは良く考えたい。
  • 設定は “dia, hex, umh, esa, tesa” から選択可能。普通~高画質で “umh”、作品を投稿する等で頑張りたいときは頑張って “esa” とかで良いと個人的には思う。 “tesa” はエンコード負荷がヤバい。

–psy-rd

Strength of psychovisual optimization [“1.0:0.0”]
#1: RD (requires subme>6)
#2: Trellis (requires trellis, experimental)

  • 視覚心理最適化の強さを設定するオプション。つまり、画質が低下しても人間の目では劣化を感じ辛い部分(重要で無い部分)へのデータ割り当てを節約(減らし)、浮いたデータを劣化を感じ易い部分に割り当てる事で、データ配分を最適化するオプション。
  • 「人間の目では劣化を感じ辛い部分」というところが非常に重要な事項である。人間の目は機械ではないので、劣化を感じ易い部分と感じ辛い部分があるため、データ配分を最適化できる。
  • つまり、元画像との同一度(綺麗さ)を機械的に評価する指数である「PSNR / SSIM」といった指数は、このオプションによって低下する事に注意。ただし、数字は低下したとしても人間の目には綺麗に見える。
  • 設定方法が少し変わっていて、使う場合は「–psy-rd 0.6:0.0」のように指定する。一つ目の数字で「#1: RD 」を、二つ目の数字で「Trellis」の値を指定する。
  • 実は「視覚心理最適化の #1: RD」は実写向けのオプションであり、アニメーションのようなベタっとした画像とは相性が悪い事に注意。
  • 相性の悪さはx264のプリセット(「–tune animation」オプション)からも読みとる事ができ、x264のデフォルト値は「–psy-rd 1.0:0.0」であるが、「–tune animation」を指定すると「–psy-rd 0.4:unset」が自動的に設定される。つまり、アニメでは「1: RD」の強度を弱める(数値を小さくする)が良好な結果となる。(ただし、無効化は推奨されないので注意すること)
  • なお「#1: RD」を有効にするには「–submeが6より大きい」を指定してある必要がある事に注意。
  • 「#2: Trellis」はエンコード時の端数(量子化時の端数)の処理を最適化するオプション。ただこのオプションはx264の説明に「experimental(実験的)」と記載されているため、使用有無を迷うところ。実験的と記載されている上に標準で「0.0」が指定されている(つまり無効になっている)ため、普通はそのままの「0.0」で良いと思われる。

–no-8x8dct

Disable adaptive spatial transform size

  • 「8×8画素整数変換」 を無効化するオプション。
  • h264 では 「8×8 画素適応変換」と「4×4 画素適応変換」から場面に応じて最適な方式を採用する事が可能であるが、本オプションを有効化(=「8×8 画素適応変換」を無効化」)する事によって、「4×4 画素適応変換」しか使用できなくなる。
  • マクロブロックや “–partitions” に密接に関連するオプションである。なお「マクロブロック」については “–partitions” で説明しているので、参考にしてもらえると幸いです。
  • “–partitions” で “i8x8” を使うためには、「8×8 画素適応変換」を有効にしておく必要がある。つまり “–no-8x8dct” を有効にすると、”i8x8″ は無効化される。
  • 「8×8 画素適応変換」と「4×4 画素適応変換」の両方が使えた方が画質は向上するので、基本的には指定しない方が良い。
  • 「8×8 画素適応変換」はプロファイルによって制限が掛かっており、「Baseline/ Main」では使用不可となっており、Highでのみ使用可能である。再生機器が「Highプロファイル」に対応していない場合や意図的に「Baseline/Mainプロファイル」に制限したい場合には、”–no-8x8dct” の明示は必須である。ただし画質は悪化する事に注意する。

-t, –trellis

Trellis RD quantization. [1]
– 0: disabled
– 1: enabled only on the final encode of a MB
– 2: enabled on all mode decisions

  • 量子化計算時の丸め処理(端数処理)を、最適な値で行うか否かを設定するオプションです。
  • 量子化を簡単に説明すると「アナログな測量値を離散値で近似的に表現すること」であり、x264 においては 「画像(アナログなも)をデジタル(0と1)に変換する」為に使用されています。(量子化を詳しく知りたい方は、Google で検索してみてください。)
  • 当該オプションを有効にする事で、最適な端数処理(つまり、最も効率的な値が採用される)が行われ、圧縮率が向上します。ただし最適な端数処理の分だけ量子化の計算が複雑化し、エンコード時間が伸びます。
  • このオプションが「2」のとき、すべての場面で常に最適な端数処理を行います。これによってビットレートあたりの画質が向上します。(ただしその分、計算時間が増えます)。
  • このオプションが「1」のとき、”final encode of a MB” の場面でのみ(つまり重要な工程でのみ)最適な端数処理を行い、それ以外の場面では最適な端数処理を行いません。これによって、「2」の時程の画質向上効果は得られませんが、「2」より演算負荷は下がります。
  • 0 : 無効(最適な丸め処理を使用しない)
  • 1 : “final encode of a MB” の場面でのみ有効(”final encode of a MB” の場面でのみ最適な丸め処理を実施)
  • 2 : すべてのモードで有効(常に最適な丸め処理を実施)

–nr

Noise reduction [0]

  • その名の通り x264 で「ノイズリダクション(ノイズ除去)」フィルターを使用するオプションです。
  • ノイズリダクション含め、画質向上や効果追加目的で使用するフィルターの類は、通常はエンコーダーに通す前の素材の段階で適用することが殆どです。AviUtl や Avisynth といった動画編集ソフトには、非常に高機能で高性能なフィルターが選びきれないほど沢山存在しています。ですので、基本的には x264 で使用する事は稀でしょう。
  • x264 に搭載されているノイズ除去フィルター性能は不明です。また、x264エンコーダーでのノイズ除去と、前工程( AviUtl や Avisynth 等々)でノイズ除去する事によって、結果がどの様に異なってくるのかは不明です。私はノイズ除去は前工程で行うため、”–nr” を使ったことは一度もありません!!

–cqmfile

Read custom quant matrices from a JM-compatible file

  • x264向けのカスタム量子化マトリクスのファイルを読み込むためのオプション。なおx264の標準では以下のようにすべて「16」が指定されており、俗に 「flat 16」とよばれている。
  • カスタムマトリクスは high profile 以上で使用可能なオプションであり、このオプションを使用した時点で main profile ではなくなる事に注意してください。
  • これらの数字は「どのくらいデータを捨てるか?」を示す値であり、画像の周波数(低周波と高周波)と成分(YUV の光度成分Y、彩度成分UV)ごとに細かく指定できる。なお当然ながらデータを捨てる程にファイルサイズは小さくなるが画質は劣化し、残す程にファイルサイズは大きくなるが画質は向上する。
  • 大きい数字ほど画像は劣化(ファイルサイズ減少)し、小さい数字ほどエンコード前のオリジナル画像と近似(ファイルサイズ肥大)となる。
  • 左上は低周波成分、右下は高周波成分、真ん中は中間の成分となる。人間の目は高周波成分より低周波成分の劣化に気づき易いという性質がある(詳細は–aq-strengthを参照ください)ため、マトリクス中の低周波に相当する部分の数字を小さくして、高周波に相当する項目の数字を大きくすることで(言い換えると、左上を小さい値にし、右下を大きい値にする事)、見かけ上の画質向上が可能となる。
  • 人間の目は彩度(色味)より明るさ(光度)の劣化に気づき易いという性質があるため、量子化マトリクスに於ける光度を司る部分(_LUMA)の数字を小さくして、色味を司る部分(_CHROMAU)の数字を大きくすることで、理論上は見かけ上の画質向上を見込むことが可能となる。(しかしながらこれは私見だが、動画で多様される YUV420色空間 は元々色味成分の情報量[解像度]が削減されているため、あまり下げすぎるのは良くないと考えます)
  • 過去のx264では重要度が高いオプションであったが、今は重要度が下がったオプション。実はこのオプション、–aq-strength で簡易的ではあるが近い事が実現できる。また –aq-strength の場合は main profile で使用可能であるため、そういった面でもメリットあり。
  • –aq-strength ならば main profile で使用できるうえ、カスタム量子化マトリクスの作成にはそれなりの知識とトライ&エラーが必要になるため、いまとなっては –cqmfile ではなく –aq-strength で調整した方が良いと思われる。–aq-strength で満足出来ない方のみ挑戦してみてください。
# 例1 (x264の標準となる flat 16 です。)
# 拡張子を cfg にして保存(例 flat16.cgi)し、--cqmfile オプションで読み込んでください。
# 行頭をシャープにするとコメント行になります。

INTRA4X4_LUMA =
16,16,16,16,
16,16,16,16,
16,16,16,16,
16,16,16,16

INTRA4X4_CHROMAU =
16,16,16,16,
16,16,16,16,
16,16,16,16,
16,16,16,16

INTRA4X4_CHROMAV =
16,16,16,16,
16,16,16,16,
16,16,16,16,
16,16,16,16

INTER4X4_LUMA =
16,16,16,16,
16,16,16,16,
16,16,16,16,
16,16,16,16

INTER4X4_CHROMAU =
16,16,16,16,
16,16,16,16,
16,16,16,16,
16,16,16,16

INTER4X4_CHROMAV =
16,16,16,16,
16,16,16,16,
16,16,16,16,
16,16,16,16

INTRA8X8_LUMA =
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16

INTRA8X8_LUMA =
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16
# 例2
# 高周波成分の高周波成分の画質低下と引き換えに、それ以外の部分の画質を(相対的に)上げる例

INTRA4X4_LUMA =
 8,12,16,16,
12,16,16,16,
16,16,16,16,
16,16,16,16

INTRA4X4_CHROMAU =
 8,12,16,16,
12,16,16,16,
16,16,16,16,
16,16,16,16

INTRA4X4_CHROMAV =
 8,12,16,16,
12,16,16,16,
16,16,16,16,
16,16,16,16

INTER4X4_LUMA =
 8,12,16,16,
12,16,16,16,
16,16,16,16,
16,16,16,16

INTER4X4_CHROMAU =
 8,12,16,16,
12,16,16,16,
16,16,16,16,
16,16,16,16

INTER4X4_CHROMAV =
 8,12,16,16,
12,16,16,16,
16,16,16,16,
16,16,16,16

INTRA8X8_LUMA =
 8,11,14,16,16,16,16,16,
11,14,16,16,16,16,16,16,
14,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16

INTER8X8_LUMA =
 8,11,14,16,16,16,16,16,
11,14,16,16,16,16,16,16,
14,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16,
16,16,16,16,16,16,16,16

Input/Output:

  • -o, –output
    • Specify output file
  • –muxer
    • Specify output container format [“auto”]
  • – auto, raw, mkv, flv
  • –demuxer
    • Specify input container format [“auto”]
    • – auto, raw, y4m, avs, lavf
  • –input-fmt
    • Specify input file format (requires lavf support)
  • –input-csp
    • Specify input colorspace format for raw input
  • –output-csp
    • Specify output colorspace [“i420”]
    • – I400, I420, I422, I444, rgb
  • –input-depth
    • Specify input bit depth for raw input
  • –output-depth
    • Specify output bit depth
  • –input-range
    • Specify input color range [“auto”]
  • – auto, tv, pc
  • –input-res
    • Specify input resolution (width x height)
  • –index
    • Filename for input index file
  • –sar width:height
    • Specify Sample Aspect Ratio
  • –fps
    • Specify framerate
  • –seek
    • First frame to encode
  • –frames
    • Maximum number of frames to encode
  • –level
    • Specify level (as defined by Annex A)
  • –bluray-compat
    • Enable compatibility hacks for Blu-ray support
  • –avcintra-class
    • Use compatibility hacks for AVC-Intra class
    • – 50, 100, 200
  • –avcintra-flavor
    • AVC-Intra flavor [“panasonic”]
    • – panasonic, sony
  • –stitchable
    • Don’t optimize headers based on video content
    • Ensures ability to recombine a segmented encode
  • -v, –verbose
    • Print stats for each frame
  • –no-progress
    • Don’t show the progress indicator while encoding
  • –quiet
    • Quiet Mode
  • –log-level
    • Specify the maximum level of logging [“info”]
    • – none, error, warning, info, debug
  • –psnr
    • Enable PSNR computation
  • –ssim
    • Enable SSIM computation
  • –threads
    • Force a specific number of threads

Filtering:

  • –vf, –video-filter //… Apply video filtering to the input file
    • Filter options may be specified in : format.

Available filters:

  • crop:left,top,right,bottomremoves pixels from the edges of the frame
  • resize:[width,height][,sar][,fittobox][,csp][,method]
  • resizes frames based on the given criteria:
  • resolution only:resizes and adapts sar to avoid stretching
  • sar only: sets the sar and resizes to avoid stretching
  • resolution and sar: resizes to given resolution and sets the sar
  • fittobox: resizes the video based on the desired constraints
  • width, height, both
  • fittobox and sar: same as above except with specified sar
  • csp: convert tothe given csp. syntax: [name][:depth]
  • valid csp names [keep current]: i400, i420, yv12, nv12, nv21, i422, yv16, nv16, yuyv, uyvy, i444, yv24, bgr, bgra, rgb
  • depth: 8 or 16 bits per pixel [keep current]
  • note: not all depths are supported by all csps.
  • method: use resizer method [“bicubic”]
  • fastbilinear,bilinear, bicubic, experimental, point,
  • area, bicublin, gauss, sinc, lanczos, spline
  • select_every:step,offset1[,…]
  • apply a selectionpattern to input frames
  • step: the number of frames in the pattern
  • offsets: the offset into the step to select a frame
  • see: http://avisynth.nl/index.php/Select#SelectEvery

コメント

  1. […] x264 CLI オプション解説(設定解説)X264 CLI のロングヘルプに記載されたオプションの解説です。事細かに解説します。ram64gb.com2020.05.01 […]

  2. […] x264 CLI オプション解説(設定解説)X264 CLI のロングヘルプに記載されたオプションの解説です。事細かに解説します。ram64gb.com2020.05.01 […]

  3. […] x264 CLI オプション解説(設定解説)X264 CLI のロングヘルプに記載されたオプションの解説です。事細かに解説します。ram64gb.com2020.05.01 […]

タイトルとURLをコピーしました