## ConvertToRGB / ConvertToRGB24 / ConvertToRGB32
ConvertToYUY2 / ConvertBackToYUY2 / ConvertToYV12

`ConvertToRGB` (clip [, string "matrix"] [, bool "interlaced"])
`ConvertToRGB24` (clip [, string "matrix"] [, bool "interlaced"])
`ConvertToRGB32` (clip [, string "matrix"] [, bool "interlaced"])
`ConvertToYUY2` (clip [, string "matrix"] [, bool "interlaced"])
`ConvertToYV12` (clip [, string "matrix"] [, bool "interlaced"])
`ConvertBackToYUY2` (clip [, string "matrix"])

matrix: デフォルトは "Rec601"。RGB- YUV 変換において使用される色係数と倍率を制御します。

- "Rec601" : ITU-R BT.601 係数を使用。TV スケール [16,235] に圧縮される。
- "PC.601" : ITU-R BT.601 係数を使用。フルスケール*1 [0,255] を保持する。
- "Rec709" : ITU-R BT.709 係数を使用。TV スケールに圧縮される。
- "PC.709" : ITU-R BT.709 係数を使用。フルスケールを保持する。

interlaced: デフォルトは false。YV12 - YUY2/RGB 色差変換に対して、インターレースのレイアウトを使用します。

v2.50 より前の AviSynth は、RGB と YUY2 の 2 つのカラーフォーマットを内部で扱うことができます。v2.50 から、AviSynth は YV12という第 3 のカラーフォーマットも扱うことができます。Convert フィルタは、それらのカラーフォーマット間の変換を行います。もしビデオがすでに指定されたフォーマットなら、そのまま素通しされます。このマニュアルでは、RGB は RGBA（RGB32） を指すという前提で書かれています。`ConvertToRGB` は、クリップが RGB24 でない限り、RGB32 に変換します。もし何らかの理由により 24 ビット RGB が必要なら明示的に `ConvertToRGB24` を使用し、その反対を行うには `ConvertToRGB32` を使用してください。

`ConvertToRGB24` のシンタックスと演算は、出力フォーマットが 24 ビットであるということを以外は、`ConvertToRGB` とまったく同じです。もしソースが RGB32 なら、アルファチャンネルは失われます。

v2.51/v2.52 から、オプションの interlaced パラメータが追加されます（interlaced=false がデフォルトの演算です）。false に設定すると clip がプログレッシブであると仮定され、true に設定すると clip がインターレースであると仮定されます。このオプションが追加されるのは、例えば（clip はインターレースの YV12 と仮定）:

    SeparateFields(clip)
    ConvertToYV12
    Weave

は、正しくアップサンプリングされないからです。その代わりに interlaced オプションを使用すべきです:

    ConvertToYV12(clip, interlaced=true)

interlaced=true という設定は、YV12 <-> YUY2/RGB 変換が要求される場合にのみ何かを行います。さもなければ、それは単に無視されます。詳細は「色変換とインターレース/フィールドベースのビデオ」に書かれています。

期待に反して、YUV を RGB に変換するユニークな方法はありません。AviSynth では、次の 2 つのもっとも一般的な方法が実装されています: （公式の規格書にちなんで名付けられた）Rec.601 と Rec.709。すべてのケースで正しいとは限りませんが、以下の内容はほとんどの場合において正しいでしょう*2:

1 つ目の方法（Rec.601）は、ソースが DivX/XviD またはアナログキャプチャの時に使用します*3:

    ConvertToRGB(clip)

2 つ目の方法（Rec.709）は、ソースが DVD か HDTV の時に使用します:

    ConvertToRGB(clip, matrix="rec709")

v2.56 から、この反対、すなわち、

    ConvertToYUY2(clip, matrix="rec709")

または

    ConvertToYV12(clip, matrix="rec709")

も利用可能です。

v2.56 から、matrix="pc.601" （と matrix="pc.709"）は、輝度の範囲を保持しながら RGB <-> YUV 変換すること、したがって（通常の/デフォルトの RGB [0,255] <-> YUV [16,235] の代わりに） RGB [0,255] <-> YUV [0,255] で変換することを可能にします。

すべての VirtualDub フィルタ（LoadVirtualdubPlugin を使って読み込まれます。プラグイン を参照）は、RGB32 入力のみをサポートします。

RGB24, RGB32: 色は、赤、緑、青の値として保存されます。RGB32 には、これに加えて不透明度を表すアルファチャンネルがあります。画像の大きさは、任意の値を取ることができます。

YUY2: 画像は、輝度の値 Y と 2 つの色の値 U、V として格納されます。水平方向の 2 ピクセルに対し、1 つの色差値と 2 つの輝度値を持ちます（2 つの Y、1 つの U、1 つの V）。そのため、画像の幅は 2 の倍数でなければなりません。

YV12: 4 ピクセル（2x2 の正方形）に対して 1 つの色差値しかないということ以外は、YUY2 と同じです。画像の高さと幅は、ともに 2 の倍数でなければなりません。もし映像がインターレースなら、2x2 の正方形はフレームではなくフィールドから取られるため、高さは 4 の倍数でなければなりません。

ある関数は画像の大きさのルールに関するチェックを行い、ある関数はパラメータの丸め込みを行います。さらに画像の歪みやエラーが起こる関数もあります。

YUY2 での作業は、RGB より高速です。YV12 はさらに高速で、ネイティブな MPEG フォーマットです。そのため、色空間変換の回数が少なくなります。

相互変換は、ロスレスではありません。そのため、できるだけ変換の回数を少なくしてください。もし複数回の変換が必要なら、ソースが元々 YUY2 であった場合は、YUY2 に戻すのに `ConvertBackToYUY2` を使用してください。これによって色のぼけは減りますが、それでもまだ精度が失われます。

たいていの場合、`ConvertToRGB` フィルタは必要ないはずです。AviSynth の出力が YUY2 フォーマットで、かつ、アプリケーションが RGB を要求するなら、システムはインストールされた YUY2 コーデックを使って変換するでしょう。しかし、もし YUY2 コーデックがインストールされていないか、あるいは（ATI やその他のいくつかの YUY2 コーデックの場合のように）コーデックが YUY2 から RGB へ不正確な変換を行うなら、その代わりとして AviSynth 内蔵フィルタを使って変換することができます。

Huffyuv は、ほかにインストールされているコーデックがない場合、システムの YUY2 コーデックとして機能します。そのため、もし Huffyuv をインストールし、かつ、その他の YUY2 コーデックをすべてアンインストールした場合、`ConvertToRGB` は必要なくなります。

`ConvertToRGB24` と `ConvertToRGB32` は、AviSynth に対して RGB データに関する特定の格納方法を使用するように強制するために使われます。RGB24 データは、RGB32 データより、処理にずっと時間がかかることが多いです。そのため、もしソースが RGB24 なら、RGB32 に変換することによって速度面の向上が得られるかもしれません。（TMPGEnc と VFAPI が RGB24 入力を必要とするということ以外） RGB24 を使用するメリットはありません。

    # YUY2 <-> RGB 間の変換によって、わずかな歪みが引き起こされます。
    # 実際に目で見て確認してみましょう。
    control = ConvertToYUY2()
    test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control))))
    test = ConvertToYUY2(ConvertToRGB(test))
    return Subtract(test,control)

`原文 Date: 2006/09/27 18:41:25`
`日本語訳 $Date: 2008/06/22 07:41:10 $`

- 訳者註:
  - *1 PC スケールとも。
  - *2 参考: まるも製作所 Diary 2002-5、まるも製作所 Diary 2002-4
  - *3 matrix パラメータのデフォルト値は "Rec601" なので、この例のように matrix の値を省略すると、"Rec601" が適用されます。