アニメエンコで役に立つかもしれない覚書


目次

index.html

□□□ 1章 初めに □□□
 

□□□ 2章 AVI出力 □□□
 

index1a.html

□□□ 3章 作業地獄のために □□□
 
index2.html

□□□ 4章 x264 □□□
 
-------------以下加筆予定--------------------------

index3.html

 
□□□ 5章 観られてる!! □□□
 

------------------------------------------------------------------

□□□ 4章 x264 □□□

だぁらっしゃー (`Д´)ノ
x264で隔離だ。とことん記述しちゃうぞー(;´Д`)ハァハァ
 
 

 
-*-*-*-*-*-*-*-*-
 

・06 x264

・06-01 x264とは?
 
google先生に聴けば分かるかと思いますが、x264はH.264規格のオープンソースなコーダです。
固有名詞でx264であって、規格がH.264です。ごっちゃにしないようにしましょう。
H.264規格のコーダーは、他にいくつか有ります。
 ・アップル社のQuickTimeProのエンコーダー、 ・ペガシス社のTMPGEnc 4.0 XPress
 ・MainConcept AG社のH.264 Encoder v2、 ・ATI社のAvivo Video Converter …など。
有料販売物だったり、配布されているものだったり。最近は選択肢が多くなりました。
用途によって、x264以外のコーダーを利用しても良いかと思います。用途次第です。
ですが。ここでは、x264の解説(?)をしていきたいと思います。…ワタクシは、x264が好みなだけです。
ここ読んで更なる理解を求めるならば、google先生に聞いてみましょう。特に海外サイト。Doom9とか。
 
codecと何処が違うのでしょうか。
━━━ここは、codecをgoogle先生に聴けば分かるでしょう。
マクロソフトの用語説明から、勝手にコピペ↓
-----------------------------------------------------------------------------------
codec (コーデック) 1. coder/decoder (コーダー/デコーダー) の略。
アナログ形式とデジタル形式の間で、オーディオまたはビデオ信号を変換できるハードウェア。
2. compressor/decompressor (コンプレッサ/デコンプレッサ) の略。
オーディオまたはビデオデータを圧縮および解凍できるハードウェアまたはソフトウェア。
-----------------------------------------------------------------------------------
だそうな。
デコーダの対語なので、x264はコーダーと云えるはずです。
 
現在、専用のデコーダは無いです。作るつもりも無いそうです。
x264を作成するとFourCCが、aviコンテナを使えばH264、mp4コンテナを使えばAVC1となる。
…最近のrevでは、vfwでavi作っても、FourCCがAVC1になってますね。
兎も角。この二つのFourCCが読めるデコーダを用意すれば、見ることが出来る。
具体的には、ffdshow・MPC・Mplayer・VLC media player・CoreAVC・QuickTime辺りが必要になるだろう。
自分で使うものを用意しましょう。
ちなみに━━━
QuickTimeは、ハイプロファイルをデコードする事出来たかなぁ。どうだったかなぁ。(疑
2007年に入って出来るようになった気もしますが、QTはコンテナのアスペクト比を参照しないらしいッス。
ぶっちゃげ。何かの縛りが無い限り、使ってあげる義理は無いです。
だから、windows環境で使う人は普通いない。
 
x264は、コーダですね。本題のコーダですが。
VideoLAN - x264にて daily tarball が配布されています。
毎日2245時(ジョンブル連中の島にある天文台時間)にて、ftp鯖に置かれます。
…404ならば、テキトウにgoogle先生に聴いて、この場所ではないソース見つけてください(マテ
兎も角。ソースbuildして、x264.exeを利用しましょう。
cygwinや、msys+mingw+gcc(mingw用バイナリ)でbuildするのが、簡単かと思われます。
M$のVisual StudioやVisual C++2005 Express EditionなどのC++でも、当然build可能です。
Visual C++2005 Express Editionは、無料配布されています。
導入方法を説明しているサイトが、google先生に聞けばすぐ見つかると思います。
そう云ったサイトやMSの説明を読んでVC++2005EE使う人は、使ってみてください。
 
でも実は、バイナリを配布してくれるところもあるので、使うだけなら問題ないです。(ぉ
daily tarballのリンクのすぐしたに、こう書いてある。
→Unofficial builds for Windows are available from Jarod or Sharktooth.
そんなワケで、Jarod か Sharktooth の両者のどちらかのサイトで拾うのが、良いでしょう。
こだわりが無ければ、x264.nl(Jarod)のものを使えばいいかと思います。
コノヒトのバイナリが、何も手を加えていない普通なバイナリbuildだと思います。
更新は早めなので、助かります。(藁
 
x264は、ヴァージョン(Ver)ではなく、リヴィジョン(rev)で管理されています。
verは、機能が一定以上UPった時に、開発者が任意でUPさせるナンバーです。
対して。revは、開発日記的なものです。一区切りすると、revが上がります。
機能がろくに変わって無くても、上がるものなのです。
すなわち、revが高ければ、良いワケではないです。
Verナンバーを使ってるソフトにも、同じ事は言えるかもしれませんが、
revナンバーを使用しているソフトの方が、より顕著だと云えるかと思います。
そこで、revごとに、何を変えたか一口メモが、チェンジログとして残っていますので、
使うときには、チェンジログは見ておいたほうが、何かと便利かと思います。
自分の用途にそぐわない時は、少しだけ古いrevを使ったほうがいい場合もあります。
ですが、普通新しいものを使いましょう。
バグ取り・typo直しをやるのは、新しいものだけですしね。
 
 
 
・06-01A VFWとGUI
 
VFWとは、Video For Windowsのこと。
DirectShow関係が整備される前に、動画ファイルを扱うAPI仕様を用意しました。
それが、vfwです。
Avi(Audio Video Interleaving)コンテナを使いwindows内でビデオファイルを扱えるようにした。
vfwのAPIを使用するフロントエンドツールを用意すれば、vfwを持ってるコーダーによる圧縮が可能です。
DivxなどがAviUtlで使えるのは、そのためです。
 
x264は、vfwも機能としてありました。でも、開発は活発では、ありませんでした。
そして。rev581にて、vfwは外されてしまいました。
フレーム間での処理が多いので、1フレームづつしか扱えないvfwは、不便でした。
どんなに頑張ってハックしても結局不完全で、どうも報われませんでした。
x264のvfwは、そういう存在。
例えるなら、アドビ製品のLE版みたいな感じかも知れません。
" とりあえず使用可能だが、その真価を発揮する事は不可能。 "━━━うん。
アドビのLE版製品って、こんな感じですね。
 
…そうだとしても、vfwを使いたい時もある。
必要と思う人は、自分でコードを書いてみましょう。
ソースは配布されていたし、やってみるのもいいかもしれません。
(追記:どうやら、有志で作ってる方がいらっしゃるらしいです。必要なら、探して利用してみましょう。)
 
━━━で。普通は、CLIのx264.exeを使いましょう。
バイナリ配布されているし、ソースに入ってるmakeファイルで簡単にbuildできます。
x264.exe使い方は、プロンプト内で引数なしで実行すると、ヘルプ出ます。読みましょう。
 
道具は、用途次第です。
vfwじゃないと絶対駄目ならば、vfwを使うべきです。
vfwが不便でCLIならば便利であるならば、CLIを使うべきかも知れません。
自分の目的に対して、一番効果的な手段は何であるか、良く考えましょう。
 
x264.exeの使い方が分からないときは、MeGUIを使うといいかと思います。
MeGUIは、x264.exeなどをGUIで使うフロントツールです。
使うには、.NET Frameworkを入れる必要があります。
使うバーションで必要とされてるバーションを入れましょう。
最近のMeGUIを使うなら、当然最近の.NET Frameworkが必要です。
古いものを入れて、動かないと嘆かないようにしましょう。
 
 
 
・06-01B 使用すべきコンテナ
 
x264の推奨コンテナは、mp4です。Aviではありません。
Aviは、機能を生かしきれないそうです。Aviは、サポート外のオマケです。
Aviを使うならば上手く逝かないのが、defaultであると考えるべきです。
x264.exeでmp4を作ると、正確なファイルが作れない事が、以前のrevに有りました。
その為推奨作成方法は、raw.264(コンテナに入ってない生のファイル)を精製し、
MP4Boxを使い、raw.264をmp4コンテナに入れる事になっています。
この方法を、私も奨めます。出力後のファイルが、一番マトモな感じを受けます。
gpacが更新されてmp4のコンテナ化関係バイナリが最初に更新されるのは、MP4Boxだと思われます。
だから直接出力するよりも、raw.264→mp4コンテナとした方が、自由が効きます。
コンテナのオプションが弄れた方が、aviコンテナ以外を使う優位性を直接感じられますしね。
 
x264.exeでエンコ時に出力としてmkvを選べますが、mkvこそコンテナのオプションを操作する意味がある。
mkvにraw.264やx264vfwのaviも、いつのまにか入れられるようになりましたね。流石です。
でも、そんなのスマートじゃない。クールじゃない。(・A ・)イクナイ! (ぇ
それゆえに、一回mp4にする必要が有ります。
だから、mp4コンテナを使うのがオススメなワケです。(藁
24/30fps混合フレームレートアニメを作るに当たって、結局mkvでtimecodeを使う事が多いと思います。
…別にMP4でVFRにしてもらっても構いませんが、ワタクシはmp4 in mkvが好きなだけです。
ついでなので、その簡単な方法を軽く説明する。
ITVFR・exavi_vfrなどを使って、120fps中間出力とTimecodeを出力し作業する。
つまり、AviUtl出力プラグイン → x264.exe → mp4box.exe → mkvmerge.exe と使う。
mkvは、aviのx264ファイルを受け付けないので、mp4にする必要がある。
このファイルは、CoreAVC 0.0.0.4 alphaでもタイムコードを守るので、
動画が早送りさせられてしまうことは無い。
ゆえに、Timecode・中間出力→raw.264→*.mp4→*.mkv は、カナリお勧めです。
 
 
 
・06-01C 解像度の注意
 
x264は、といいますか、h.264規格のcodecがと申しましょうか。
使用するマクロブロックが、mpeg2やmpeg4 part2系のものとは違います。
i4x4,p4x4,b4x4,p8x8,b8x8,オプションで:i8x8,ベクトル的には16も。…と、多様になっている。
ゆえに、x方向・y方向のPixel数は、使うマクロブロックが使える解像度で用意する必要がある。
具体的には、D1レターボックスを削除し、Y軸方向を360Pixelにするのは、よくないです。
 
最近では、マクロブロックを認識する時に勝手に継ぎ足して考えて、不具合を回避する感じになったらしいです。
これと云って意識する必要は、なくなったようにも思えます。
それでも。よく使われるであろう規格に合ってる解像度で使うほうが、良いかと思います。
Pixel比指定できるんだし、解像度自体は凝る必要ない気がします。
 
 
 
・06-01D x264を使う利点
 
----------------------------------
・画質が綺麗になる。
・ファイルサイズ軽く作れる。
・彼女が出来る。
・結婚できる。
・埋蔵金が見つかる。…etc
----------------------------------
こういう事は、2の次です。(ぇ
x264を使う利点は、設定の豊富さ。コレです。
ただ適当に綺麗になればいいのならば、ほとんど設定がないDivxやWMVでいいと思いますよ。
WMV-VC1でもVP7でもNERO-H.264でもQT-H.264でもATI-H.264でもなく、
x264を使う理由がここにある。探究だ!!追求だ!!
自己の設定を練り上げて、満足するのが使用目的だ。
それに、設定がキッチリ練りあがれば、キチンと綺麗に圧縮される。
綺麗に出来ないのは、煮詰め方がぬるいだけですね。主に、カスタムマトリクスの。
Xvidのときも、そうでしたね。
それに。
イマイチ綺麗にならないと、云ってる人をたまに見かけますが、多分目的が違うのでしょう。
見るだけのが目的ならば、レコーダで撮ってDeleteして、DVD買ってください。
簡単で綺麗で、なんと云っても楽です。実は、激しくオススメですYO
.
.
.
.
━━━と。x264は、こんなコーダーです。(ぇー

 
-*-*-*-*-*-*-*-*-
 

・06-02 x264のコマンド説明-default値、そして。
 
設定値を決める前に、その設定項目とdefault値について、まず考える。
とりあえず、自分で使うバイナリのヘルプ見てください。
そこに、基本的にな事は書いてあります。説明終わり。
 
━━━ google先生で探すと、説明してるサイトが見つかると、思います。
例えば、この辺とか。
------------------------------------------------------------------------------------
### ageha ###
 ・MPlayer and MEncoder on MacOSX  → その中にある x264cli 項目。
 ・中の人(agehaさん)のBlog → ageha
 ・そのBlogで、help的なことを扱ってる項目 →  -x264encopts, x264(r600)コマンド対応, x264cli .

### Zero1 ###
 ・Encoding H.264 using the x264 Command Line Interface

### まるも ###
 ・まるもさんのサイトindex → まるも製作所
 ・x264解説月間(仮) → 2007年6月 , 2007年7月 .
------------------------------------------------------------------------------------
これらの挙げたサイトを観ると、非常に為になります。
ぶっちゃげ、漏れが説明するする必要なんて全くないYO. HAHahahahAHA
 
 
えーと。リンク貼って終わりにするだけだと寂しいので、こっちでも説明しますよ。(゚∀゚)アッヒャ
wikiは多数の人間で編集するから質が上がるのに、いちいち別サイトで説明用意するのいくない気もします。
…ま。なんだ、気にするな。
自分の好き勝手するには、この形式が便利だ…と思った。それだけです。(莫迦
だーるまさんがころんだ!だーぁるまさんがころんだぁあ!!
 
 
↓以下は、Doom9フォーラムから跳べるCef配布ソースをビルドしたバイナリrev680 --longhelpのプリントスクリーン
x264longhelp-rev680
help呼び出すと、こう出るわけだ。
そんじゃ。頭から必要なそうな部分を説明していきますYO。
 
 
 x264 core:56
 
・ある意味、バージョンみたいなもの。revとは別に、カウントされてます。
 機能が上がると、この数字が増える希ガス。
 例えば、rev516ならばcore:46、rev518ならばcore:47だ。
 rev600がcore:54なので、rev600→680の間は大きな変化は少なかったらしい。
 
 
#Syntax:
 
 Infile can be raw YUV 4:2:0 (in which case resolution is required), or AVI or Avisynth if compiled with AVIS support (yes).
 
・x264.exe使うに当たって、読み込ませるのには、YUV4:2:0つまり、YV12じゃないと読めない。
 AVISサポートフラグが、コンパイル時にyesならば、Avisynthのavsファイルが読める。
 配布されてるビルドでは、yesフラグが立ってるので問題ない。
 中間出力を、avsファイルに読ませて、ConvertToYV12()して、フロントであるx264.exeに渡す
 これが一番楽な気がする。
 
 
#Frame-type options:
 
 -I, --keyint <整数値>   Maximum GOP size [250]
 -i, --min-keyint <整数値> Minimum GOP size [25]
 
・GOP単位関係。〜.nlってNetherlandsでオランダですね。オランダやイギリスは、TV放送がPALです。
 秒間フレーム数は、25フレーム。
 NTSCのアメリカでのcodecであるDivxとかは、マックスキーフレーム間隔300フレームでしたね。
 GOP単位関係の部分は、自分仕様に変更した方が、いいかと考えられる。
 
 
 --scenecut <整数値>   How aggressively to insert extra I-frames [40]
 
・--scemecutは、数が大きければ、キーフレームを積極的に入れるようになる。
 逆に、減らすとキーフレームを入れないようになる。数値の範囲は、-1〜100だったかなぁ。orz
 大体このぐらいだと思った。
 半分より下だし、defaultではキーフレーム挿入が、少し控え目ってことですね。
 
 
 -b, --bframes <整数値>   Number of B-frames between I and P [0]
 
・-b Bフレーム使う枚数。実は、defaultではBフレーム使ってません。Σ(゚Д゚)
 好まなければ、使わないほうがいいとの、中の人からの啓示なのでしょうか。
 Bフレーム設定は、暴れ馬ってことなのでしょうか。でも、普通使うよな。orz
 
 
--no-cabac      Disable CABAC
 
・ループフィルタを排除するよりCABACを排除したほうが、実は軽くなる。
 だが、画質がh.264規格っぽくなくなる。
 携帯機に入れるときは、見れるレベル指定が制限される。
 レベル指定が低いとCABACを使えないときが有るので、このオプションで切る必要がある。
 
 -r, --ref <整数値>        Number of reference frames [1]
 
・-r Pフレーム・Bフレームの参照フレーム数距離。
 参照するフレームが増えればP・Bフレームの出来は良くなるかも。ただし、圧縮時間が増える。
 連続するBフレーム数を増やしたときは、この値も増やした方が、いいのかもしれない。
 アニメは、コレ増やすと、絵の斬れが良くなる。3や5ぐらいを試してみたらどうだろうか。
 
 
 --no-deblock       Disable loop filter
 
・デブロックフィルタを、使わなくします。
 --nfが、--no-deblockと名称変えました。
 このオプションを使うと、デブロックフィルタを使用しないようにします。
 デブロックフィルタ使ってると、細部が潰れるので気になるときがある。
 そういう時は、コレ使ってデブロックフィルタ切ったほうがいいかもしれない。
 
 もっとも。
 閾値と強さ下げて使えば、切る必要もない気もするので、sampleを作って色々試そう。
 
 
 -f, --deblock <alpha:beta> Loop filter AlphaC0 and Beta parameters [0:0]
 
・デブロックフィルタ強さの程度を決めます。
 圧縮の程度にあわせて、弄るといいかも知れませんね。
 少し強めに圧縮するアニメで-f 3:3とかを使うと、すっきりジャッキリブロックを消してくれる気がする。
   
 
 --interlaced        Enable pure-interlaced mode
 
・インタレレース保持エンコード。rev570から実装されました。
 ただし。今は、Bフレームの扱いに制限がある。
 --direct ではspatial, temporal, auto、 --me ではesaが使えない。
 例えば、--direct none --me umh と、する必要がある。
 マクロブロックに8x8を使わなければ、--direct spatialを使える気もするが、
 どちらを優先するか考えると、Iフレーム8x8が使えたほうが個人的には好きだ。
 
 観るときは、ffdshowのデインタレースを使用すれば、見れる。
 2007年1月末にハードウェアデインタレースを実装した。
 そんなワケで、新しいffdshowならば、x264インタレ保持に対応されている。
 ffdshowは、新しいものを使用しよう。
 
 
#Ratecontrol:
 
-q, --qp <整数値>        Set QP (0=lossless) [26]
 
・Q値設定。defaultは、26。
 設定整数値を小さくすると、ビットレートが上がる。0は、losslessだ。
 Divx・XviD・WMV9…など。
 それぞれそうなのですが、default値のQ値には少し不満が出る。
 過去のコーダ同様に、少しビットレートを増やす程度に変更すると、納得いくかもしれない。
 
 QP AVC qp = 12 + 6*log2(ASP qp)らしいので、--qp 18程度を基準に考えるといいみたいです。
 画質と容量とを、自分の用途にあわせて煮詰め、Q値を設定したい。
 30より大きい数字は、劣化具合がカナリ強くなる傾向になる。気をつけよう。
 
 
--crf <整数値>          Quality-based VBR (nominal QP)
 
・Q値設定。defaultは、26。
 ビットレートやQ値範囲を指定できる、Q値エンコード。
 何となく考慮してくれる程度だが、してくれる。
 保存用で普通に1passQ値エンコさせるなら、こちらを使ったほうが、感じいい気がします。
 
 
--qpmin <整数値>      Set min QP [10]
--qpmax <整数値>      Set max QP [51]
 
・--qpmin,--qpmaxは、-q,-Bよりも優先される。
 min・maxで設定された可能な範囲で、-Bを実現させようとエンコする。
 だから。指定しない方が、融通は利く。
 最大値を小さく制限させた方が、画質は安定傾向になる。容量に余裕は無くなる。
 最小値を大きくすると、取れるビットレートに余裕が出る。しかし、画質のキレは弱まる。
 
 
--qpstep <整数値>      Set max QP step [4]
 
・適用Q値の変化できる、Q値幅。
 明るいシーン → 暗いシーン となったとき(またソノ逆)などで、ビットレート変化を
 大幅に行ってほしいのであれば、この数値を増やしておく。
 漏れ個人が考えるに、このdefault値4って、小さいなと感じます。
 
 
--chroma-qp-offset <整数値>    QP difference between chroma and luma [0]
 
・色部分(chroma U・V)を輝度部分(LUMA)とQの差を発生させて、エンコする事ができる。
 基本的には、差を用意したいのであれば、マトリクス側で行えば用が足りる。
 マトリクスをLUMA・CHROMA間で差を用意していないのであれば、このオプションを使ってもいいかもしれない。
 
 
-p, --pass <1|2|3>     Enable multipass ratecontrol:
               - 1: First pass, creates stats file
               - 2: Last pass, does not overwrite stats file
               - 3: Nth pass, overwrites stats file
 
・3の命令が、statsファイルに上書きする。2の命令はしない。
 すなわち2passならば、1→2
 3pass以上ならば、1→3→3→…→3→2 と、実行させる。
 50passぐらいまでは、+10pass増えるごとに、画質が全く違うモノになる。
 そこから100passぐらいでは、+20passごとで、変わる感じ。━━━そんな希ガス。
 主に、輪郭などの鮮明さで、差が出てくる。
 マシンが空いてるのならば、50passぐらいやると、アホみたいに綺麗になる。
 普通そんな暇無いけどね。
 ━━━Σ(゚Д゚)アッー。 3万円程度で買えるマシンを買って、放置Npass専用機にすれば…(莫迦
 
 3passを利用すると、ビットを無理やり引き出す為に
 絵がオリジナルからかけ離れる傾向にあるので、必ず綺麗になるワケでは無い。
 フツウに使う分には、2passがいいと思います。
 
 
#Analysis:
 
 -A, --partitions <文字列>    Partitions to consider ["p8x8,b8x8,i8x8,i4x4"]
                       - p8x8, p4x4, b8x8, i8x8, i4x4
                       - none, all
                        (p4x4 requires p8x8. i8x8 requires --8x8dct.)
 
・-A 圧縮に使うサーチするマクロブロックの種類を指定します。
 p4x4は、p8x8の補完に使われる。単品では使えない。
 また、i8x8は、8x8dctフラグを立てないと使えない。
 つまり、最小構成はi4x4,p8x8になる。覚えておいていいだろう。
 
 
 --direct <文字列>    Direct MV prediction mode ["spatial"]
                 - none, spatial, temporal, auto
 
・--direct Bフレームのベクトルのサーチの仕方です。2パスは、autoがお勧め。
 spatialは、動いてるときに使う方式。
 temporalは、動きが少ないときに使う方式。
 autoは、上の二つを場面によって判別し、適応させる方式。
 それぞれ、特性に合わせて使って逝きたい。
 
 
 --direct-8x8 <-1|0|1>   Direct prediction size [-1]
                     - 0: 4x4
                     - 1: 8x8
                     - -1: smallest possible according to level
 
・これ使うと、動きが変わる。どう変わるかですが。
 4x4ならば激しい動きに強く、
 8x8ならば、画面パンやキャラ引きに対して画質が柔軟になるでしょう。
 自動の場合は、コレまで通りで、
 値を適応しやすい方のモノを利用して、決定する。
 
 
 
 -w, --weightb Weighted prediction for B-frames
 
・-w 圧縮時間が、モリモリ増える素敵なオプション。Bフレームの出来が上がる。
 どのぐらい上がるかは、トライandエラーを繰り返して、確かめてください。orz
 なんと云うか。古いPCを使う人には無用なオプション。
 大して変わらない癖に、重いんだよ ヽ(`Д´)ノフカー
 
 
・--merange <整数値>    Maximum motion vector search range [16]
 
・この整数値を増やすと、動きが格段に良くなる。
 ただ、エンコ時間は、莫迦に増える。('A`)
 動きが悪くならないように勤め、--merangeの適正値をdefault値付近になるようにエンコしよう。
 ━━━その勤め方だが、具体的にはマトリクスの作り方を失敗しないようにする。(ぉ
 
 
 --b-rdo           RD based mode decision for B-frames. Requires subm
 
・--b-rdo wikiから訳文コピペ↓
 「 Bフレームのマクロブロックタイプにレート歪み最適化(rate-distortion optimization)を使う。subq>=6が必要 」
 エンコードスピードにそうひびかないのが、素晴らしい。
 
 
 -t, --trellis <整数値>      Trellis RD quantization. Requires CABAC. [0]
                    - 0: disabled
                    - 1: enabled only on the final encode of a MB
                    - 2: enabled on all mode decisions
 
・-t CABACのサーチにオプションをつける感じ。
 なんと云うか。P・Bフレームの切り捨て閾を自動的に算出・適応するオプション。→ まるも 7-Jul2007 
 -tオプション加えると、容量辺りの絵が良くなる。 が、エンコもデコードも重くなる。
 defaultでは、 0 で使われていない。
 PCパワーが貧弱な人は、-tや-wなどの重い命令は、使わないほうがいい。
 
 
 --no-fast-pskip      Disables early SKIP detection on P-frames
 
・はやい段階で、Pフレームを省略させないフラグ。
 高圧縮させるために、Pフレームを積極的に省略していました。
 それを防ぐオプション。画質がちょっち上がります。
 が、容量は少し太る。
 
 
  --no-dct-decimate     Disables coefficient thresholding on P-frames
 
・Pフレームで絵が崩れるのを防ぎます。rev503で追加されたオプション。
 高圧縮させるために、Pフレーム時の画質が低下していました。
 それを防ぐオプション。
 雨のシーンで、雨が消えないようになる感じの効果が出ると思います。
 漏れ的に、オススメオプション
 
 
 --nr <整数値>           Noise reduction [0]
 
・--nr defaultでは、使われない。
 mplayerのソレやAvisynthのHQDN3Dと似てる効果が得られる。
 100〜1000程度が使える数値かと思われ。
 HQDN3Dもそう重くないので、x264のNRを使う理由はコレといってない。
 また、逆もいえる。x264の--nrは圧縮時間に響かなく、軽い。使わない理由も無い。
 ためしに一度使ってみて、使用するかどうかを考えてみてもいいかと思う。
 
 
--deadzone-inter <整数値> Set the size of the inter luma quantization deadzone [21]
--deadzone-intra <整数値> Set the size of the intra luma quantization deadzone [11]
                   Deadzones should be in the range 0 - 32.
 
・デッドゾーンなインター・イントラLUMAのQ値ってなんだろうね。
 --trellisで算出して適応している内容を、固定指定するオプションだそうで。
 簡単に云うと。P・Bフレームにて、何処までを捨てて・どこまでを使うようにするかだ・ね。
 一言で云うと、簡易版固定--trellisオプション風味。
 
 試した所、想像した感じの効果が得られた。
 アニメでのBフレームは、ほとんどがスキップされる対象なので、
 --deadzone-intraを減らすと、質が上がる感じを受けた。…ただし、容量は莫迦増える。
 逆に、数値を増やすと、Bフレーム時の動きが皆無的になり、カクつくシーンが発生する。
 増やす用途で得をするようには、どうも思えない。
 Bフレームスキップを擬似的に無しにする為に、
 --deadzone-intraの数値を減らして使うのが、このオプションの意味なのかもしれない。
 もし使うなら、--deadzone-intra 6・8 辺りは、どうだろうか。
 個人的には、8がいい感じな気がする。
 
 
 --cqm <文字列>      Preset quant matrices ["flat"]
                - jvt, flat
 
・cqm 使うマトリクスの指定。
 x264内には、flatとjvtの2つのプリセットが入っている。
 default値は、flatで全部16で埋まってるマトリクスを使っている。
 
 
 --cqmfile <文字列>    Read quant matrices from a JM-compatible file
                  Overrides any other --cqm* options.
 
・cqmfile カスタムマトリクスをファイルで読ませられる。
 MeGUIで作れるし、Doom9で拾えるだろうから、書式はその辺りから、分かってください。
 
 
 --cqm4 <リスト>      Set all 4x4 quant matrices
               Takes a comma-separated list of 16 integers.
 --cqm8 <リスト>      Set all 8x8 quant matrices
               Takes a comma-separated list of 64 integers.
 
・直接記述できるらしいDEATHね。面倒いので、ファイルに書いて読ませたほうがいいです。
 
 
#Video Usability Info (Annex E):
 
ここの項目オプションフラグは、読めないデコーダが多い。
・CoreAVCは、認識出来る…のかなぁ。
 フルレンジフラグを立てたときに輝度が変化したので、多分そうだと思う。@0.0.0.4alpha
・反対に、ffdshowではどのフラグを変えても、何も変化が無かった。
 そんなワケで、ffdshowは読めない気がします。
・Neroのことは、知らん。持ってないので。(莫迦
・PowerDVDのことも、知らん。持ってないので知らん。
 
…そんなワケで、よく考えて使う。
 
 
--colorprim <文字列>     Specify color primaries ["undef"]
                     - undef, bt709, bt470m, bt470bg
                      smpte170m, smpte240m, film
--transfer <文字列>      Specify transfer characteristics ["undef"]
                     - undef, bt709, bt470m, bt470bg, linear,
                      log100, log316, smpte170m, smpte240m
--colormatrix <文字列>    Specify color matrix setting ["undef"]
                     - undef, bt709, fcc, bt470bg
                      smpte170m, smpte240m, GBR, YCgCo
 
・カラーマトリクスは、コレを使いますよーと、宣言するのに--transferを使う。(仮
 いや、その。よく分ってないもので。 orz
 ━━━でも使う。使っちゃう!!
 ディスプレイに合ってるモノ使うと、感じ良くなるので、使うのオススメ。
 具体的には、色で発生するのブロックが軽減される傾向になる。
 そして、設定パラメータ説明。
 -------------------------------------------------------------
 ・Rec709(bt709)  → 720p(PAL型HDTV風味?)的なカラーマトリクス
 ・smpte240     → 1080i(NTSC型HDTV風味?)的なカラーマトリクス
 ・Rec601(bt601)  → 480i,480p的なカラーマトリクス
 ・smpte170     → コンポジットNTSC(SDTV)的なカラーマトリクス
 ・Rec470(bt470)  → PAL(SDTV)的なカラーマトリクス
 
 ∴Rec709≒smpte240m , Rec601≒smpte170 …厳密には違うので悪しからず。
 ほかのモノについては、興味があるなら自分で調べてください。(ぇー
 つーか。テキトウな事云ってるので、キチンと調べ直した方がいい。(莫迦
 -------------------------------------------------------------
 bt709,smpte240m,smpte170m.この三つの中で使うものを選択し、使用すればいい希ガス。
 例えば、HDな日本国内向け家電TVにTV出力するなら、bt709・smpte240mにする。
 最近のGeforce・RadeonともにD端子・HDMI出力できるし、このフラグ立てるのオススメ。
 
 
 ちなみに。
 --colorprim
 RGB の CIE 色度図上での XY 座標と基準白色を指定する
 
 --transfer
 RGB を光電変換する時のガンマ特性を指定する
 
 --colormatrix
 RGB -> YUV 変換時の変換行列を指定する
 
 …だそうな。へぇ。(ぉ
 
 
 
#Input/Output:
 
 --sar width:height     Specify Sample Aspect Ratio
 
・--sar width:height ここでの数値は、Pixelアスペクト比だ。
 自分の解像度に合わせて比をいれよう。
 
 
 --progress        Show a progress indicator while encoding
 
・--progress これ書いておかないと、出力予定時間と、進行fps状態が見れない。実は重要よ!
 
 
 --no-psnr         Disable PSNR computation
 
・--no-psnr PSNRしなくなる。
 PSNR( Peak Signal to Noise Ratio )とは、ピーク信号雑音比のことで、圧縮前の画像に対し、
 圧縮後のデータから再生した画像が圧縮処理によりどの程度劣化したかを示している。
 その値が小さい程画像が劣化していることを示している。━━━だそうな。
 つまり、このオプションを加えると、分析した結果が出力されなくなる。…ということ。
 余計な計算をしなくなるので、早くなるかも…というソノ程度の代物。
 そんなワケで。PSというノイズリダクション(NR)を、実行してるわけではない。
 
 …余談だが。3pass以上を行うと、PSNRの値は悪くなる。
 つまり、ソースからかけ離れる絵に仕上がるという事。
 コレは、積極的にフレームスキップなどを行って容量を稼ぐ為に、
 純粋なソースから作られてるフレームが減るから、数値が悪くなるのである。
 使ったオプションによっては、10pass以上したファイルを見ると、
 NRしたのとは、また違った画質の単純化された状態を見ることになる。
 ま。それはそれで、綺麗なのですが。
 
 
--no-ssim           Disable SSIM computation
 
・--no-ssim SSIMしなくなる。
 PSNRと同じで、SSIMとは数値的な画質指標。
 この命令は、その表示無効化フラグ。
 
 SSIMは、100%をソース状態と仮定した数値評価法。
 x264ステータスでは、Y:0.9818812 といった感じで、輝度のアベレージが出る。
 0.99XXXは非常に綺麗で、0.98後半はテキトウに綺麗。0.98前半は何となく物足りない感じ。
 0.97に入ると、用途を割り切ってない限りちょっと許せない絵になる。
 ━━━と、個人的には感じています。(ぇー
 実は、Q値が小さくなれば、簡単にSSIM値を改善(1に近づけ)させられます。
 しかし、Q値が小さくなればビットレートは増えて、ファイル容量は増える。
 目的のファイル容量で、成績いいSSIM値を出せるマトリクスを必死に作ろう。
 また。jvtマトリクスがソレに当るのであれば、喜んで使おう。
 
 逆に云うと、そうで無いのならば、jvtを使う義理は特に無い。
 
 
━━━と。大まかにこんな感じ。
名称が変わった命令が有ります。しかし、大文字での命令は、そのままだったりする。
default値で、十分なもの・変更すべきものが、いくらか分かったかもしれませんね。
次の項目で煮詰めいていきます。

 
-*-*-*-*-*-*-*-*-
 

・06-03 漏れ的設定を考えてみる。
 
default値をhelpから確認できたかと思う。
ぶっちゃげて云うと、何を意図してるか分らんdefault値設定な感じがする。
ま。本来defaultとは「基本」ではなく「指定されていない場合での、それ以外」的な意味の方が強い。
こう考えたときには、その意図も分らなくも無い。(ぇー
要は、x264のソース記述が、buildしたexeが仕様通り動くかどうかを見る値って事だと思う。
つまり、この値でファイルを作る気なんて、全然無いって事です。
 
兎も角。ここはアニヲタ。容量重視よりも画質重視の傾向が強い希ガス。
そうなると、default設定値では、当然ながら物足りなさを感じるかと思う。
ならば、キチンと設定する必要があるだろう。
設定するに当たって、目的を決めておく。自分自身の用途を見つめる必要がある。
アレが駄目だ・コレが駄目だとか云って無いで、何をどうしたいか決めるのは重要です。
 
━━━で。漏れの場合を、ここでは挙げてみる。
---------------------------------------------------------------------
1.windowsで作り、windowsで見る。
2.高画質! 綺麗に観たい。だってアニヲタだもん☆
3.容量は、片面DVD(4.2GB)に7〜8本。2枚1クール
4.手抜き作品は、一個250MB程度で逝きたい。でも手抜きで。
5.漏れは、x2とかのデュアル系のシステムを持ってない。
6.VGAも強力なGPUが積んであるものを持ってない。
7.ぬるぽ → ガッ
---------------------------------------------------------------------
と、用途を自分の中で明確にしておこう。作業方針が決まりますから。
よって。上記の場合ならばどうすればいいか、順番に考えていきましょうか。
 
・1.2.について。
 携帯機用に作らないという意味です。
 そして、MPCで見るのが、目的と考えていいでしょう。
 作成オプションに、基本的に制限なし。
 綺麗に処理するならば、Npassを利用する。
 
・3.について。
 容量決め打ちするには、Npassを使えばいい。
 どうやら、x264のNpassは、PSNRの出来が2passに比べて劣るらしい。
 3pass程度しかしないのならば、2passで作業したほうがいい。
 暗部が綺麗に処理されるだろう。
 
・4.について。
 別に、2passで容量決め打ちで逝ってもいいが、手抜きと決めてる作品に、
 2passやってやるほど、アニヲタは暇じゃない。経験則をつみQ値でどうにかする。
 …のは、最初は難しい。そこで、見れりゃいいのでハーフD1で作ってみる。352x480だ。
 暗部が少しペライ画質になりやすいが、十分見れる。
 これで、1passターボ+2passで作業させる。容量決め打ちでも早く作業できる。
 絵に不満が出るかもしれませんが。orz
 
・5.について。
 HW的に速く出来そうも無い事の確認。
 
・6.は、5と同じ。
 
こうなって、作業方針が決った。決まった方針をもとに詳細設定していく。
 
 
 

・06-03A 詳細設定。でもその前に

その前に、ソースを用意する必要がある。つまり、AvisynthでNRするわけですが。
x264のアニメは、暗部が頑張っても汚い。これ、大前提です。
rev300台後半で高周波部カット系nrオプションが、追加されたことからも、ソレが伺えます。
いくらかマトモにするために、default値から変更しようとするつもりで、
これから説明していくのですが、超えられない壁とやらは、やはり有るもので。 orz
NRしてごまかしましょうってことだ。
 
━━━ここでは、FFT3DFilterを推奨しておく。
x264の--nrやHQDN3Dよりも、細部を保って処理できると、個人的には思う。
例えば FFT3DFilter(plane=3,bt=4,bw=3,bh=2,ow=1,oh=1,svr=0) とかどうでしょう。
かなり画面がすっきりすると、思います。
あとは、FaeryDustを軽く使う程度ぐらいで、それ以外のNRがいらない風味。
ま。キャプチャソースに差があるので、いくらかの味付けは各々で必要ですが。
FFT3DFilterは、マジ優秀です。
x264で圧縮するなら、FFT3DFilter + FaeryDustは、非常に強力な方法だと考えます。
こうすることで、暗部への心配が減ります。(・∀・)キュンキュン
 
 
 

・06-03B 容量に対しての、画質問題

---------------------------------------------------
・Bフレームは使ったほうがいいのか?
・CABACをよりよく行う為に、-tオプションはつけるべきか?
・フレームスキップは、させるべきだろうか。
---------------------------------------------------
ま、大体こんなことが、気になるかと思います。
使えば、容量が同じ場合、綺麗になる …これが、これらのオプションの存在意義ですね。
確かにその傾向はあります。が、安直にそうそうは云えないです。
過去のcodecでのことを考えてください。
Divx5.0.2でどうだったか。Xvidではどうだったか。MS-Mpeg4ではどうだったか。
WMV9では、どうだったか。最近のDivxでは… 他いろいろ。
━━━総じていえる事は、結局オプション系は、出来が悪い場合がよくあった。
残念ながら、x264もその傾向全く無いわけでは無い。
なんでもかんでも、万能というわけでは、ないのだ。
 
ここは自分が求める画質と容量を、いかにして実現するかを考える必要がある。
当然各種オプションを使えば圧縮時間は増える。この辺も考慮に入れる必要がある。
良く分かってないで、いろいろなオプション使って、画質全然いくないYOヽ(`Д´)ノフカー
とか、本作業でやらないようにしましょう。
Sample作ってるときに、何が必要なのか試して決めておきましょう。
 
漏れ個人が考えるに、エンコ時間がモリモリ増えるような大げさなオプションは、使わなくていいと思います。
必要時間の割に、恩恵がすくなくて、なんか損した気分が大きいです。orz
Bフレームは、使わないとGOP単位が次に変わった時に、
圧縮モヤのパターンが変わったり、輝度がいきなり変化したり、ちょっとだけ気になる問題が発生する
…ただし、GOP単位が長い時にコレが目立つ。
つまり、マックスGOP単位が、大きいときはBフレームを使う。
小さいときは、Bフレームなしでも大丈夫ってわけだ。
 
漏れは、raw.264→*.mp4→*.mkv とするのでAviにあるBフレームバグを気にする必要が無い。
じゃぁ。Bフレーム使ってみようかな。
マックスGOP単位をいくらか大きいものを設定して、1枚Bフレームを使うことにする。
 
 
 

・06-03C 詳細設定値:Frame-type options

GOPの話。説明のところにも書きましたが、
default値は、「 -I 250 -i 25 --scenecut 40 -b 0 」だ。25が関係するのは、PALだからでしたね。
 
ここで考えるは24/30fpsアニメの事だ。
このfpsってどういう状態なんでしょうね。
nullが入っていれば、120fpsなんだろうけど、x264.exeでエンコする都合でnullフレームは入ってない。
…小難しい事考えずに、構成の根本を見つめた方が、いいみたいですね。
 
24/30fpsは、フィルム描画的なアニメに、3Dエフェクトを入れるのが、一般的です。
すなわち、基本的には24fpsであると云える。エフェクトは、時間短いですね。
と考えていくと、どうもMAXGOP単位は、240が適正値のように考えられる。…(1)
もっとも、最近ではIGPXやARIAみたいに30fpsの動画部が長い作品もある。
そういう作品は、300がいいでしょうなぁ。自分が作業する作品にあわせましょう。
 
次に、MINGOP単位を考える。
アニメなので、動きが多い場所もあるでしょう。
そういったシーンを、誤魔化してほしくは無いですね。
━━━ここは、小さい方がいい気がします。8や1ぐらいがいいでしょうか。…(2)
でも、それも容量を稼ぎたいのならば、間隔がもっと広い方がいいかもしれません。
30フレームエフェクトが短くても、24フレームの間隔の方が狭いので、
構成しているフレームで考えるなら、24なのでしょうか。ま。いろいろ試してください。 orz
 
そして、キーフレーム挿入因子 --scenecut について。
MAXやMINは特に重要ではない。要は、この値でキーフレームぶち込む間隔が変わる。
コレは、sample作って決めると、自分の適正値が見つかると思います。
どうするか。出来上がったsampleファイルをffdshowの視覚化→グラフをチェックする。
ffdshowのデコードを利用している時に、右下からI,P,Bのビット量の棒グラフが流れてくる。
Iフレームが入ってるところがコレで分かるので、
挿入が自分が望んだところか否かが、確認できる。
ffdshowグラフ
 
ffdshowグラフ
↑このpngファイルではBフレーム使ってないが、大体こんな感じ。
 
漏れ自身が勝手に思うに、アニメOPで適当にキーフレームぶち込まれるには、
--scenecut 75ぐらいかなと、感じている。
アニメ作業するなら少なくとも、60ぐらいを使ってもいい気がする。…(3)
default値である40だと、少々足りないということだ。
 
で、Bフレーム一枚使うので、-b 1 …(4)
-rを3にしてみる。…(5)
 
 
 
ゆえに、(1)〜(5)より「 -I 240 -i 1 --scenecut 75 -b 1 -r 3」とか、考えられる。…(A)
 
 
 

・06-03D 詳細設定値:Ratecontrol

手抜きならば、1パスQ値(--crf) or ターボ2pass。マジ作業ならば、2pass or Npass。これよ!
 
まず、Q値について。--qp 26がdefault値だ。
エンコする作品で加減具合が変わるのは、もちろんですが、
Xvidのときと同じで、使うマトリクスで大幅に感覚が変わります。
2pass以上を使ってみて、プロンプト内に書き出される出力ステータスを見てみると、
I・P・Bフレームそれぞれが使ったQ値のアベレージ値が表示されるので、
数回使ってあれば、あたりが付け易くなるかと思います。
それらを観て慣れたら、Q値を使う感じがいいと思います。
それから。--crfのほうが、バランスいい画質に出来るかもしれませんので、1pass使うなら試そう。
 
マトリクスでQ値の具合が変わるといっても、使い易い数値は実は同じです。
一般的に云われてる事は、10〜30が普通に使える範囲だと、云われています。
ビットレート指定でエンコードしたときに、平均値30以上になってしまうようなマトリクスは、あまり適していません。
そして。20以下は、高画質だとも云われています。
そんなワケで、20〜22程度を基準にしても、いいかもしれません。
他のコーダの92%やQ値3.5みたいに、使える感じかと思います。
 
MeGUIを使うと1passの項目に、ターボというフラグがある。
コマンドラインを観ながらチェックを入れたり・外したりしてみると分かるが、
x264.exeでは、マトリクスアナライズがnoneである事と-m 1である事の1passの状態を、指すらしい。
確かに速いが、流石に画質は落ちる。
Q値であたりがつけられそうも無い手抜き作業時に、使える方法かと思う。覚えておこう。
 
Npassを使う時に、--qpmin,--qpmaxを変更した方がいいかも知れませんね。
使えそうな数値は、--qpmin 〜 --qpmax=10 〜 30ぐらいだそうな。@DOOM9
…マトリクスがflatならば、その通りだと思います。自分の適正値を探しましょう。
--qpmin,--qpmaxは、--zonesや-q・-Bで指定した数値よりも優先されます。
設定したビットレートに対して、不可能なQ値範囲を指定してると、
--qpmin,--qpmax範囲で出来る限りの事をx264.exeが勝手にやってくれます。
「旦那、xxxxxkbpsじゃ無理だ。全部のQ値をqpmaxでやって、****kbpsまでが限度ですぜ」と云ってくれて、
その回のエンコードは、とりあえず****kbpsでやってくれる。
あらあら。x264.exeさんは、なかなか親切ですね。('Д⊂
設定するならマックス値は、良く考えて設定した方が良さそうですね。
 
--qpstepは、一回のQ値変化でどの程度まで数値変化を許すかの値ですね。
急激にクォリティが変わると、不自然さが出やすいのかも知れません。
が、変化することが可能ならば、クォリティが必要ない時に急激に落とすことが可能です。
シーンチェンジがはっきりしているアニメならば、急激な変化が出来たほうが便利かも知れません。
━━━defaultの4から、チョット増やしてみたりする。
 
--statsでNpassステータスファイルの名前を指定できますね。
コレは、した方がいいですよ。
バッチで大量に処理していて、x264エンコだけやり直しする時に、
次に作業したファイルデータで上書きされないようにする必要はあるかと思います。
 
 
 
レートコントロール部は、こんなもんでどうでしょう。
「 -p 1 -B 2350 --stats "sample-x264Npass.stats" --qpmin 9 --qpmax 48 --qpstep 8 」…(B)
 
 
 

・06-03E カスタムマトリクス

アナライズ項目のコマンドを設定する前に、カスタムマトリクスを決めておきたい。
それについて、説明します。
 
まず、 Doom9のx264 でjvtの派生マトリクス郡を拾ってきてください。
AVC Custom Quantization Matrices (JVT style): ファイルのURL〜〜〜〜〜〜〜
ああ。↑コレですね。
その中に入ってる、jvt.cfgをテキストエディタで開くと、こう書いてある。
------------------------------------------------------------------------
#jvt

INTRA4X4_LUMA =
6,13,20,28,
13,20,28,32,
20,28,32,37,
28,32,37,42

INTRA4X4_CHROMAU =
6,13,20,28,
13,20,28,32,
20,28,32,37,
28,32,37,42

INTRA4X4_CHROMAV =
6,13,20,28,
13,20,28,32,
20,28,32,37,
28,32,37,42

INTER4X4_LUMA =
10,14,20,24,
14,20,24,27,
20,24,27,30,
24,27,30,34

INTER4X4_CHROMAU =
10,14,20,24,
14,20,24,27,
20,24,27,30,
24,27,30,34

INTER4X4_CHROMAV =
10,14,20,24,
14,20,24,27,
20,24,27,30,
24,27,30,34

INTRA8X8_LUMA =
6,10,13,16,18,23,25,27,
10,11,16,18,23,25,27,29,
13,16,18,23,25,27,29,31,
16,18,23,25,27,29,31,33,
18,23,25,27,29,31,33,36,
23,25,27,29,31,33,36,38,
25,27,29,31,33,36,38,40,
27,29,31,33,36,38,40,42

INTER8X8_LUMA =
9,13,15,17,19,21,22,24,
13,13,17,19,21,22,24,25,
15,17,19,21,22,24,25,27,
17,19,21,22,24,25,27,28,
19,21,22,24,25,27,28,30,
21,22,24,25,27,28,30,32,
22,24,25,27,28,30,32,33,
24,25,27,28,30,32,33,35
------------------------------------------------------------------------
ま、書式は見ての通りだ。各数値は、1〜255まで使用可能である。
これ真似て、自分用マトリクスを作ってください。
 
 
マトリクス弄る行為自体は、TMpgEncで昔から行われてきた。
仕組みをある程度きちんとした理論(?)から分かろうとすれば、「 量子化行列 」でgoogle先生に聴いてください。
学術系の論文pdfが引っかかってくれると思います。
もっと砕いた状態で知りたいのならば、量子化行列のナゾ〜その1 とか読んでみたらどうでしょうか。
経験則で感じる事を書いてあるここよりも、為になるかも知れません。
 
━━━もっとも。理論なんて関係なしに、観るのは人間の目だ。
自分の目・自分のエンコマシン・自分の観賞マシンが、都合よくいく方法がベストだ。
数値上で優秀でも、観て納得できないのでは、なんというか寂しい。
それゆえに、自分用マトリクスを煮詰め画質に納得しよう。
 
4x4は、Y・U・Vそれぞれでマトリクスがある。8x8は、仕分けなし。
INTRA〜は、Iフレーム向け。INTER〜は、P,Bフレーム向け。
4x4・8x8と使用するマトリクスによって、そのベクトルの特性が変わってくる。…希ガス。
具体的に表現すれば、動きの予測方法が変わるのだ。
まずその特徴傾向をわかっておきたい。…漏れがいじり倒して、感じた事でしかないけどね。
それらを、箇条書きで列挙してみた。↓
------------------------------------------------------------------------
〜4x4での画質特徴〜
・モスキート出づらい。ボケない。代わりに、ジャギーが出やすい。
・キャラクタの動きはいいが、画面パン(画面全体が動くシーン)がぎこちない
・画面がパンしていると同時に、キャラを引かれるシーンで、絵が壊れるブロックノイズが発生する場合がある。
 CGを使ってのキャラ引き(宇宙船が移動するときとか)は、気をつけたほうがいいかもしれない。
・ゆっくりとパンする場面で、波状のノイズが見れる場合がある。
 これは、高周波成分を何かのNRを使って取り除いた時に、発生しやすい。
 基本的に、--no-dct-decimateオプションを使用すると防げる場合が多い。利用しよう。
 それでも駄目ならば、使ってるマトリクスの質を上げるか、8x8を使用することで、解決しよう。
・暗部階調が若干弱い。だが、それがアニメには、絵をはっきり見せる結果を生むようだ。
・以上を簡単にまとめると、「 キャラクタの動きに強い。しかしリスクがある。だが4x4は綺麗だ。 」と云える。
 
 
〜8x8での画質特徴〜
・8x8を使うと、4x4のときに出た画像破綻的なブロックノイズは、減る。
・モスキートが出やすい。ボケる。
・画面パンがスムーズだが、キャラクタの動きが怪しくなる。
・階調が豊富。だがそれゆえに、アニメでは暗部でモスキート風な虹状のモヤを発生させる。
・OPなどで文字の下を絵がパンしていくと、文字周辺にゴミがで易い。
 コレは、マトリクス使ってる数字が、ビットレートに対して小さめな時に起こりやすい。
 当然、4x4中心の構成でも同じ事が起こる場合が有るが、8x8使用時の方が問題が発生し易い。
・4x4_LUMAと8x8_LUMAとが大幅につくりがかけ離れている場合、--dct8x8を定義してもあまり使われない。
 逆につくりが似すぎていると、8x8変換を99%適応したりされる。
 これは、実行後にプロンプト内に出力される内容(8x8 transform)で、確認出来る。
・以上をまとめると、「 パンに強い。圧縮画質は古臭い。だが8x8は安定する。 」と云える。
 
 
〜カスタムマトリクスを使う上で、4x4・8x8に共通してる事〜
・用意したマトリクスに対してビットレートが足りなければ、画像は破綻する。
・逆にいくらビットレートを与えても、マトリクスが作れる画像以上には、綺麗にはならない。
・--dct8x8フラグを立てないと、アナライズに関係なく、カスタムマトリクスの8x8を
 INTRA・INTERの両方とも使わない。例えば、-A i4x4,p8x8,p4x4,b8x8ならば、
 カスタムマトリクスを用意してても、8x8はflatと同じ。<根拠:ffdshowと画質
・--no-dct-decimateオプションを使うと、画質が若干保証される。
 カスタムマトリクスを使うに当たって、適用した方が良いオプションと云える。
------------------------------------------------------------------------
 
用意したマトリクスに対してビットレートが足りなければ、画像は破綻する。
逆にいくらビットレートを与えても、マトリクスが作れる画像以上には、綺麗にはならない。
この二つを云い換えると━━━
  → flatマトリクスは、flatでの画質しか作れない。
  → jvtマトリクスは、jvtでの画質しか作れない。
…といえる。すなわち、
x264としての画質の半分は、使用したマトリクスの用途が、合っているか否かの問題だと云える。
「 x264始めて使ったが、こんなの汚ねぇYO 」とか云うのを、たまに見かけます。
この人の使い方は、x264をflatマトリクスでの用途から大きく外れていたのが、原因なのかもしれません。
ならば。flat・jvtともに、自分の用途にあわないのならば、自分用途での"専用"を作る必要があります。
4x4・8x8などの特性を良くわかっておいて、自分仕様マトリクスを練ろう。
 
 
 
そこで、次はマトリクスの練り方だ。
Try and error犯りまくって、適当に決める。(・∀・)コレダ!!(マテ
コレは漏れが勝手に考えた方法ですが、作製ノウハウは有る。それを、ここに並べておきます。
良ければ参考にしてください
------------------------------------------------------------------------------
1)マトリクスは左上を小さくすると、画質が上がる。x264のマトリクスは、8以下もつかえる。
 特に考える気がなければ、それだけで十分絵が良くなるので、やっては如何だろうか。
 そういや。jvtは、左上は6でしたね。
 出来るだけ小さい数字を使う。目的ビットレートに合う範囲で。
 
2)右下を一番大きい数字にする。
 その中でも、出来るだけ小さい数字を使う。目的ビットレートに合う範囲で。
 
 [1・2_例]
  2, 4, 6, 8,
  4, 4, 8, 12,
  6, 8, 12, 14,
  8, 12, 14,
16
 
 
3)隣り合う数値は、出来るだけ近いほうが、輝度・色諧調は滑らかになる。
 圧縮させるには、数字が大きい方が圧縮できる。
 しかし、左上が出来るだけ小さい方が、画質は圧倒的に綺麗である。
 自分専用用途で、どのクオリティレベルで割り切るか、良く考え数値を配分しよう。
 
4)出来るだけ小さい数値をマトリクスに使い、だんだんと大きくしていく方法でアタリを付けていく。
 
 [3・4_例]
 数値が近いと滑らか   数値が大きいと高圧縮
  1, 2, 3, 4,         2, 4, 6, 8,
  2, 3, 4, 5,     →  4, 4, 8, 12,
  3, 4, 5, 6,         6, 8, 12, 14,
  4, 5, 6, 7          8, 12, 14, 16
 
 
5)目的ビットレートが高くない場合、U・VはY(LUMA)よりも大きい数字を使ったほうが、うまく逝くかもしれない。
 色はビットレート減らしても、Yよりも劣化が目立ち辛い。
 すなわち、その色から削ったデータ量をYに適応させれば、
 平均指定ビットレートが同じでも、画質が上がったように見え易いだろう。
 
6)UとVの差は、Vのほうが大きい数値を使っていいかもしれない。
 U・Vは、本質的には、 U→Y-青=緑赤, V→Y-赤=緑青 という内容になってる。
 ニンゲンの目の性質は、矢印先のリンク参照 → 色について
 そんなワケで、近い認識波長な色で構成されている緑赤のほうが、強く認識してしまう。
 ゆえに。ビットレート削るならば、V側の数値を少しだけ大きくしてもいいかもしれない。
 
 
・x264のマトリクスは、Xvidのときと比べると、意外と自由性がない。すぐにゴミが出る。
 でも、せっかく作ってるんだし、美味いものを用意したい。頑張れ。
 ゴミが出たら大きめな数字に置換したりして、思考←→実行・観賞 を繰り返す。
 
・作ったら、いろいろsampleエンコして、ファイル作って試した方がいい。
 絵が構成できないマトリクスも作れてしまうから。
 特に、4x4が病気抱え易いので、必ずsampleを観よう。
 
 
 
 sampleエンコすると、エンコ後にステータスが出る。例えば、↓こんな感じ。
 --------------------------------------------------------------
  avis [info]: 704x480 @ 29.97 fps (2518 frames)
  x264 [info]: using SAR=10/11
  x264 [info]: using cpu capabilities MMX MMXEXT SSE 3DNow!
  x264 [info]: slice
I:62 Avg QP:26.53 size: 4170700:00
  x264 [info]: slice P:1501 Avg QP:28.51 size: 18348
  x264 [info]: slice B:955 Avg QP:30.01 size: 1286
  x264 [info]: mb I I16..4: 39.3% 17.3% 43.4%
  x264 [info]: mb P I16..4: 13.1% 2.3% 5.2% P16..4: 67.1% 5.1% 5.7% 0.4% 0.2% skip: 1.0%
  x264 [info]: mb B I16..4: 0.1% 0.1% 0.1% B16..8: 4.1% 0.4% 0.6% direct: 0.1% skip:94.6%
  x264 [info]:
8x8 transform intra:12.4% inter:16.7%
  x264 [info]: direct mvs spatial:62.2% temporal:37.8%
  x264 [info]: ref P 86.2% 8.4% 5.4%
  x264 [info]: ref B 90.1% 6.4% 3.5%
  x264 [info]: kb/s:2985.5
 
  encoded 2518 frames, 2.70 fps, 2986.10 kb/s
 --------------------------------------------------------------
 コレは、2980Kbpsエンコで、3000Kbps用途目的の為に作ったマトリクスで2pass目の出力した結果である。
 
・OPなど動きが多いソースで、IフレームAvg Q値26ぐらいを出せるようにするのが、好ましいと思う。
 Q値のmin〜maxの実用的範囲が10〜30と提示したが、cqm使ってても、実のところ大体同じだ。
 カスタムマトリクス使用して、目的のビットレート下でエンコしてIフレームアベレージQ値30を切ってしまったら、
 マトリクスの構成数値を見直し、大きい数値に置換すべきです。
 flatのときに、Q値20程度でも不満が有ったが、それ以下に設定しても激的に画質アップは出来なかった。
 20以下のQ値を狙うよりも、Q値26を出せる小さい数値のマトリクスでの画質の方が、遥かに美しい。
 
・動きが多いOPなどで26が出せれば、本編をいれて25分全体でエンコすると、多分4〜6程度取れるQ値が小さくなる。
 OPsampleを作ってるときよりも、画質に無理が無くなる。
 それゆえに、無理にOPsample作成時に、20などのQ値をたたき出す必要は無い。
 その為の、目的ビットビットレート下での目標Q値26なのである。
 
・(追記)最近のrevで--qpエンコすると、その数値はPフレームアベレージで適応される。
     これを考えると、目標数値をPフレームで設定するほうがいいのかもしれない。
     それに、マトリクス作ってるときにsample作るとして、
     当たりをつけるのに、--qp 26を利用すると楽かなとも思う。
 
 
・「8x8 transform」は、そのままの意味。8x8マトリクスの使用頻度をあらわしている。
 8x8を多く使用されると、上で列挙した8x8性質な画質が見えやすくなる。
 つまり、全部8x8になってもらうと困るし、全く使ってもらえないのも困る。必要な所には適用してほしい。
 そうされやすい数値設定を行うべきである。
   ・4x4の左上よりも、8x8の左上の方が小さいと、8x8変換が抑制される。
   ・右下の最大値の数値は、同一にした方が、動きのぎこちな差が減る…気がする。
 この二点を抑えると、ちょうどいいぐらいの8x8使用率になりやすい…かも。
 
 [例]
 INTRA4X4_LUMA =
  2, 4, 6, 8,
  4, 4, 8, 12,
  6, 8, 12, 14,
  8, 12, 14, 16
 
 INTRA8X8_LUMA =
  1, 2, 3, 4, 5, 6, 7, 8,
  2, 2, 4, 5, 6, 7, 8, 9,
  3, 4, 5, 6, 7, 8, 9, 10,
  4, 5, 6, 7, 8, 9, 10, 11,
  5, 6, 7, 8, 9, 10, 11, 12,
  6, 7, 8, 9, 10, 11, 12, 13,
  7, 8, 9, 10, 11, 12, 13, 14,
  8, 9, 10, 11, 12, 13, 14, 16
 
こんな感じ。
画質破綻が発生し辛い作品だし、大丈夫だと思って--dct8x8を使用しないと、
いきなり静止画の場面が長く続いたときに、画面崩れたりする場合がある。
やっぱり、平らな部分が多いアニメは、8x8を使用すべきです。
ただし、激しい動き部分は、4x4のでの方が都合がいいので、数値差をつける。
動きが多い場合に、ビットレートに余裕が作りやすい大きい数値を選ばせる為に、
4x4側を1程度大きい数値からスタートさせるように、構築するといいかもしれない。
------------------------------------------------------------------------
マトリクス作製ノウハウの話ここまで。
 
 
 
自分仕様マトリクスは、そういうことを踏まえて考えて作ったわけだ。
で、漏れのMyMatrixは、以下な感じ↓
--------------------------------------------------------

#HighQualityRev45_Matrix

INTRA4X4_LUMA =
2, 4, 6, 8,
4, 4, 8,12,
6, 8,12,14,
8,12,14,16

INTRA4X4_CHROMAU =
2, 4, 6, 8,
4, 4, 8,12,
6, 8,12,14,
8,12,14,16

INTRA4X4_CHROMAV =
2, 4, 6, 8,
4, 4, 8,12,
6, 8,12,14,
8,12,14,16

INTER4X4_LUMA =
2, 4, 6, 8,
4, 4, 8,12,
6, 8,12,14,
8,12,14,16

INTER4X4_CHROMAU =
2, 4, 6, 8,
4, 4, 8,12,
6, 8,12,14,
8,12,14,16

INTER4X4_CHROMAV =
2, 4, 6, 8,
4, 4, 8,12,
6, 8,12,14,
8,12,14,16

INTRA8X8_LUMA =
1, 2, 3, 4, 5, 6, 7, 8,
2, 2, 4, 5, 6, 7, 8, 9,
3, 4, 5, 6, 7, 8, 9,10,
4, 5, 6, 7, 8, 9,10,11,
5, 6, 7, 8, 9,10,11,12,
6, 7, 8, 9,10,11,12,13,
7, 8, 9,10,11,12,13,14,
8, 9,10,11,12,13,14,16

INTER8X8_LUMA =
1, 2, 3, 4, 5, 6, 7, 8,
2, 2, 4, 5, 6, 7, 8, 9,
3, 4, 5, 6, 7, 8, 9,10,
4, 5, 6, 7, 8, 9,10,11,
5, 6, 7, 8, 9,10,11,12,
6, 7, 8, 9,10,11,12,13,
7, 8, 9,10,11,12,13,14,
8, 9,10,11,12,13,14,16

--------------------------------------------------------
OPsample作製:HighQualityRev45_Matrixでの出力ステータス

avis [info]: 704x480 @ 29.97 fps (2518 frames)
x264 [info]: using SAR=10/11
x264 [info]: using cpu capabilities MMX MMXEXT SSE 3DNow!
x264 [info]: slice I:62 Avg QP:26.53 size: 4170700:00
x264 [info]: slice P:1501 Avg QP:28.51 size: 18348
x264 [info]: slice B:955 Avg QP:30.01 size: 1286
x264 [info]: mb I I16..4: 39.3% 17.3% 43.4%
x264 [info]: mb P I16..4: 13.1% 2.3% 5.2% P16..4: 67.1% 5.1% 5.7% 0.4% 0.2% skip: 1.0%
x264 [info]: mb B I16..4: 0.1% 0.1% 0.1% B16..8: 4.1% 0.4% 0.6% direct: 0.1% skip:94.6%
x264 [info]: 8x8 transform intra:12.4% inter:16.7%
x264 [info]: direct mvs spatial:62.2% temporal:37.8%
x264 [info]: ref P 86.2% 8.4% 5.4%
x264 [info]: ref B 90.1% 6.4% 3.5%
x264 [info]: kb/s:2985.5

encoded 2518 frames, 2.70 fps, 2986.10 kb/s



--------------------------------------------------------
#MiddleQuality-rev016_Matrix

INTRA4X4_LUMA =
5, 5, 6, 8,
5, 5, 8,12,
6, 8,12,16,
8,12,16,18

INTRA4X4_CHROMAU =
9,10,11,12,
10,10,12,14,
11,12,14,16,
12,14,16,18

INTR4X4_CHROMAV =
11,12,13,14,
12,12,14,15,
13,14,15,16,
14,15,16,18

INTER4X4_LUMA =
5, 6, 8,10,
6, 6,10,12,
8,10,12,16,
10,12,16,18

INTER4X4_CHROMAU =
9,10,11,12,
10,10,12,14,
11,12,14,16,
12,14,16,18

INTER4X4_CHROMAV =
11,12,13,14,
12,12,14,15,
13,14,15,16,
14,15,16,18

INTRA8X8_LUMA =
4, 5, 6, 7, 8, 9,10,11,
5, 5, 7, 8, 9,10,11,12,
6, 7, 8, 9,10,11,12,13,
7, 8, 9,10,11,12,13,14,
8, 9,10,11,12,13,14,15,
9,10,11,12,13,14,15,16,
10,11,12,13,14,15,16,17,
11,12,13,14,15,16,17,18

INTER8X8_LUMA =
4, 5, 6, 7, 8, 9,10,11,
5, 5, 7, 8, 9,10,11,12,
6, 7, 8, 9,10,11,12,13,
7, 8, 9,10,11,12,13,14,
8, 9,10,11,12,13,14,15,
9,10,11,12,13,14,15,16,
10,11,12,13,14,15,16,17,
11,12,13,14,15,16,17,18

--------------------------------------------------------
OPsample作製:MiddleQuality-rev016_Matrixでの出力ステータス

avis [info]: 704x480 @ 29.97 fps (2518 frames)
x264 [info]: using SAR=10/11
x264 [info]: using cpu capabilities MMX MMXEXT SSE 3DNow!
x264 [info]: slice I:57 Avg QP:26.25 size: 3093900:00
x264 [info]: slice P:1527 Avg QP:28.30 size: 9401
x264 [info]: slice B:934 Avg QP:29.56 size: 794
x264 [info]: mb I I16..4: 33.1% 43.6% 23.4%
x264 [info]: mb P I16..4: 8.7% 5.8% 2.2% P16..4: 55.8% 5.6% 4.5% 0.4% 0.1% skip:16.9%
x264 [info]: mb B I16..4: 0.0% 0.1% 0.0% B16..8: 7.9% 0.4% 0.8% direct: 0.1% skip:90.6%
x264 [info]: 8x8 transform intra:36.5% inter:77.7%
x264 [info]: direct mvs spatial:63.3% temporal:36.7%
x264 [info]: ref P 81.4% 11.4% 7.3%
x264 [info]: ref B 89.7% 6.8% 3.5%
x264 [info]: kb/s:1605.4

encoded 2518 frames, 2.77 fps, 1605.99 kb/s



--------------------------------------------------------
#LightQuality-rev017_Matrix

INTRA4X4_LUMA =
13,14,16,24,
14,14,24,32,
16,24,32,56,
24,32,56,64

INTRA4X4_CHROMAU =
20,22,24,32,
22,24,32,40,
24,32,40,56,
32,40,56,64

INTRA4X4_CHROMAV =
26,27,28,32,
27,28,32,56,
28,32,56,60,
32,56,60,64

INTER4X4_LUMA =
13,14,16,24,
14,14,24,32,
16,24,32,56,
24,32,56,64

INTER4X4_CHROMAU =
20,22,24,32,
22,24,32,40,
24,32,40,56,
32,40,56,64

INTER4X4_CHROMAV =
26,27,28,32,
27,28,32,56,
28,32,56,60,
32,56,60,64

INTRA8X8_LUMA =
10,11,12,13,14,15,16,17,
11,11,13,14,15,16,17,18,
12,13,14,15,16,17,18,24,
13,14,15,16,17,18,24,32,
14,15,16,17,18,24,32,40,
15,16,17,18,24,32,40,48,
16,17,18,24,32,40,48,56,
17,18,24,32,40,48,56,64

INTER8X8_LUMA =
10,11,12,13,14,15,16,17,
11,11,13,14,15,16,17,18,
12,13,14,15,16,17,18,24,
13,14,15,16,17,18,24,32,
14,15,16,17,18,24,32,40,
15,16,17,18,24,32,40,48,
16,17,18,24,32,40,48,56,
17,18,24,32,40,48,56,64

--------------------------------------------------------
OPsample作製:LightQuality-rev017_Matrixでの出力ステータス

avis [info]: 704x480 @ 29.97 fps (2518 frames)
x264 [info]: using SAR=10/11
x264 [info]: using cpu capabilities MMX MMXEXT SSE 3DNow!
x264 [info]: slice I:56 Avg QP:26.86 size: 1610200:00
x264 [info]: slice P:1502 Avg QP:28.75 size: 4348
x264 [info]: slice B:960 Avg QP:29.92 size: 499
x264 [info]: mb I I16..4: 45.2% 22.0% 32.8%
x264 [info]: mb P I16..4: 11.6% 3.6% 4.3% P16..4: 37.2% 5.4% 2.0% 0.3% 0.1% skip:35.5%
x264 [info]: mb B I16..4: 0.1% 0.1% 0.1% B16..8: 14.9% 0.4% 0.8% direct: 0.2% skip:83.3%
x264 [info]: 8x8 transform intra:19.3% inter:27.3%
x264 [info]: direct mvs spatial:61.9% temporal:38.1%
x264 [info]: ref P 75.4% 14.9% 9.7%
x264 [info]: ref B 88.2% 7.7% 4.1%
x264 [info]: kb/s:753.3

encoded 2518 frames, 2.47 fps, 753.89 kb/s
-----------------------------------------------------------------------------
 
--no-dct-decimate必須。
704x480 24/30FPS(エンコ時には30FPS)での用途です。
・HighQualityRev45_Matrix.cfgが、  3000Kbps用途@25分ファイルDVD7本仕様(600MB程度)
・MiddleQuality-rev016_Matrix.cfgが、1500Kbps用途@25分ファイルDVD13本仕様(300MB程度)
・LightQuality-rev017_Matrix.cfgが、 750Kbps用途@25分ファイルDVD26本仕様(150MB程度)
…こんな感じ。
これらは、あくまで漏れが作った感覚であり、
自身で使う場合は、自分用を新らたに作ったほうが、きっと綺麗に出来る事でしょう。
 .
 .
 .
 .
…ま。自分仕様を決めた上で、しっかり自分用のマトリクスを練ってください。
自分仕様ってのが、大切ですよ。
ぜひ。自分マトリクスを練りこんでください。
 
 
 

・06-03F 詳細設定値:Analysis

あー。もう説明('A`)マンドイ。もう細かく説明する必要も無いか。
-m は6でいいじゃねぇかな。
あと、--me esaかな。--direct auto で、-w 使わない。
--b-rdo 使って、--no-fast-pskip も使うかな。--no-dct-decimate必須
--dct8x8は、使う。-tは使わない。--nrはFFT3DFilter使ってるから、必要ない。
 
 
 
そんなわけで、こんな感じかな。
「 -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 --direct auto --me esa -m 6 --b-rdo --no-fast-pskip --no-dct-decimate --cqmfile "HighQualityRev45_Matrix.cfg" 」…(C)
 
 
 

・06-03G Sampleコマンドライン

(A)(B)(C)と考えた内容を総合して、コマンドライン書くと以下のようになる。
なお、ファイルは全部カレントにあるものとして記述する。
喰わせるavisやMatrix.cfgは、紹介したのもと中味同じと考えてください。
 
 
0)喰わせるAVISファイルの中味。
-------------------------------------------
#x264InputAvisynthFile.avs
#必要な処理は、x264に喰わせる前に中間出力して、
#SourceFile.avi + Timecode.txt にしておく。
AviSource("SourceFile.avi")
AssumeFPS(29.97)
ConvertToYV12()
return last
-------------------------------------------
 
 
1)手抜き方法-sample@352x480-4:3Q値26の場合。
x264.exe -I 12 -i 1 --scenecut 75 -b 0 --crf 26 -A p8x8,i4x4 --me esa -m 6 --no-dct-decimate --cqmfile "LightQuality-rev017_Matrix.cfg" --progress --sar 20:11 -o "raw.264" "x264InputAvisynthFile.avs"
 
 
2)2pass方法-sample@704x480-16:9-ビットレート2.5Mbpsの場合。
x264.exe -I 240 -i 1 --scenecut 75 -b 1 -r 3 -p 1 -B 2500 --stats "Sample-x264nPass.stats" -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 --direct auto --qpmin 9 --qpmax 43 --qpstep 8 --me esa -m 6 --b-rdo --no-fast-pskip --no-dct-decimate --cqmfile "HighQualityRev45_Matrix.cfg" --progress --sar 40:33 --transfer smpte240m -o "raw-1pass.264" "x264InputAvisynthFile.avs"

x264.exe -I 240 -i 1 --scenecut 75 -b 1 -r 3 -p 2 -B 2500 --stats "Sample-x264nPass.stats" -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 --direct auto --qpmin 9 --qpmax 43 --qpstep 8 --me esa -m 6 --b-rdo --no-fast-pskip --no-dct-decimate --cqmfile "HighQualityRev45_Matrix.cfg" --progress --sar 40:33 --transfer smpte240m -o "raw-2pass.264" "x264InputAvisynthFile.avs"
 
 
っと。こんな感じとか、どうでしょう。
x264は、多くの設定項目により自由度の高い画質実現が可能である。
自分で望む画質実現をできるように、頑張って煮詰めてください。
x264がイマイチぱっとしないと思ってた人も、煮詰めなおしてみると、
案外自分の中で使えるcodecに格上げに成るかもしれませんよ。
まず。カスタムマトリクスを作ってみる事をやってみると、(゚∀゚)イイかもしれません。
━━━君は、刻の涙を観る('Д⊂
 
 
 

 
-*-*-*-*-*-*-*-*-
 

・06-04 24/30混合FPSでのx264cli使用例

 
24/30FPS時での対処法は、「02-04 24/30fps混合処理」で挙げたぐらい方法がある。
もっとあるだろうけど、大体あそこに挙げたぐらい在る。
さて。ここで問題になるのが、vfwを利用しないでx264cliを使用したときに、どうしたらいいかの問題です。
それについて、ちょっと書いておこうかなと、思う。
-----------------------------------------------
06-04A 中間出力→x264.exe
06-04B Itsを使用し、avsファイルを直接x264.exeに読ませる
06-04C インタレ保持
-----------------------------------------------
大きく分けると、この三つが考えられる。
 ・中間出力を利用する方法は、2pass以上を行うのに、便利かと思う。
 ・Itsを使っても、直接x264.exeに食わせることは可能である。
 ・簡単そうで、意外と難しいインタレ保持。
それぞれ、利点・欠点はある。目的に合わせて、選択したいですね。
 
 

・06-04A 中間出力→x264.exe
 
コレが一番素直方法なのでは、ないだろうか。
簡単に説明すると━━━
どんなやり方でも良いので、24/30それぞれのデインタレースをし、中間出力。そしてタイムコードを作成する。
さっき作った中間出力をx264に読ませる。出力する。タイムコードといっしょにコンテナに入れる。出来上がり。
━━━こんな感じだ。
この方法の利点は、中間出力での時点で作製環境が制限されない事だろう。
Its・TIVTCのTDecimate・自動フィールドシフト・EasyVFRの利用。まだあるだろうけど、どれでも逝ける!
なんでも良いから、中間出力とタイムコードがあればいい。
 
今回は、ITVFRとItsとauoenc.exe@exavi_vfrとを使って、例を上げてみる。
 
 
先ずavsファイル。
-----------------------------------------------

#Input.avs
#プラグイン宣言省略。テキトウに察してくれ。orz

LoadAviUtlInputPlugin("m2v.vfp", "MPEG2Video")
video = MPEG2Video("SourceFile.m2v")
audio = WavSource("SourceFile.wav")
AudioDub(video, audio)

#OpenDMLSource("SourceFile.avi", pixel_type="YUY2")
return last


#-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

####GNB氏のインタレ解除2:縞だけ解除の2passフラグ####
function deint2_Deint(clip clip)
{
clip
ConvertYUY2ToAviUtlYCFix()
AU_deint2_009alpha3(20,50,50,30,3,true,true,true,false, true, true,false,false,false,false,false)
ConvertAviUtlYCToYUY2Fix()
return last
}


####Itsで使い易いように、関数にしておく。####
function ITVFR_SET(clip clip)
{
clip
#---メインデインタレースフィルタ@好きなのを使う-----
#Auto24FPS(false, 24, 16, "dot", false)
#AutoDeint("")
TDeint(mode=0,order=1,field=1,type=2,mtnmode=3,sharp=false ,
\ full=true, chroma=false, tryweave=true, link=1, slow=2)

#---残りコーミング削除系デインタレース--------------
#EasyDeint()
#AntiComb()
vinverse(sstr=2.7, amnt=255, uv=3, scl=0.25, opt=2)
deint2_Deint()

#---不要フレーム削除部-----------------------------
ITVFR(ref="TOP",diMode=0,Debug=false)
#diMode=0ならば、インタレ削除を行わない。
#フレーム削除がないインタレ解除を、任意で選んで使うことが可能。
#IT Ver0.05系以外のインタレ解除を利用できるのは、嬉しい。

return last
}

-----------------------------------------------

#Input_main.avs
Import("Input.avs")
AssumeFrameBased().ComplementParity()
FFT3DFilter(plane=3,bt=3,bw=3,bh=2,ow=1,oh=1,svr=0,interlaced=true)

DeDot(10,10,0,255)
DeCross(28, 128, 5, false)
KillAudio()
its(opt=1, debug=false, def="itvfrOnly.def", fps=-1)
FaeryDust(1)
#PMD(10,5)
FluxSmoothT(2)
Lanczos4Resize(704,480, 8,0,-8,0)

ColorYUY2(matrix ="rec709s" ,debug =0 ,
\ gain_y =-8, gamma_y =-9,
\ gain_r =-1, gamma_r =-1,
\ off_r =-3, gain_g =-3, gamma_g =-4)

#ColorMatrix(mode="Rec.601->Rec.709",source=2,dest=0,scaling=2,interlaced=false)
return last

-----------------------------------------------
#itvfrOnly.def
set [30] ITVFR_SET = 'ITVFR_SET()'
set [24] Auto24FPS = 'Auto24FPS(true, 24, 16, "dot", false)'

default 24 = Auto24FPS
default 30 = ITVFR_SET

0 - 99999 [30]: ITVFR_SET
-----------------------------------------------

#x264InputYV12.avs
LoadPlugin("ColorMatrix.dll")
OpenDMLSource("YV12Before.avi", pixel_type="YUY2")
AssumeFPS(29.97)
ConvertToYV12()
ColorMatrix(mode="Rec.709->SMPTE 240M",source=0,dest=3,scaling=2,interlaced=false)
return last

-----------------------------------------------

そしてバッチファイル。
-----------------------------------------------

echo AudioEnc
rem avs2wav.exe Input.avs
rem ren Input.avs.wav SourceFile.wav
ffmpeg.exe -i Input.avs -ac 2 -ar 48000 SourceFile.wav

rem lame.exe -V 0 -t SourceFile.wav InPut.mp3
neroAacEnc.exe -br 128000 -if SourceFile.wav -of InPutAAC.mp4
rem oggenc_aoTuV_b4.51\oggenc.exe --quality 8.75 SourceFile.wav


echo VideoEnc
auoenc.exe exavi_vfr.auo MiddleOutput-huffyuv.cfg Input_main.avs YV12Before.avi 5
echo.


echo x264 1pass Enc
x264.exe -p 1 -B 1600 --stats "x264nPass.stats" -I 240 -i 1 --scenecut 75 -b 1 -r 3 -m 6 --b-rdo -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 --direct auto --qpmin 9 --qpmax 38 --qpstep 8 --me esa --no-fast-pskip --no-dct-decimate --cqmfile "MiddleQuality-rev016_Matrix.cfg" --progress --sar 10:11 --transfer smpte240m -o "raw-1.264" "x264InputYV12.avs"
echo.


echo x264 2pass Enc
x264.exe -p 2 -B 1600 --stats "x264nPass.stats" -I 240 -i 1 --scenecut 75 -b 1 -r 3 -m 6 --b-rdo -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 --direct auto --qpmin 9 --qpmax 38 --qpstep 8 --me esa --no-fast-pskip --no-dct-decimate --cqmfile "MiddleQuality-rev016_Matrix.cfg" --progress --sar 10:11 --transfer smpte240m -o "raw-2.264" "x264InputYV12.avs"
echo.


MP4Box.exe -fps 29.970 -add raw-2.264#video:par=10:11 x264_before.mp4
tc2mp4.exe -i x264_before.mp4 -t YV12Before.avi.txt -o x264.mp4

rem 最終出力形態をmp4コンテナで処理する。@x264.mp4
rem MP4Box.exe -chap "chapter.txt" -add InPutAAC.mp4 x264.mp4

rem 最終出力形態をmkvコンテナで処理する。@OutPut.mkv
mkvmerge.exe -o OutPut.mkv -A --aspect-ratio 1:4/3 --timecodes 1:YV12Before.avi.txt --chapters "chapter.txt" x264.mp4 "InPutAAC.mp4"


copy OutPut.mkv \\MainPC\OutPutFiles\OutPut_NewFiles%random%.mkv
net send MainPC %time%時にて、OutPut.mkvの終了。
-----------------------------------------------
例えばこんな感じ。
 
auoenc.exeは、初回実行すると指定してあるファイル名で、定義ファイルを作成する。
auoenc.exe定義ファイル作製
いつもの、この画面が出て設定できる。
中間出力に使うので、ファイル容量は大きくなるから、AVI2.0フラグを立てておく。
 .
 .
 .
auoenc→mp4box→mkv意外にも、他にもいろいろやれる方法はあるだろうから、
試してみるのもいいですね。
 
 

・06-04B Itsを使用し、avsファイルを直接x264.exeに読ませる
 
2passなんてヤラねぇYO。中間出力ダルイ。('A`)マンドクセー
一発で出力できる混合処理、しかも自動ないのかYOヽ(`Д´)ノフカー
…この状態は、十分考えられる。(藁
そこで、一発で出力できる方法を紹介してみる。
 
━━━ま。要は、ItsCut()を使ったときの方法だ。→ itvfrの特殊な対応kiraruノートの《切れ端》
上記ファイルとの共通部(Input_main.avs・バッチファイル以外)は、上の項目参照。
-----------------------------------------------

#Input_main.avs
Import("Input.avs")
AssumeFrameBased().ComplementParity()
FFT3DFilter(plane=3,bt=3,bw=3,bh=2,ow=1,oh=1,svr=0,interlaced=true)

DeDot(10,10,0,255)
DeCross(28, 128, 5, false)
KillAudio()
its(opt=1, debug=false, def="itvfrOnly.def", fps=-1, output="timecodes.tmc")
FaeryDust(1)
#PMD(10,5)
FluxSmoothT(2)
Lanczos4Resize(704,480, 8,0,-8,0)

ColorYUY2(matrix ="rec709s" ,debug =0 ,
\ gain_y =-8, gamma_y =-9,
\ gain_r =-1, gamma_r =-1,
\ off_r =-3, gain_g =-3, gamma_g =-4)

ConvertToYV12()
ColorMatrix(mode="Rec.709->SMPTE 240M",source=0,dest=3,scaling=2,interlaced=false)


ItsCut()
return last

-----------------------------------------------

バッチファイル。
-----------------------------------------------

echo AudioEnc
rem avs2wav.exe Input.avs
rem ren Input.avs.wav SourceFile.wav
ffmpeg.exe -i Input.avs -ac 2 -ar 48000 SourceFile.wav

rem lame.exe -V 0 -t SourceFile.wav InPut.mp3
neroAacEnc.exe -br 128000 -if SourceFile.wav -of InPutAAC.mp4
rem oggenc_aoTuV_b4.51\oggenc.exe --quality 8.75 SourceFile.wav


echo x264 Enc
start /wait "x264EncCHU" x264.exe --crf 22 -I 240 -i 1 --scenecut 75 -b 1 -r 3 -m 6 --b-rdo -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 --me esa --no-fast-pskip --no-dct-decimate --cqmfile "MiddleQuality-rev016_Matrix.cfg" --progress --sar 10:11 --transfer smpte240m -o "raw-2.264" "Input_main.avs"
echo.


MP4Box.exe -fps 29.970 -add raw-2.264#video:par=10:11 x264_before.mp4
tc2mp4.exe -i x264_before.mp4 -t YV12Before.avi.txt -o x264.mp4

rem 最終出力形態をmp4コンテナで処理する。@x264.mp4
rem MP4Box.exe -chap "chapter.txt" -add InPutAAC.mp4 x264.mp4

rem 最終出力形態をmkvコンテナで処理する。@OutPut.mkv
mkvmerge.exe -o OutPut.mkv -A --aspect-ratio 1:4/3 --timecodes 1:timecodes.tmc --chapters "chapter.txt" x264.mp4 "InPutAAC.mp4"


copy OutPut.mkv \\MainPC\OutPutFiles\OutPut_NewFiles%random%.mkv
net send MainPC %time%時にて、OutPut.mkvの終了。
-----------------------------------------------
━━━と。例えばこんな感じ。
でも処理スピードは、中間出力とx264一回分エンコを足したぐらいなので、極端に速いわけでは無い。
それでも、1passならば中間出力をするよりもスマートな方法なのかとも思います。
 
 
 

・06-04C 06-04C インタレ保持
 
rev570にて、インタレ保持が追加されました。
観るには、x264インタレ保持追加後にリリースされたffdshowを使ってデインタレースする事が必要。
また、VLC-0.8.6-test1以降ならば、x264のインタレ保持動画をデインタレース処理して観る事が出来る。
しかし。VLCのデインタレースは、TFF(トップフィールドファースト)用な気もしました。使用時には、確認を。
そして、HWデインタレースを使ってではまだ観る事が出来ない。…のかな?
 
ソフトフェア処理が多くなるので、デコードするPCのパワーは少し高い方が好ましい。気をつけよう。
 
 
さて、本題のエンコについてだ。
インタレ保持を使うのに、使えるオプションに制限が有るので気をつけよう。
rev589にて、fix a crash on interlace + >8 reference framesとなったので、
最新のrevを使うに当たって、reference frames(-r)を気にする必要は無くなった。
しかしながら、未だにBフレームの扱いを気にする必要はある。
--direct ではspatial, temporal, auto、 --me ではesaが使えない。ここに注意したい。
また、インタレ自体の動きも、ベクトルが拾う傾向にある。
x264に選ばせるのであれば、4x4を積極的に選べるようにしておいた方がいい。
つまり、フラット(全部16)で-8フラグ立てて、テキトウにエンコとかは、しない方がいい。
フラットでエンコするのならば、オプションで都合がいいように制御しておこう。
   
 
 
━━━工事中。  
 
 

 
-*-*-*-*-*-*-*-*-
 

・07 つっこみ

中の人に対して云われそうな突込みを書いておくテスト。誰も聴いてないとか、気にするな。
だって、誰も訊ねてくれないんだもん ('Д⊂
 
Q.藻前、莫迦だろ。そうだろ? ばーかバーカ。
A.こういうことを、誰も訊ねてくれないんです。寂しいYO。 ああ、誰かチンチン舐めさせて(氏ね
 
 
Q.藻前さぁ、ITVFR薦めてるけど、あれマジ誤爆多いんだけど、どう云うこと?
A.サンプルスクリプトに書いて在るけど、Trimを5の倍数でそれぞれ構成すると驚くほど誤爆が減る。
 そのとき、頭か終わりのフレームを減らす事になるんですが、経験を積んで選べるようにしよう。
 どうやってやるかは、…また今度の機会で(氏
 ━━━余談ですが、ITVFR自体は24fps部の方が苦手な気がする。
 
 
Q.もしかして、レターボックスを引き伸ばしにしてませんか?ソレ汚いだろ?( ´,_ゝ`)プッ
A.あなたの靴と、漏れの臭い靴は違うのもです。また、今日食べた朝ご飯も違いますね。
 さて、そこで何故動画解像度の設定が、同じであることがあるのでしょうか。
 ━━━そういう事で、藻前さんの好みなんて知ったこっちゃないですYO
 
 
Q.バッチ内の時間確認は、echo %time%ですればいい気がします。
A.うん。そうだね。漏れも、最近そう思った。('A`)
 
 
Q.x264設定煮詰めたって、あんまり綺麗じゃないよ。
A.うん。いいじゃん、弄るのが楽しいから。不満があるなら、いろいろ試してくださいよ。
 
 
Q.x264とかの説明めちゃくちゃだな。酷いYO。
A.漏れの日記側よりまともなので、許せ。('A`) ━━━無理か。orz
 一つのサイトで情報を完結させる莫迦はいない筈だから、大丈夫でしょう。つーか、そうしろ。
 調べた後は、自分用に使えるか試すだろうから、普通大丈夫なハズなんですけどね。
 
 
Q.ろくに更新しないね。なめてるの?ヽ(`Д´)ノフカー
A.そう思うヒトは、日記のサイトでも観てください。青いです。
 ここのサイト名をgoogle先生に聞けば、いくつも引っかかることもないだろうし、きっと発見されちゃいます。
 このサイトよりも、さらに骨髄反射的な事云ってたりしてますが、
 気がついたことをバンバン書いてるので、内容的には早い筈です。
 しかしながら、それが良いか悪いは、別です。それについては、気にしないように。orz
 
 
Q.あー。藻前の事は、どうでもいい。エンコ上達する方法を教えろよヽ(`Д´)ノフカー
A.うむ。承知(ぇー
 …えーと。そのうち書く気がするよ。(氏ね
 それは、次の項目であります。 →  4章 マリア様に観られてる!!
 
 

 
-*-*-*-*-*-*-*-*-
 

.
.
.