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


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[エラーのタイプ]]
#code{{
ConvertToXXX(clip clip [, string matrix] [, boolean interlaced])
}}

#code{{
ConvertBackToYUY2(clip clip [, string matrix])
}}

|~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|

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

-指定なし : Rec.601係数を使用、TVのレンジ[16,235]に調整(scaled)される。
-"PC.601" : Rec.601係数を使用、フルレンジ[0,255]をキープする。
-"Rec709" : Rec.709係数を使用、TVのレンジに調整される。
-"PC.709" : Rec.709係数を使用、フルレンジをキープする。

'''interlaced''': デフォルトはfalse。YV12 <-> 非YV12 色差変換のために、インターレース化されたレイアウトを使用します。

v2.5より前のAviSynthは、内部で、RGBとYUY2の2つのカラーフォーマットを扱うことができます。v2.5から、AviSynthは、YV12という第3のカラーフォーマットも扱うことができます。これら6つのフィルタは、それらを相互に変換します。そのビデオがすでに指定されたフォーマットなら、それは変更されずに渡されます。(このドキュメントを通して、RGBは、RGBAを意味すると推測されます。)あなたのクリップがRGB24でない限り、ConvertToRGBはRGB32に変換します。何らかの理由により、あなたが24ビットのRGBを必要とするなら、明示的にConvertToRGB24を、その反対を行うためにはConvertToRGB32を使ってください。

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{{
SeparateFields(clip)
ConvertToYUY2()
Weave()
}}

それよりも、次の使い方のほうがよい:

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

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

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

あなたのソースがDivX/XviDかアナログキャプチャであるとき、1つ目の方法(Rec.601)が使用されるべきです:

#code{{
ConvertToRGB(clip)
}}

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

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

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

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

または

#code{{
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入力のみをサポートします。

RGB入力と一緒にこれらのフィルタのいずれかを使用しようとするなら、エラーが発生するでしょう。問題となるフィルタの前にConvertToYUY2を置けば、この問題は解決されるはずです。すべてのAviSynthフィルタは、YUY2入力をサポートしています。

相互の変換は、ロスレスではありません。そのため、できるだけ変換の回数を少なくしてください。もし複数の変換が必要なら、スクリプトのそれよりも前にYUY2->RGB変換を適用したときは、YUY2に戻すためにConvertBackToYUY2()を使用してください。これは色のぼかしを減らすでしょう。しかし、それでもまだ、失われる精度があります。

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

インストールされている他のコーデックがないなら、[[HuffYUV]]はシステムのYUY2コーデックのように動作するでしょう。そのため、もしあなたがHuffYUVをインストールし、かつ他のすべてのYUY2コーデックをアンインストールするなら、あなたはConvertToRGBを必要としなくなるでしょう。

システムに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として開くように強制することによって、それを回避することができます:

#code{{
AviSource("c:\clip.avi", pixel_type="YUY2")
ConvertToYV12()  # 必要なら
}}

''例:''

#code{{
# YUY2とRGBの変換によって引き起こされる、わずかな歪みがある。
# もし私たちがそれを見ることができるなら、見てみよう。
control = ConvertToYUY2()
test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control))))
test = ConvertToYUY2(ConvertToRGB(test))
return Subtract(test, control)
}}

''更新履歴:''

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

#hr

註: このページは、[[Convert - avisynth.org:http://www.avisynth.org/Convert]]の日本語訳です。