子豚の嫁探し

3ヶ月毎に嫁を探す豚野郎です。

AviSynthとx264を用いてエンコする際の色空間について

※この記事は生物(なまもの)です。また、素人が調べたものなので間違いがあるかもしれません。というか絶対ある。参考にするかどうかは個々人の判断に任せます。

今まで色空間については適当に設定していたのだけど、ちょっと真面目に考えることにしてみた。

YUV420・YUV422・YUV444のどれを使うべき?BT.709って何?

YUV420・YUV422・YUV444の用途の違いを簡単にまとめてみる。YUV420は最も一般的なもので、デジタル放送やDVDにも適用されている。YUV422はテレビ局のスタジオ内機器のためのスタジオ規格になっているらしい。YUV444は医療や映画の現場などで使われている。

一般的に考えて、普通にエンコする場合はYUV420で問題なし。x264 r2085からYUV422のエンコードがサポートされたけど、通常はあまり気にしなくておk。俺みたいな素人ではなく、プロのエンコマニアの方々にお任せします。YUV444というのは、データ量が多い割に人間の視覚特性的にそこまで差異を認識することができないのでこれも特に意識しなくてもいいかと。

ちなみに、YUY2とかYV12とかあるけど、前者がYUV422で後者がYUV420だったりする。混乱する。

映像は光の三原色であるRGBから、カメラによってYCbCrに等価変換され、テレビやモニタに出力するときに再びRGBになる。この変換時に用いられる計算式がITU-Rによって制定されたBT.601とかBT.709ってのがある。計算式はWikiに載ってる。BT.601はSDTV用でBT.709がHDTV用。

AviSynthとx264における色空間変換

さて、AviSynthの話。

PT2とかでTS抜きする場合は色空間変換については考えなくてもいい。BT.709でRGBから変換されたYV12のソースをそのままx264に通せばいい。ただ、PV4とかアナログキャプチャになると話は別で、キャプチャされたソースの色空間はYUY2になる。さらに、PCモニタではBT.601としてRGB出力されるという話がある。*1 なので、PV4ソースの1280x720リサイズエンコードを仮定すると、YV12変換と同時にBT.709変換もしなければならない。今や死語となりつつあるYC伸張は無視する。グラボに任す。というかTVスケール出力が普通。とりあえずColorMatirx()を使う。

ColorMatrix(mode="Rec.601->Rec.709", source=2, dest=3, clamp=3,
\            inputFR=false, outputFR=false, interlaced=false, hints=false,
\            d2v="", debug=false, threads=1, thrdmthd=0, opt=3)

これをx264にぶち込む。x264での色空間に関する設定はcolorprim、transfer、colormatrixがある。YV12変換されたHDサイズのavsを読みこませるのであれば、

--colorprim "bt709" --transfer "bt709" --colormatrix "bt709"

と書いておけば問題ないと思う。特にBlu-Ray互換を考えるのであれば必須な設定らしい。ただし、x264のBD互換に関してはpresetなどがなく、仕様等が不明なので実験程度に考えるべき。*2 正直、x264のウィキを読んでもよくわからない。*3 どちらにしろ、注意すべきはRGB-YUVの変換係数の指定ということになる。

以上、間違いもいくつかあるだろうけど俺はもう諦めた。色空間、奥が深すぎてどうにもわからん。

追記(12/22)

完全に勘違いしてたけど、PV4はTVスケールキャプチャでした。AviSynthでのHistogramを見間違えてたという。つまり、PV4キャプチャの場合は、色空間はYUY2、カラーマトリクスはBT.601、そしてTVスケールでソースが保存されます。つまり、正常な色に戻すにはBT.709変換をAviSynthで行い、且つx264でBT.709のフラグを付ければいいとのこと。

ということで、ColorMatrix()の設定を見直しておきました。いやはや、なんという恥晒し。

*1:[http://www10.plala.or.jp/p205tb16/pv3.html#071210]

*2:[http://up-cat.net/x264%25A4%25C8Blu%252Dray.html]

*3:[http://mewiki.project357.com/wiki/X264_Settings#colorpri]m