Convert のバックアップの現在との差分(No.2)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#code{{
ConvertToXXX(clip clip [, string matrix] [, boolean interlaced])
#pre{{
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"])
}}

#code{{
ConvertBackToYUY2(clip clip [, string matrix])
}}
'''matrix''': デフォルトは "Rec601"。RGB- YUV 変換において使用される色係数と倍率を制御します。

|~XXX = ...|~planar/interleaved|~chroma resolution|
|RGB|interleaved|完全な色差 - 4:4:4|
|RGB24|interleaved|完全な色差 - 4:4:4|
|RGB32|interleaved|完全な色差 - 4:4:4|
|YUY2|interleaved|色差は2ピクセル間で共有 - 4:2:2|
|Y8|planar/interleaved|色差なし - 4:0:0|
|Y411|planar|色差は4ピクセル間で共有 - 4:1:1|
|YV12|planar|色差は2x2ピクセル間で共有 - 4:2:0|
|YV16|planar|色差は2ピクセル間で共有 - 4:2:2|
|YV24|planar|完全な色差 - 4:4:4|
-"Rec601" : ITU-R BT.601 係数を使用。TV スケール [16,235] に圧縮される。
-"PC.601" : ITU-R BT.601 係数を使用。フルスケール((訳者註: PC スケールとも。)) [0,255] を保持する。
-"Rec709" : ITU-R BT.709 係数を使用。TV スケールに圧縮される。
-"PC.709" : ITU-R BT.709 係数を使用。フルスケールを保持する。

'''matrix''': デフォルトは「指定なし」です。RGB- YUV 変換において使用される、色係数(colour coefficients)とスケーリング係数(scaling factors)をコントロールします。
'''interlaced''': デフォルトは false。YV12 - YUY2/RGB 色差変換に対して、インターレースのレイアウトを使用します。

-指定なし : Rec.601係数を使用、TVのレンジ[16,235]に調整(scaled)される。
-"PC.601" : Rec.601係数を使用、フルレンジ[0,255]をキープする。
-"Rec709" : Rec.709係数を使用、TVのレンジに調整される。
-"PC.709" : Rec.709係数を使用、フルレンジをキープする。
v2.50 より前の AviSynth は、RGB と YUY2 の 2 つのカラーフォーマットを内部で扱うことができます。v2.50 から、AviSynth は YV12という第 3 のカラーフォーマットも扱うことができます。Convert フィルタは、それらのカラーフォーマット間の変換を行います。もしビデオがすでに指定されたフォーマットなら、そのまま素通しされます。このマニュアルでは、RGB は RGBA(RGB32) を指すという前提で書かれています。ConvertToRGB は、クリップが RGB24 でない限り、RGB32 に変換します。もし何らかの理由により 24 ビット RGB が必要なら明示的に ConvertToRGB24 を使用し、その反対を行うには ConvertToRGB32 を使用してください。

'''interlaced''': デフォルトはfalse。YV12 <-> 非YV12 色差変換のために、インターレース化されたレイアウトを使用します。
ConvertToRGB24 のシンタックスと演算は、出力フォーマットが 24 ビットであるということを以外は、ConvertToRGB とまったく同じです。もしソースが RGB32 なら、アルファチャンネルは失われます。

v2.5より前のAviSynthは、内部で、RGBとYUY2の2つのカラーフォーマットを扱うことができます。v2.5から、AviSynthは、YV12という第3のカラーフォーマットも扱うことができます。これら6つのフィルタは、それらを相互に変換します。そのビデオがすでに指定されたフォーマットなら、それは変更されずに渡されます。(このドキュメントを通して、RGBは、RGBAを意味すると推測されます。)あなたのクリップがRGB24でない限り、ConvertToRGBはRGB32に変換します。何らかの理由により、あなたが24ビットのRGBを必要とするなら、明示的にConvertToRGB24を、その反対を行うためにはConvertToRGB32を使ってください。
v2.51/v2.52 から、オプションの '''interlaced''' パラメータが追加されます('''interlaced'''=false がデフォルトの演算です)。false に設定すると '''clip''' がプログレッシブであると仮定され、true に設定すると '''clip''' がインターレースであると仮定されます。このオプションが追加されるのは、例えば(clip はインターレースの YV12 と仮定):

v2.60において、次の追加のフォーマットがサポートされます: Y8 グレースケール(色差を含まないため、PlanarとInterleavedの両方。4:0:0)、YV411(Planar。YUV 4:1:1)、YV16(YUY2のPlanarバージョン。4:2:2)とYV24(Planar。YUV 4:4:4)。

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

v2.51/v2.52から、オプションのinterlacedパラメータが追加されます(interlaced=falseがデフォルトの動作です)。falseに設定されると、クリップはプログレッシブであると仮定され、trueに設定されると、クリップはインターレースであると仮定されます。たとえば以下の例(クリップがインターレース化されたYV12であると仮定して)では不正確にアップサンプリングされるために、このオプションが追加されます:

#code{{
#pre{{
SeparateFields(clip)
ConvertToYUY2()
Weave()
ConvertToYV12
Weave
}}

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

#code{{
ConvertToYUY2(clip, interlaced=true)
#pre{{
ConvertToYV12(clip, interlaced=true)
}}

注意してください。interlaced=trueの設定は、YV12 <-> YUY2/RGB 変換が要求される場合にのみ、何かを行います。さもなければ、それは単に無視されます。それについての詳細は、"[[Color conversions and interlaced / field-based video(色変換とインターレース / フィールドベースのビデオ):http://www.avisynth.org/FieldBasedVideo]]"で見つけられます。
'''interlaced'''=true という設定は、YV12 <-> YUY2/RGB 変換が要求される場合にのみ何かを行います。さもなければ、それは単に無視されます。詳細は「[[色変換とインターレース/フィールドベースのビデオ:http://avisynth.nl/FieldBasedVideo]]」に書かれています。

期待に反して、YUVをRGBに変換するユニークな方法はありません。AviSynthでは、2つのもっとも一般的な方法が実装されています: (公式の規格書の名を取って名付けられた)Rec.601とRec.709。それがすべてのケースにおいて正しいとは限らないにもかかわらず、以下のことは、ほとんどの場合において正しいでしょう:
期待に反して、YUV を RGB に変換するユニークな方法はありません。AviSynth では、次の 2 つのもっとも一般的な方法が実装されています: (公式の規格書にちなんで名付けられた)Rec.601 と Rec.709。すべてのケースで正しいとは限りませんが、以下の内容はほとんどの場合において正しいでしょう((訳者註: 参考記事 - [[まるも製作所 Diary 2002-5:http://www.marumo.ne.jp/db2002_5.htm#15]]、[[まるも製作所 Diary 2002-4:http://www.marumo.ne.jp/db2002_4.htm#17]])):

あなたのソースがDivX/XviDかアナログキャプチャであるとき、1つ目の方法(Rec.601)が使用されるべきです:
1 つ目の方法(Rec.601)は、ソースが DivX/XviD またはアナログキャプチャの時に使用します((訳者註: matrix パラメータのデフォルト値は "Rec601" なので、この例のように matrix の値を省略すると、"Rec601" が適用されます。)):

#code{{
#pre{{
ConvertToRGB(clip)
}}

あなたのソースがDVDかHDTVであるとき、2つ目の方法(Rec.709)が使用されるべきです:
2 つ目の方法(Rec.709)は、ソースが DVD か HDTV の時に使用します:

#code{{
#pre{{
ConvertToRGB(clip, matrix="rec709")
}}

v2.56では、この反対もまた利用できます。すなわち、
v2.56 から、この反対、すなわち、

#code{{
#pre{{
ConvertToYUY2(clip, matrix="rec709")
}}

または

#code{{
#pre{{
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] を行うことを可能にします。
も利用可能です。

(LoadVirtualdubPlugin((AviSynthPluginsを参照。))で読み込まれる)すべてのVirtualDubフィルタは、RGB32入力のみをサポートします。
v2.56 から、'''matrix'''="pc.601"(と '''matrix'''="pc.709")は、輝度の範囲を保持しながら RGB <-> YUV 変換すること、したがって(通常の/デフォルトの RGB [0,255] <-> YUV [16,235] の代わりに) RGB [0,255] <-> YUV [0,255] で変換することを可能にします。

RGB入力と一緒にこれらのフィルタのいずれかを使用しようとするなら、エラーが発生するでしょう。問題となるフィルタの前にConvertToYUY2を置けば、この問題は解決されるはずです。すべてのAviSynthフィルタは、YUY2入力をサポートしています。
すべての VirtualDub フィルタ(LoadVirtualdubPlugin を使って読み込まれます。[[プラグイン>AviSynthPlugins]] を参照)は、RGB32 入力のみをサポートします。

相互の変換は、ロスレスではありません。そのため、できるだけ変換の回数を少なくしてください。もし複数の変換が必要なら、スクリプトのそれよりも前にYUY2->RGB変換を適用したときは、YUY2に戻すためにConvertBackToYUY2()を使用してください。これは色のぼかしを減らすでしょう。しかし、それでもまだ、失われる精度があります。
''RGB24、RGB32:'' 色は、赤、緑、青の値として保存されます。RGB32 には、これに加えて不透明度を表すアルファチャンネルがあります。画像の大きさは、任意の値を取ることができます。

たいていの場合、ConvertToRGBフィルタは必要ではないはずです。AviSynthの出力がYUY2フォーマットで、アプリケーションがRGBを要求するなら、システムは、変換するためにインストールされたYUY2コーデックを使用するでしょう。しかし、もしインストールされたYUY2コーデックがないなら、もしくは(ATIのYUY2コーデックの場合のように)そのコーデックがYUY2からRGBへ不正確に変換するなら、代わりに変換するためにAviSynth内蔵フィルタを使用することができます。
''YUY2:'' 画像は、輝度の値 Y と 2 つの色の値 U、V として格納されます。水平方向の 2 ピクセルに対し、1 つの色差値と 2 つの輝度値を持ちます(2 つの Y、1 つの U、1 つの V)。そのため、画像の幅は 2 の倍数でなければなりません。

インストールされている他のコーデックがないなら、[[HuffYUV]]はシステムのYUY2コーデックのように動作するでしょう。そのため、もしあなたがHuffYUVをインストールし、かつ他のすべてのYUY2コーデックをアンインストールするなら、あなたはConvertToRGBを必要としなくなるでしょう。
''YV12:'' 4 ピクセル(2x2 の正方形)に対して 1 つの色差値しかないということ以外は、YUY2 と同じです。画像の高さと幅は、ともに 2 の倍数でなければなりません。もし映像がインターレースなら、2x2 の正方形はフレームではなくフィールドから取られるため、高さは 4 の倍数でなければなりません。

システムにHuffYUVをシステムのYUY2コーデックとして使うように強制するために、レジストリを編集することもできます。「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32」以下を見てください(Win9xの場合は、場所が異なるでしょう)。「VIDC.YUY2」という名前の文字列が見つかるはずです。その値は、あなたのソフトウェアやハードウェアの設定によって異なるでしょう(たとえば、ATI All-In-Wonder Radeonのインストールは、これをATIVYUY.DLLに設定します)。これをhuffyuv.dllに変更してください。そうすれば、YUY2変換のためにHuffYUVが要求されるでしょう。TMPGEncでのAvisynthスクリプトからのエンコード品質は、ほかのいくつかのコーデックよりも、YUY2デコーダとしてのHuffYUVのほうがずっと優れています。たとえば、ATIVYUY.DLLの場合は、字幕スーパーの色の変化がポスタライズ((訳者註: 参考: [[図解DTP用語辞典:http://www.japanlink.co.jp/dtpjiten/ho/posterized.html]]))されます。容認できる結果はConvertToRGBを用いれば可能でしたが、TMPGEncがエンコードしている時にYUVに戻すことを必要としたため、これはエンコード時間を大いに増加させました。システムのYUY2コーデックをHuffYUVに変更することは、エンコードされる出力の品質を維持しながら、ぜいたくな(そしてロスのある)YUV->RGB->YUV変換を省略します。
ある関数は画像の大きさのルールに関するチェックを行い、ある関数はパラメータの丸め込みを行います。さらに画像の歪みやエラーが起こる関数もあります。

AviSynth v2.5では、MJPEGのクリップを読み込むときに、ときどき色が歪められる(黒が緑になり、白が紫になる)ことがあります。ConvertToYV12を呼び出したり、そのAVIをYUY2として開くように強制することによって、それを回避することができます:
YUY2 での作業は、RGB より高速です。YV12 はさらに高速で、ネイティブな MPEG フォーマットです。そのため、色空間変換の回数が少なくなります。

#code{{
AviSource("c:\clip.avi", pixel_type="YUY2")
ConvertToYV12()  # 必要なら
}}
相互変換は、ロスレスではありません。そのため、できるだけ変換の回数を少なくしてください。もし複数回の変換が必要なら、ソースが元々 YUY2 であった場合は、YUY2 に戻すのに ConvertBackToYUY2() を使用してください。これによって色のぼけは減りますが、それでもまだ精度が失われます。

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

#code{{
# YUY2とRGBの変換によって引き起こされる、わずかな歪みがある。
# もし私たちがそれを見ることができるなら、見てみよう。
[[Huffyuv:http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html]] は、ほかにインストールされているコーデックがない場合、システムの YUY2 コーデックとして機能します。そのため、もし Huffyuv をインストールし、かつ、その他の YUY2 コーデックをすべてアンインストールした場合、ConvertToRGB は必要なくなります。

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

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

''更新履歴:''

|v2.6|ConvertToY8, ConvertToY411, ConvertToYV16, ConvertToYV24|
|v2.5|ConvertToYV12|

#hr

註: このページは、[[Convert - avisynth.org:http://www.avisynth.org/Convert]]の日本語訳です。
註: このページは、AviSynth 2.5.7 に同梱されているマニュアル(英語版)の日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/convert.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。