ncore's Link-Wiki

評価対象

2010/05/19 14:00
http://x264.nl/
x264 rev.1592

目的

処理量度外視で,画質向上の為の最適オプションの調査&自分用まとめ.
以下の文章はあくまでも私的な調査&見解.
H.264知識がある程度あることを前提.

使い方

x264 [options] -o outfile infile

マニュアル

Options

オプション説明
-h基本的なオプションリスト
--help
--longhelpより多くのオプションリスト
--fullhelp全てのオプションリスト

Frame-type options

  • GOP構造
  • 符号化方式
オプション範囲標準値推奨値説明参考
-I, --keyint <integer>250250IDRピクチャ最大挿入間隔(最大GOPサイズ).大きくするとIDR-Pic挿入数が減って画質が良くなるが,シーク間隔が開く.通常10秒程度(25fpsなら250/30fpsなら300)にする.
-i, --min-keyint <integer>0:keyintauto(25)autoIDR-Pic最小挿入間隔(最小GOPサイズ).これ以下のフレーム数でシーン転換を検出した場合はI-Picを挿入.通常は--keyint 指定値の1/10程度.省略すれば自動で--keyint値の1/10の値に設定.
--no-scenecut--シーン検出を無効にする.通常は指定する利点は無い.低遅延ストリーム配信用途などで,ビットレートを一定に保つ為に,I-Pic挿入を避けたいなら指定する.
--scenecut <integer>0:1004055シーン検出の閾値.大きいほどシーン転換と判定し易く,I-Pic挿入枚数が多くなる.少なすぎると,シーン転換を検出できずI-Pic挿入頻度が落ちる.画によって最適値が変わる.一般的に実写40/アニメ55といわれるがあくまで一般的.
--intra-refresh--縦のIntra-Blk列を--keyint周期で画面横方向に移動しI-Picを挿入せずにrefreshする.I-Pic挿入の必要がなくなる為,フレーム毎のビットレートを均一化する効果がある.ただし,縦のIntra-Blk列を跨いでエラー伝播するのを防ぐ為に,Intra-Blk列付近ではmvに制限が加わり,動き探索がミスする可能性大.低遅延のストリーム配信用途の為,PC再生用途では指定する利点は無い.
-b, --bframes <integer>1:1633I/P-frame間のB-frame最大挿入数.一般的に符号量はI>P>Bの為,B挿入数を多くすると符号量は落ちる.ただし,挿入しすぎるとBとその参照先のI/Pの時間的距離が離れるため,動きが大きい動画では動き探索がHitせず画質劣化を招く.画の種類やx264内部のMode判定/レート制御ネック.標準値が3ならば,3で最適化されている可能性大.
--b-adapt <integer>0,1,212適応的B挿入.有効にするとBの効果が少ないシーンではB挿入を控える.0では無効(常に--bframes指定分挿入),1は高速判定で時間もそこそろ精度もそこそこ,2は最適判定で速度は落ちるが判定精度は上がる.有効にした場合,--bframesで指定のB最大挿入挿入枚数が多いほど判定時間が長くなる.なお本オプションはフレームモード判定の為のオプションであり,フレームモード判定を行う1st-passにしか影響を与えない.
--b-bias <integer>-100:10000--b-adaptを指定した場合の適応的B挿入の挿入頻度.値が低い程B挿入を少なく,高いほどB挿入を多くする.Bを挿入しすぎても画質劣化を招くので,推奨値は0.
--b-pyramid <string>normalnone,strict,normalnormalB参照の許可設定.noneは許可しない,strictはBrue-ray規格対応でPのB参照を許可しない,normalはB参照を許可.画質はnormalの方が良好の為,PC再生用途ならnormalを指定.Brue-ray規格と再生互換性を持たせたいならばstrictを指定.
--no-cabac--CABACを使用しないでCAVLCを使用する.圧縮率はCABAC>CAVLC,処理負荷もCABAC>CAVLC.PCでの再生用途なら指定する利点は無い.組み込み機器など低リソースでの再生用途向け.
-r, --ref <integer>0:163参照フレームの最大数.増やすと動き補償の精度が向上が,増やしすぎるとMB単位で保持するref_idx分符号量が増加してしまう.増やすと値に比例して動き探索対象の参照面数が増加するため,符号化時間が長くなる.実写ではフラッシュやuncovered backgroundの様なシーンで有効.口パクなど繰り返しが多いアニメの符号化用途では16などの大きくした方が良いという見解がある.この見解はref_idxの値域による符号量増加が考慮されておらず疑わしいので要検証.RDOPTならば符号量が増加することは無いが,客観画質が向上するのか,どの程度ref>3のフレームが参照されているかを検証.
--no-deblock--DeblockingFilterを無効にする.実写では有効/アニメでは無効という議論もあるが,これはデコーダ側の出力に対するもので,基本的にエンコーダ側では本オプションは指定せず有効にした方が良い.
-f, --deblock <alpha:beta>-6:+60:00:0Blk境界に現れる符号化ノイズを除去する.alphaはFilterを掛ける閾値,betaはFilterを掛けない閾値.弄る必要は全く無い.QPに応じてノイズ除去フィルタの強度を調節するため,ブロックノイズが頻出する低QPでは強いフィルタ,ブロックノイズがほぼ現れない高QPでは弱いフィルタが掛かる.客観画質は確実に向上する.ブロック境界に輪郭が重なった場合,画がボケてしまい主観画質は低下するのではという危惧があるが,参照画像にDeblockingFilterを掛ける分には,残差成分はFilterされていないので心配の必要は無い.また,原画にブロックノイズがのっている本オプションで除去しようなどとは考えずプレフィルタを掛ける方が効率的.--cqm関連を弄らない限りalpha:beta係数を変更する意味はまず無い.
--slices <integer>0:001Pic内に含めるSlice数の設定.Sliceを増やすとI-Blkの予測モードやP-BlkのPMVに制限が加わるため,増やせば増やすほど符号化効率は落ちる.スライス並列処理を行うなら設定するべきだが,基本的には画質的&速度的メリットは全く無い.なお,BD対応ではslices=4を指定する必要がある.
--slice-max-size <integer>0:--SliceSizeを符号量で指定する.MBAFFとは同時指定不可.1Sliceの処理量を平均化して並列処理させたい組込み系用途向け以外で,現実的な利用用途不明.
--slice-max-mbs <integer>0:--SliceSizeをMB数で指定する.MBAFFとは同時指定不可.同上.
--tff---tffTopFieldから始まる(TopFieldFirst)映像に対してMBAFFを有効にする.素材がInteraceならば有効にしたほうが良い.I/P変換してから符号化する手段もあるが,InteraceのままMBAFFで符号化したほうが符号化効率が高い.BD/DVD/地デジTS等,最近の映像素材はほとんどTFFの為,本オプションを推奨
--bff--BotoomFieldから始まる(BottomFieldFirst)映像に対してMBAFFを有効にする.素材がInterlaceならば基本は--tffの方を有効にするべき.DV素材など一部の古い映像素材がBFFになっている可能性がある.
--constrained-intra--Intra予測にInterBlkからの参照を禁止する.IntraBlkの画質が著しく低下する為,一般用途での使用は推奨しない.H.264/SVC対応用途だが,x264は現時点でH.264/SVC非対応の為,ほぼ実験的オプション.

Ratecontrol

オプション範囲標準値推奨値説明参考
-q, --qp <integer>0:51--QP固定.QPを固定してビットレートのバラつきを許容するモード.0指定ならLossLess.QPが変動しない為,画質への影響の大小にかかわらず同じQPが割り当てられてしまい,効率が悪い.もしファイルサイズを少しでも気にするならcrfモードを選択した方が良い.
-B, --bitrate <integer>---定ビットレート制御.出力ファイルの平均ビットレートをkbit単位の値を指定.QP変動を許容して最終的な平均ビットレートを目標に近づける.符号化後のファイルサイズ指定は本オプションを指定する.もし仮に本モードを指定するならば,2-pass以上を強く推奨する.
--crf <float>0:51--画質ベースの可変ビットレート制御.QPとビットレートの両方の変動を許容するモード.指定する値はQPと同等(目標値).0指定ならLossLess.固定QPモードベースだが,動きの大きな部分など画質への影響が少ない部分の符号量を削減して,静止画など画質への影響が大きい部分の符号量を多く割り当てる.符号化後のファイルサイズのバラつきをある程度許容するなら本オプションを指定.本オプションを指定するなら2-pass以上を推奨.
-rc-lookahead <integer>0:keyint40MB treeを先読みして伝播解析を行う時間的距離をフレーム数単位で指定する.大きな値はより遅く,より多くのメモリを要求するがより精密な結果を得ることができる.mb-treeに対する設定項目のため,--no-mbtreeとは共用できない.--b-pyramidと併用付加か要検証.
--vbv-maxrate <integer>0:許容可能なビットレートの瞬間最大値.組込み機器では,再生可能なビットレートに制限がある場合がある.その場合は本オプションを指定する.ビットレートの変動を抑制するため一般再生用途で指定すると画質劣化の原因となる.通常のPC再生用途では非推奨.
--vbv-bufsize <integer>0:デコーダ側の再生バッファの最大値.ビットレート変動の瞬間最大値.ビットレートに変動がある場合,デコーダ側では変動分のストリームをバッファする必要が生じる.組込み機器再生用途などで実装面からデコーダ側バッファ容量が制限される場合がある.その場合は本オプションを指定する.ビットレートの変動を抑制するため一般再生用途で指定すると画質劣化の原因となる.通常のPC再生用途では指定する必要は無い.
--vbv-init <float>0:1,1:--vbv-bufsize0.9-VBVバッファの初期バッファ状態を指定する.0〜1の間で指定した場合はVBVバッファの使用率の指定となる.1以上の値で指定した場合はkbits単位でVBVバッファの使用量と解釈される.組込み再生用途でVBVバッファの使用が必要な場合のみ指定.
--crf-max <float>0:510-crfとvbvが有効な場合に動作するオプション.crfの最大値を指定する.
--qpmin <integer>0:511010QPの最小値を指定.標準値よりも大きいQPを指定することで局所的なビットレートの増大を防ぐが、背景潰れの懸念がある為,標準値よりも大きいqp値を設定するべきではない.
--qpmax <integer>0:515151QPの最大値を指定.標準値よりも小さいQPを指定することで最低画質の底上げとなるが,全体的な画質劣化の懸念がある為,標準値よりも小さいqp値を設定するべきではない.
--qpstep <integer>0:5144隣接するフレーム間で許容するQPの最大変化量.隣接するフレームでQPの変化量が大きい場合,QP値の違いによる画面変化によって,フリッカに代表される主観画質低下が起きてしまう.そこで本オプションで隣接フレーム間でのQPの最大変化量を設定する.値を小さくした場合はフリッカなどは発生しにくくなるが,符号化効率が低下.値を大きくした場合は符号化効率は向上するがフリッカが発生しやすくなる.特に問題が無い場合は標準値の4を推奨.
--ratetol <float>0.1:100.01.0ビットレート指定のエンコードでは,時間軸上でのビットレートの変動率の割合を%で設定.低い値はビットレートの変動を抑える.大きい値はビットレートの変動を許容して複雑なシーンへより多くのビットを割り振る.0.1で設定すると0.1%の変動を許容,100で設定すると100%の変動を許容.ストリーミング配信用途では,転送負荷分散のためにビットレート変動は少ないほうが良い.一般用途ならばある程度の変動を許容した方が主観画質が良くなる.また,VBVを指定している場合は,VBV制御の積極性に影響を与えます.この値を大きくすると,VBVの設定に違反するリスクを高める.
--ipratio <float>1.40Pピクチャを基準にIピクチャに割り当てるQPの割合を指定.より高い値を設定するとkeyframeであるIピクチャの画質を増加させ,それを参照しているP/Bピクチャの画質も押し上げます.一方で大きくしすぎると,Iピクチャに符号量を割いた分,P/Bピクチャの符号量が抑えられP/Bピクチャの画質は劣化します.1.40以上の値を指定すると客観画質は低下する可能性があるが,主観画質は向上する可能性がある.
--pbratio <float>1.30Bピクチャを基準にPピクチャに割り当てるQPの割合を指定.ipratioと同様に一般的にP/BのQPに差をつけた方が画質は向上する.特にBピクチャ連続枚数が少ないならば,本設定を高めにすることで,主観画質を向上することができる.mbtreeは自動的に最適値を計算するため同時には使用できない.
--chroma-qp-offset <integer>-12:1200luma(Y)を基準にchroma(C)に付加する差分.一般的に人間の視覚はYには敏感でCには鈍い.負値を指定するとCの符号量を抑えて,Yにより多くの符号量を割り当てる.正値を指定するとYの符号量を抑えて,Cにより多くの符号量を割り当てる.通常使用されるchroma-format 4:2:0では既にCは間引かれている為,0を推奨.--psy-rdを使用する場合,x264は自動的にYの画質を上げる為に,YとCのQPに2程度の差を設定する.
--aq-mode <integer>0,1,211MB毎にQPを変動させるモード設定.0はMB毎にQPを変動させない.1ではMB毎にQPを変動させる.2では1より変動幅が大きくなる.SSIMなどの客観画質では2がより高い評価となるようだが,一般に主観画質では隣接するQPへの差分が大きくなるとblock noiseが目立つ為,急激な変動を避けるため1を推奨.
--aq-strength <float>1.01.0特徴の無い(平坦な)領域に対してAQにバイアスを掛ける強さを設定.負値は指定不可.標準値の使用を推奨.
-p, --pass <integer>0,1,2n-passエンコードを行う場合に利用.0はstatファイルを出力するモードで1st-pass用.1はstatファイルを入力するモードでlast-pass用.2はstatファイルを読み込んで更新するモードで中間pass用.1st-pass目はQP制御に注力する為に,いくつかの符号化動作は自動的に省略される.--bitrate,--crfとは併用を推奨.
--stats <string>---n-passエンコード時に,各パスでの符号量を記録するファイル.MB treeが有効になっている場合はファイルサイズがかなり大きくなる.バッチ処理時は毎回削除する必要があるか.
--no-mbtree---MB treeによるMB単位のレート制御を無効にする.MB単位のQP制御は画質向上の為には必須の為,特別な理由が無いなら本オプションは指定するべきではない.
--qcomp <float>0.0:1.00.600.60crfの動作バランスを調整.0に近いとより固定Bitrate寄りの動作.1に近いとより固定QP寄りの動作.--mbtreeが指定されている場合は,mbtreeの強度にも流用される.意味合いはcrfに対するものと同じ.標準値の0.60は視覚特性的に最適化されていない可能性があるが,主観評価が困難な場合は標準値を推奨.
--cplxblur <float>0:99920.020.0qcomp前に時間軸上のQPの変動に対してボカシを掛ける強度.値を小さくするとQPの変動幅が増加.値を大きくするとQPの変動幅を抑える.統計ファイル作成時に使用するため2pass以上の場合に有効となる.一般にQP変動が小さいと画面変化に対して柔軟に符号量を削減できないが,QP変動が大きいとフリッカが発生する.標準値20.0を推奨.
--qblur <float>0:990.50.5qcomp後に時間軸上のQPの変動に対してボカシを掛ける強度.値を小さくするとQPの変動幅が増加.値を大きくするとQPの変動幅を抑える.統計ファイル作成時に使用するため2pass以上の場合に有効となる.一般にQP変動が小さいと画面変化に対して柔軟に符号量を削減できないが,QP変動が大きいとフリッカが発生する.標準値0.5を推奨.
--zones <zone0>/<zone1>/...<start frame>,<end frame>,<options>映像シーン毎に符号化設定を変更する.OP/本編/ED/予告などシーン毎に明確に符号化設定を分けたい場合に有効.シーンの開始地点,終了地点,符号化設定を指定.
--qpfile <string><filename>レート制御を手動制御する.<filename>内に'<framenum> <frametype> <quantizer>'の順で列挙する.

Analysis

オプション標準値範囲推奨値説明参考
-A, --partitions <string>p8x8,p4x4,b8x8,i8x8,i4x4,none,allp8x8,b8x8,i8x8,i4x4allI/P/B予測で使用する予測サイズの種類指定.一般にHD以上の画面サイズでは4x4サイズはほとんど利用されない為,sub_mb分の符号量が無駄になる為,推奨値には4x4が含まれていない.また,sub_mbの境界にもDeblockingFilterが適用されることも考慮するとSDより大きい画面サイズでは4x4は非推奨.SD未満のサイズでは4x4の使用が画質に大きな影響を与える為,all指定を推奨.中間となるSD画面サイズでは4x4指定で多少の画質向上を期待できるが,速度が落ちる為,速度と画質のどちらをとるかは微妙なところ.なおH.264規格上i8x8では8x8dctが必須となる為,no-8x8dctと併用不可.
--direct <string>none,spatial,temporal,autospatialautoB-Picで使用されるDirect予測モード.spatialは空間Directで画面内からMVを予測する.temporalは時間Directで隣接PicからMVを予測する.spatialは残差成分が残る以外はSkipと同じ.一般にspatialの方が効きやすいが,画質優先ならばautoにすることを推奨.
--no-weightb--B-Picで重み予測を無効にする.重み予測は参照先との時間的距離に差が明確になる--bframesが2以上の条件で意味を持つ.スライス単位で重み係数を保持する為、符号量増加は軽微.ただし,フェードなど限定的なシーンにしか効果がない為,大幅な画質向上は期待できない.それでも,多少は効果があるため,通常は重み予測を有効にするために,このオプションは指定しないほうが良い.組込み機器などの低リソースでの再生用途向け.
--weightp <integer>0,1,22-P-Picでの重み予測モード決定方式.0ならP-Picでの重み予測は無効.1では-1の固定オフセットで処理する.2ではフェード検出とオフセット値の計算を行う.weightpに対応していないデコーダがあるため,再生互換性を重視するなら0を推奨.画質向上を重視するなら2を推奨.
--me <string>dia,hex,umh,esa,tesahextesa整数探索アルゴリズム.基本的にはtesa側が処理量が大きく画質が高い.diaはダイアモンドサーチ.hexはヘキサゴンサーチ.umhは"Unsymmetric-Cross Multi-Hexagon Grid Search"でヘキサゴンサーチなどの複数の探索法を階層的に組み合わせた手法で現状処理量と画質の観点から最もバランスが良い.esaはSAD評価による全探索.tesaはアダマール変換により符号化後のビット量も考慮した評価を行う全探索.tesaはesaと比較して符号化後のbit量が僅かに削減できるが,アダマール変換により増加時間も僅か.速度のみを重視ならdiaを速度と画質の効率重視ならumhを画質重視ならtesaを推奨.
--merange <integer>0:16整数探索範囲.画面サイズに応じて大きな値を設定する必要がある.SDなら64,FullHDなら128推奨.
--mvrange <integer>-1:-1-1mvの最大値.mv最大値は基本的にはlevelやprofileに依存する.-1指定でlevel/profileに適合した最大値が選択される.組込み再生用途などでlevel/profileに規定されない制限がMVにある場合のみ本オプションを指定する.
--mvrange-thread <int>-1:-1-1複数スレッド間でバッファ共有するMVの範囲をpixel単位で指定する.複数スレッドでmeを行う場合,設定次第で同時に実行されるスレッド数が制限されます.スレッド動作をさせる場合には基本的にはautoを推奨.
-m, --subme <integer>0-10710SubPixel(小数精度)動き補償の精度.基本的には数値が大きいほど遅く高画質に,小さいほど早く低画質になる.0はSubPixel探索しない.1はモード判定をSADで評価し,その後1/4精度探索.2はSADTでモード判定後1/2と1/4探索.3は判定前に1/2画素探索,判定後に1/4で2回探索,4は判定前にも1回1/4探索,5は判定前に2回1/4探索を行う.6-7はモード判定にRDOptimizeを導入.8-9はイントラ予測とMVにもRDOptimizeを導入.10はQP制御にもRDOptimizeを導入.10を指定する場合はtrellis=2,aq-mode>0の必要あり.通常は7を推奨,画質重視の場合は10,速度重視の場合は5を推奨.2以下は画質劣化が著しい為,profile等で制限されない限り5以上を使用する.
--psy-rd1.0:0.0視覚特性に応じた最適化設定.1個目の値は視覚特性的RDOの強度でsubme>=6が必要.2個目は量子化の丸め制御の強度でtrellis=>1の指定が必要.2個目は試験的実装.標準値を推奨.
--no-psyPSNRやSSIM等の客観画質を劣化させる視覚特性最適化設定を全て無効にする.基本的には全てのpsy最適化が無効になる為,主観画質を損なっても客観画質を上げたいなら推奨.
--no-mixed-refs--サブマクロブロック毎の別フレーム参照を禁止.frameref>1の場合に有効.画質劣化となる為,デコーダ側制約などの特段の理由が無ければ非推奨.
--no-chroma-me--高速化のためにchromaでの動き探索を行わない.この場合chromaではlumaと同じ動き補償が行われる.
--no-8x8dct--8x8dctを無効にする. partitionsの選択範囲が狭まる為,非推奨.
-t, --trellis <integer>0,1,212DCT量子化の丸めをRDOptimizeによって制御する.0なら無効.1なら最終エンコード時に実行.2ならモード決定時に実行.CABACが有効の必要あり.
--no-fast-pskip---no-fast-pskipP-Picで簡易判定でSkipMBと判定された場合でも,他モードの評価を行う.本オプションは指定しなくても処理量は僅かにしか増えない為,指定することを推奨.
--no-dct-decimate---no-dct-decimateP-PicでDCT係数が十分に小さい場合でも省略しない.本オプションを指定しない場合RD特性は若干向上するが,P-Picの主観画質が損なわれる可能性がある.本オプションの指定を推奨.
--nr <integer>--符号化前にx264内蔵のnoise reductionフィルタをかける.処理は非常に高速.フィルムグレインの様な失われても主観画質に影響しない高周波ノイズが乗っている映画コンテンツなどに有効.本オプションは一般的に高周波成分を取り除くためRD特性を向上させるが,主観画質は低下するため,特定のコンテンツ以外では非推奨.もし掛けるにしても,他ツールを使用してコンテンツごとに最適なフィルタを掛けたほうが良い.
--deadzone-inter <int>0:3221-インタ予想のDCT量子化係数で1未満の値を丸める閾値.0ならば通常の四捨五入で0.5以上は1,0.5未満は0.1ならば1未満は切り捨てて0.32ならばDCT係数を間引けるためビット消費を抑えられ,0ならば高画質となる.trellisと共用できない.
--deadzone-intra <int>0:3211-イントラ予想のDCT量子化係数で1未満の値を丸める閾値.0ならば通常の四捨五入で0.5以上は1,0.5未満は0.1ならば1未満は切り捨てて0.32ならばDCT係数を間引けるためビット消費を抑えられ,0ならば高画質となる.trellisと共用できない.
--cqm <string>flat,jvtflatjvtcustom qp matrixを指定.x264ではflat,jvtの2つのプリセットが用意されている.MinProfileまではqp matrixを変更できないためflat,HighProfile以降はjvtを指定できる.デコーダ側でMainProfile以下の制約が無い限りはjvt指定を推奨.
--cqmfile <string>--JM互換フォーマットでcustom qp matrixを指定.基本的にはjvtでほぼ最適化されており,変更する必要は全く無い.通常の画の符号化ならばqp matrixを弄っても良いことは全く無いため非推奨.白黒など特殊な画を符号化する時のみに有効.
--cqm4 <list>--cliから4x4cqmを直接指定したい場合に使用.cqmfileで指定すれば良く,余り意味は無いオプション.
--cqm8 <list>--cliから8x8cqmを直接指定したい場合に使用.cqmfileで指定すれば良く,余り意味は無いオプション.
--cqm4i, --cqm4p, --cqm8i, --cqm8p--cliからI/Pのcqmを直接指定したい場合に使用.cqmfileで指定すれば良く,余り意味は無いオプション.
--cqm4iy, --cqm4ic, --cqm4py, --cqm4pc--cliからY/Cを直接指定したい場合に使用.cqmfileで指定すれば良く,余り意味は無いオプション.

Input/Output

オプション説明
-v, --verbose詳細表示.フレーム毎に符号化状況を出力する.
--no-progress途中状況を符号化出力しない.
--quietスタートメッセージも出力しない.
--psnrPSNRによる客観画質評価を行う.出力結果にPSNR値が出力される.
--ssimSSIMによる客観画質評価を行う.出力結果にSSIM値が出力される.

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

編集にはIDが必要です