x264 [info]: slice I: 490 Avg QP:19.21 size: 24682 PSNR Mean Y:47.78 U:49.86 V:51.00 Avg:48.38 Global:47.57ピンクが枚 数。 黄色がデータサイズ。 枚数では1.4%に過ぎないI/IDRだが、平均サイズはむちゃむちゃデカイ。そう!アイは惜しみなく奪うのだ!(どーん)。
x264 [info]: slice P:15350 Avg QP:21.01 size: 8706 PSNR Mean Y:45.88 U:48.60 V:49.90 Avg:46.69 Global:45.88
x264 [info]: slice B:18195 Avg QP:21.47 size: 1979 PSNR Mean Y:45.94 U:48.79 V:50.08 Avg:46.77 Global:45.96
『改訂版 H.264/AVC 教科書』ixページ。
しかし、我々が用いた技術は、はるかに 洗練され手の込んだものになっていて、時にベースとなっている設計原理の単純さを見失うほどです。もとのH.261 標準文書が仕様のすべてを表して25ページ以下であったのに対し、今回の新標準はその10倍以上の長さであり、技術的内容の密度も高くなっています。そ の様子は、折り紙作品に似ています。単純な基本コンセプトを幾層にも重ねることにより、新たな高度の造形に至っていて、これは注目に値する成果だと確信し ています。
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806準拠) |
---|
I, --keyint <integer> | keyint=<value> |
|
|
|
|
|
|
-i, --min-keyint <integer> | keyint_min=<1-keyint/2> ※式の意味不明、入力値は整数 |
|
|
|
|
|
|
--scenecut <integer> | scenecut=<-1-100> |
|
|
|
|
|
|
MEncoder Document:x264コデックでのエンコードBフレームを2以上にすると適応的Bフレーム (b_adapt)、Bフレームの参照化(b_pyramid)、bime、brdo、weight_bなどの活躍余地が増え、全体的な圧縮効率が向上し ます。順序としては、まずBフ レームに適さないコマをb_adaptが選り分け、残ったBの中にb_pyramidが参照関係を構築する、そして基幹部のB生成工 程にbime、brdo、weight_bが取り付いて無駄なbitを削りとる。この連携がx264の花。ゴミのようなオプションを山のように積み上げるH.264/AVCの本領です。それぞれの効果は相関関係にあるので「こうすれば良い」とは書きにくく肚に落とすのはちとホネですが、把握する価値はあります。
他のコデックでのエンコードに慣れている人 の中には、B-frameは必ずしも有益とは限らない事をご存知の方もあるでしょう。H.264ではこの常識は異なります。 B-frameで使える新しい技術とブロックタイプができました。一般的に、単純なB-frame選択アルゴリズムでさえ、目覚ましいPSNRゲインが得 られます。また面白い事に…
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806準拠) |
---|
-b, --bframes <integer> | bframes=<0-16> |
|
|
|
|
|
|
--no-b-adapt |
(no)b_adapt |
|
|
|
|
|
|
--b-bias <integer> |
b_bias=<-100-100> |
|
|
|
|
|
|
--b-pyramid |
(no)b_pyramid *QT7非互換 * |
|
|
|
|
|
|
x264cli (rev600準拠) | MEncoder
-x264encopts (dev-SVN-r20806準拠) |
---|
--no-cabac | (no)cabac(*Baseline非互 換*) |
|
|
|
|
|
|
-r, --ref
<integer> |
frameref=<1-16> |
|
|
|
|
|
|
--no-deblock |
(no)deblock |
|
|
|
|
|
|
-f, --deblock
<alpha:beta> |
deblock=<-6-6>,<-6-6> |
|
|
|
|
|
|
--interlaced |
(no)interlaced |
|
|
|
|
|
|
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806準拠) |
---|
-q, --qp<integer> [26] | qp=<0-51> [26](*未試用*) |
|
|
|
|
|
|
-B, --bitrate <integer> | bitrate=<value>(*常用1024*) |
|
|
|
|
|
--crf <float> | crf=<1-50> (*1pass ABR用*) |
|
|
|
|
|
|
--vbv-maxrate <integer> [0] | vbv_maxrate=<value> (ABR or two pass) [disabled](*未試用*) |
|
|
|
|
|
|
--vbv-bufsize <integer> [0] | vbv_bufsize=<value> (ABR or two pass) [none](*未試用*) |
|
|
|
|
|
|
--vbv-init <float> [0.9] | vbv_init=<0.0-1.0> (ABR or two pass) [0.9](*未試用*) |
|
|
|
|
|
|
--qpmin <integer> [10] | qp_min=<1-51> (ABR or two pass) [10](*常用10*) |
|
|
|
|
|
--qpmax <integer> [51] | qp_max=<1-51> (ABR or two pass) [51](*常用51*) |
|
|
|
|
|
|
--qpstep <integer> [4] | qp_step=<1-50> (ABR or two pass) [4](*常用4*) |
|
|
|
|
|
|
--ratetol <float> [1.0] | ratetol=<0.1-100.0> (ABR or two pass) [1.0](*常用4*) |
|
|
|
|
|
|
--ipratio <float> [1.40] | ip_factor=<value> [1.4](*未試用*) |
|
|
|
|
|
|
--pbratio <float> [1.30] | pb_factor=<value> [1.3](*未試用*) |
|
|
|
|
|
|
--chroma-qp-offset <integer> [0] | chroma_qp_offset=<-12-12> [0](*未試用*) |
|
|
|
|
|
|
-p, --pass <1|2|3> | pass=<1-3> (*常用2パス*) |
|
|
|
|
|
|
--stats <string> ["x264_2pass.log"] | -passlogfile <filename>(*常用2パスにつき常用*) |
|
|
|
|
|
|
--rceq <string> | 対応不詳 |
|
|
|
|
|
|
--qcomp <float> [0.60] | qcomp=<0-1> (ABR or two pass) [0.6](*常用0.6(default)*) |
|
|
|
|
|
|
--cplxblur <float> [20.0] | cplx_blur=<0-999> (two pass only) [20](*未試用*) |
|
|
|
|
|
|
--qblur <float> [0.5] | qblur=<0-99> (two pass only) [0.5](*未試用*) |
|
|
|
|
|
|
--zones <zone0>/<zone1>/... | zones=<zone0>/<zone1>[/...]](*未試用*) |
|
|
|
|
|
|
--qpfile <string> | 対応不詳 |
|
|
|
|
|
|
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806 準拠) |
---|
-A, --partitions <string> [?] | partitions=<list> [p8x8,b8x8,i8x8,i4x4](*常用デフォルト*) |
list | 適 用タイプ | 備考 | BP | MP | HP |
p8x8 | p16x8, p8x16, p8x8 | ? | 可 | 可 | |
p4x4 | p8x4, p4x8, p4x4 | p4x4推奨はsubq >= 5、 かつ、低解像度の場合のみ。 |
? | ? | 可 |
b8x8 | b16x8, b8x16, b8x8. | ? | 可 | 可 | |
i8x8 | i8x8 | 8x8dctと一緒に使わないと無意味。 |
不 可 | 不可 | 可 |
i4x4 | i4x4 | (* 微細なディテイルに効く*) | ? | 可 | 可 |
all | 上 記全て有効 | 不 可 | 不可 | 可 | |
none | 上 記全て無効 | 可 | 可 | 可 |
|
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
--direct <string> ["spatial"] | direct_pred=<name> [spatial](*常用auto*) |
|
|
|
|
|
|
--direct-8x8 <-1|0|1> [-1] | 対応不詳 |
|
|
|
|
|
|
-w, --weightb [不詳] | (no)weight_b [不詳] (*常 用オン、要bframes=1以上*) |
|
|
|
|
|
|
--me <string> [hex] | me=<name> [hex](*常用umh*) |
|
|
|
|
|
|
--merange <integer> [16] | me_range=<4-64> [16](*常用16、要me=umh以上*) |
|
|
|
|
|
|
-m, --subme <integer> [5] | subq=<1-7> [5](*常用7*) |
|
|
|
|
|
|
--b-rdo [?](*要--subme 6以上*) | (no)brdo [?](*常用オン、要 subq=6以上*) |
|
|
|
|
|
|
--mixed-refs [off?](*要--ref 1以上*) | (no)mixed_refs [?](*常用オン、要frameref=1以上*) |
|
|
|
|
|
|
--no-chroma-me [?](*要-- subme 5以上*) | (no)chroma_me [on](*常用、要subq=5以上*) |
|
|
|
|
|
|
--bime [off] | (no)bime [?](*常用、要bframes=1以上*) |
|
|
|
|
|
|
-8, --8x8dct [off] | (no)8x8dct [?] (*常用on、HP、QT7非互換) |
|
|
|
|
|
|
-t, --trellis <integer> [0] | trellis=<0-2> [0](*常用2、要subq=6以上、CABAC*) |
|
|
|
|
|
|
--no-fast-pskip [off] | (no)fast_pskip [on(fast_pskip)](*常用off(nofast_pskip)*) |
|
|
|
|
|
|
--no-dct-decimate [off] | (no)dct_decimate [dct_decimate] (*常用nodct_decimate*) |
|
|
|
|
|
|
--nr <integer> [0] | nr=<0-100000> [0](*未試用*) |
|
|
|
|
|
|
Doom9 Explanation for new switches in x264上記スレには高bitrateってどのくらいなのだという議論もあるが、もともと一概には言いにくい上に、SDとHDが入り交じる現在ではさらにやっかい だ。H.264/AVCに対応したBPP表が必要と思われる。
#4 IgorC
--deadzone:高bitrate でディテイルレベル向上。ノイズ、フィルムグレイン、など。#10 AlexW(x264 contributor)
IgorC が言ったように、--deadzoneは中~高bitrate領 域での精細なディテイルやフィルムグレインを向上させる。#23 akupenguin(x264 author)
まず--deadzone-intra の調整から始めるのをお奨めする。違いの大半はここで発生するみたいだから。--deadzone-intra の デフォルト値は11だが、いくぶん0に近い方がややディテイルが残るようだ。CQMと一緒に使うとなお良いハズ。
理論上、lambdaを改造すればtrellisに もdeadzoneが使える。でも実装はまだ。#10 AlexW(x264 contributor)
ま だちゃんとテストしてないが、速度低下は最小限のハズだ。#27 akupenguin(x264 author)
Deadzoneはquality-per-qp (*1)に影響する。理想的なデブロック強度はqualityに依るが、現実のデブロック強度(規格上の定義によるもの、およびx264オプション で指定するもの)はQPと相関関係にある。qualityでは無い。
だ からもしquality-per-qpを調節すれば、デブロックの設定も変えたいケースがあるだろう。しかしながら、デブロック設定の単位は極めて粗いの で、deadzoneを最低値の0まで下げた場合でも(推奨しない)、対応するデブロック補正はせいぜい-1に止めるべきだろう(default deadzoneの時に使っていたデブロック強度に対して-1)。反対にdeadzoneを最大値の32まで上げるなら、適切なデブロックはせいぜい+ 1。
適切なdeadzoneとbitrateとの間に特定の関係は無い。Deadzoneは常にrate- distorion optimal value(*2)と相関関係にあるので、いかなる変化もサイコビジュアル(*3)なもので、まだ断定的な推奨値を書けるほどテストされていない。
総務省 情報通信審議会情報通信技術分科会(第42回)資料42−1−2 CSデジタル放送高度化委員会報告 本体( 6P)デッドゾーンがあるんだかないんだかよくわかりませんが、とりあえずデッドゾーンというのは細かいディテイルを端折る処理のようです。インターにおいてもっていうんだからイントラにもあるのでしょうね。たぶん。
3.2 量子化
直交変換された信号を量子化して情報量を削減するが、H.264 | MPEG-4 AVC では、小さい成分を強制的に0に丸める領域(デッド・ゾーン)のない量子化処理をインター予測においても行っている。
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806 準拠) |
---|
--deadzone-inter <int> [21] | deadzone_inter=< 0-32> [21](*未試用*) |
|
|
|
|
|
|
--deadzone-intra <int> [11] | deadzone_intra=< 0-32> [11](*未試用*) |
|
|
|
|
|
|
Encoding H.264 using the x264 Command Line Interface:CQMの前フリから
CQMとは、Custom Quantisation Matrix (または Matrices、カスタム量子化マトリクス)の省略形です。量子化マトリクスは格子状に配置された数字(*数列、行列*)からなり、それぞれの数字は quantum(*量子*)と呼ばれます。これは、これらの数字がどのくらい画像を劣化させるかを決めるという事です。
大きなquantumで構成された数列ほど映像をソフトにします。小さなquantumで構成された数列ほどディテイルが残ります。x264のデフォル トは、"flat 16" マトリクスです。全てのquantumは16で、特別なデコードは一切必要ありません。これとは別に、カスタム量子化マトリクス機能はHigh Profileの機能で、実際のデコードに必要なリソースは全く変わらないにも関わらず、デコーダ側にそれ専用のサポートが必要になります(*1)。
Xvidのカスタムマトリクスでは、ほとんどデフォルトのH.263量子化形式で問題はありませんでした(*2)。x264でも flat 16で多くのケースで問題はないと思わますが、中には、高周波係数領域(*high frequency co-efficient area*)を大きなquantumで埋めたマトリクスで精細なディテイルを僅かにぼかし、圧縮しやすくしたい事があるかもしれません。
理想的なCQMを定義するためには様々な方法があります。利用可能なオプションは以下の通り:
x264cli | MEncoder -x264encopts | メモ(*常用jvt 、HP、QT7非互換*) | ||
---|---|---|---|---|
--cqm <string> デフォルトのflatマトリクスか内蔵のJVTマトリクスを選択する (JVTマトリクスはH.264規格策定のパートナーであるJoint Video Teamが作った)。マトリクスはx264.exeに内蔵されているのでCQMの使い方としては全く簡単だ。外部ファイル要らないから。
|
cqm=<flat|jvt|<filename>> 事前に定義済みのカスタム量子化(quantization)マトリクス か、JMフォーマットのマトリクスファイルを使う。
flat 事前に定義済みのflat 16 matrixを使う (default)。 jvt 事前に定義済みの JVT matrixを使う。 <filename> JMフォーマットのmatrixファイルを使う NOTE: Windows のCMD.EXEユーザは、全てのCQMリストを使おうとする場合、コマンドラインの構文解析で問題が起こり得る。これはコマンドラインに最大長制限があ るため。そうした場合、リストをJMフォーマットCQMファイルに入れて上記の設定でロードする事を推奨。 |
な んとなくJVT常用。 Xvidでquant_type=mpegに変えた時はうわなにこれスゲェって 感じだったが、そこまでの違いは感じなかった。それでも闇階調の"フレームごとにぱたぱたと変わる"ブロックノイズ削減に若干の効果がある。 外 部ファイル 下記にいくつか公開されている。 Doom9: collection of available AVC custom quant matrices Bond 氏によるとJVTはcomparable to the "mpeg" matrix of mpeg-4 aspとの事。ならば横幅640以上ではせめてJVTはマストだと思う。 外部ファ イルの作成 MeGUIは "MEncoder GUI" だが、ffmpegXと同様、様々なツールが詰まっているようだ。こうしたエンコード・スイートにはマトリクスエディタが付属している事がある。 MEncoder 本体の機能にカスタムマトリクスエディタは見当たらないので、テキストエディタか。 |
||
--cqmfile <string> カスタムマトリクスを使いたければ、このオプションが他よりは実用的だろ う。このオプションで外部マトリクスファイルを読み込める。読み込めるのはJM互 換形式(JMはレファレンスエンコーダ)。Doom9に外部マトリクスのリストがある。
他の全ての--cqm関連オプションに優先。 |
||||
--cqm4 <list> 全ての4x4量子化マトリクスの指定。入力はカンマ区切りの16個の整数 でなければならない。このオプションは実験には良いかもしれないが、コマンドラインがひどく長 くなる。特に他の量子化マトリクスも指定するなら尚更だ。
|
--cqm4i 輝度と彩度
|
--cqm4iy 個別設定
|
cqm4iy=<list> (also see cqm) 4x4イントラ輝度。
コンマ区切り整数16個、各数値の範囲は1-255。 |
|
--cqm4ic 個別設定
|
cqm4ic=<list> (also see cqm) 4x4イントラ彩度。
コンマ区切り整数16個、各数値の範囲は1-255。 |
|||
--cqm4p 輝度と彩度
|
--cqm4py 個別設定
|
cqm4py=<list> (also see cqm) 4x4インター輝度。
コンマ区切り整数16個、各数値の範囲は1-255。 |
||
--cqm4pc 個別設定
|
cqm4pc=<list> (also see cqm) 4x4インター彩度。
コンマ区切り整数16個、各数値の範囲は1-255。 |
|||
--cqm8 <list> 全ての8x8 量子化マトリクスの指定。入力はカンマ区切りの64個の整数でなければならない。ほか、前項に同じ。
|
--cqm8i 輝度と彩度
|
- | cqm8iy=<list> (also see cqm) 8x8イントラ輝度。
コンマ区切り整数64個、各数値の範囲は1-255。 |
|
- | - | cqm8ic がないのは入力がYUV4:2:0限定だから? | ||
--cqm8p 輝度と彩度
|
- | cqm8py=<list> (also see cqm) 8x8インター輝度。
コンマ区切り整数16個、各数値の範囲は1-255。 |
||
- | - | cqm8pc がないのは入力がYUV4:2:0限定だから? |
x264のレートコントロールの性質概要上記はソースコード内の付属文書。Encoding H.264 using the x264 Command Line Interface(Zero1氏)にこれと矛盾する妙なオプションがあった。どうもマクロブロック単位QP変更を前提にしたオプショ ンに見えたのだが、手許では見た記憶が無くtracで検索しても過去に存在した形跡も無い。覚書(なるP氏)の掲示版 にて当該オプションに覚えが有る人がいないか聞いてみたところ、、、、
H.264 はマクロブロック単位でQPを変える事ができるが、x264では採用していない。QPはフレーム単位だ。1フレーム内部の全マクロブロックに単一のQP値 を使う。
※ 画質的にはマクロブロック単位 QPのほうが有利と思われる。例えば画面右半分が静止画像、左半分が激しく動く場面など。この差はHDTVで効いて来る と思う。反面、実装は地獄じゃろうねぇ。
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806 準拠) |
---|
--aq-strength [0.0] | 対応無し [] |
|
|
|
|
|
|
--aq-sensitivity [15.0] | 対応無し [] |
|
|
|
|
|
|
Video Usability Info (Annex E):"VUI 設定はエンコーダが使うものではなく、再生設備に対する付加情報に過ぎない。詳細はdoc/vui.txt参照。自己責任で使う事。"
The VUI settings are not used by the encoder but are merely suggestions to
the playback equipment. See doc/vui.txt for details. Use at your own risk.
x264cli (rev600準拠) |
MEncoder -x264encopts (dev-SVN-r20806 準拠) |
---|
--overscan <string> [undef] | 対応不詳 |
|
|
|
--videoformat <string> [undef] | 対応不詳 |
|
|
|
--fullrange <string> [off] | 対応不詳 |
|
|
|
|
--colorprim <string> [undef] | 対応不詳 |
|
|
|
|
|
--transfer <string> [undef] | 対応不詳 |
|
|
|
|
|
--colormatrix <string> [undef] | 対応不詳 |
|
|
|
|
|
--chromaloc <integer> [0] | 対応不詳 |
|
|
|