YC伸張実験君



  YC伸張がわからない人のために、簡単な実験によりその仕組みを理解してもらえたらと思い、
  何がどうなっているのかを順序立てて説明しておきます。



  使うツール、ソフトウェア

  AviUtl0.99
  MPEG-2 VIDEO VFAPI Plug-Inとm2v.aufの2種類
  TMPGEnc(種類を問わず)
  ジャンパーズサンプル(jumpersample01.m2vが好ましい)。

  これらを使います。m2v.aufはAviUtlのプラグインで動作するので、AviUtlのプラグインフォルダに入れておいてください。
  MPEG-2 VIDEO VFAPI Plug-Inも設定ができるようにしておいてください。



  ジャンパーズサンプルはBt.601の範囲内(Yが16-235、UVが0〜240)で作られたMPEG2です。
  もし、DVDプレーヤーなどがインストールされているPCでしたら再生してみてください。
  美しい白と、黄色と紫のグラデーションが美しい球が1フレーム目にあると思います。これを覚えておいてください。

  では早速、実験に移りましょう。
  VFAPIがRGB色空間であるということに注意して、VFAPI経由でAviUtlにジャンパーズサンプルを読み込みします。
  その時の設定は次のようにします。
  
  上のようにします。これで、VFAPI経由される前にMPEG-2 VIDEO VFAPI Plug-Inでジャンパーズサンプルを
  伸張することになります。さっそくAviUtl0.99で読み込んでみましょう。
  その前にAviUtl側でも設定が必要です。読み込みプラグインの順番が大切ですので(^^
  
  VFAPI経由したいので、今回は「MPEG-2 VIDEO Plug-In」が「MPEG-2 VIDEO File Reader」より上に来るようにします。
  そして読み込むと次のようになります。
  
  VFAPI経由(RGB)伸張あり
  伸張は成功し、1フレーム目は真っ白の背景に黄色と紫のグラデーションのある球が見えると思います。
  再生した時と色がほぼ同じ(GeForceの人は設定を工夫してないと同じに見えませんが)だと思います。

  次に、設定を変えて、「ストレート変換(伸張無し)」にしてみましょう。
  
  そして、もう一度ジャンパーズサンプルを読み込みます。すると、次のようになります。
  
  VFAPI経由(RGB)伸張なし
  なんだか、うす曇りの空のように白い背景は灰色となり、色も薄くなりました。
  ヒストグラムを見てもらってもわかるように、中央に寄ってしまっています。これは再生した時の色じゃないですよね?
  Bt.601に準じたMPEG2をストレート変換してVFAPI経由で読み込むと、このような薄くて汚いプレビューになってしまいます。

  次に、m2v.auf経由(YUY2読み込み)をしてみます。MPEG-2 VIDEO VFAPI Plug-Inの設定は次のようにします。
  
  そして、プラグインの順番を変えます。m2v.aufによるYUY2読み込みをしたいので、MPEG-2 VIDEO File Readerが上に
  なるようにします。
  
  設定が完了したら、さっそくジャンパーズサンプルを読み込んでみましょう。
  その結果はこのようになります。
  
  m2v.auf経由(YUY2)、YUV保持
  再生した時と同じ色になっていると思います。このとき、AviUtlのプレビューはRGBで、YC伸張した状態です。
  しかし、内部はYUVになっています。つまり、この状態でYUY2へ出力するときは、
  YC伸張は必要ありません。よくヒストグラムを見るとわかると思いますが、VFAPIで伸張してRGB化したデータより
  デコボコが少なくキレイであると思います。これは、伸張計算やYUV→RGB計算をしてないヒストグラムだからです。

  次に、元の色空間を保持せずに読み込んでみましょう。元の色空間がすでにBt.601のため、保持した時も保持しなかった
  ときも同じ結果になると思います。実験ですから一応結果を。
  
  m2v.auf経由(YUY2)、Bt.601色空間
  まったく同じですね。ジャンパーズサンプルがBt.601色空間のMPEG2なので当たり前なんですが(汗
  このときも、内部ではYUV色空間であるため、そのままYUY2出力してもらって大丈夫です。

  じゃあ、BSD用に用意されてる、Bt.709色空間でジャンパーズサンプルを展開してみます。
  
  設定はこのようにします。BSDソースならこの設定なんですが、ジャンパーズサンプルはBt.601色空間です。
  なんだか、嫌な予感がしますが、一応結果を貼っておきますね。
  
  m2v.auf経由(YUY2)、Bt.709色空間
  なんだかおかしいですね。輝度も色差も広がってます。球の色が変わってしまいました・・・
  このまま、Bt.709はちょっと使い物にならないですね。BSDの時専用ということで。

  結論:AviUtlのプレビューがキレイだったら読み込みは成功してるって事です。
  内部処理はRGBが最初に入っているので微妙に違いますが。ということで、出力を考えてみましょう。
  AviUtlの内部はYUVです。プレビューはPC画面に映る限りRGBです。



  AviUtlの内部とプレビューが違うことを理解して、出力も考えてみます。
  この2つの差を理解できれば、入出力で色伸張と色圧縮による間違えを防げませす。
  理解できるように、輝度のみのサンプルを作りました。
  ジャンパーズサンプル輝度のみバージョン ダウンロード
  ファイルへの直リンはやめて下さい。(ISWEBだからです。)
  数字が書いてありますが、それは0-255にRGB展開されたときにその色になるように作られています。
  つまり、Bt.601の輝度レベル(16-235)に準じたMPEG2ファイルってことです。

  DVD-Video形式ではありませんが、このファイルをTVで見てもPCと似たような色になります。

  で、何が言いたいかというと、「AviUtlのプレビュー」であわせた色なら出力を気をつけなくても良い
  と言うことです。プレビューから出たヒストグラムを見て、調整したとおりに内部もリンクしています。
  YCbCrのヒストグラムを見て正しい範囲にして、出力すれば問題ありません。
  RGBのヒストグラムでも、0-255にすればOKです。YUY2読み込みした場合、内部もリンクしてるので、
  プレビューと近い色(プレビューより内部はちょっと優れてる)になります。

  TMPGEncでも同じです。TMPGEncは、内部もプレビューもRGBです。0-255で普通に調整して、
  
  のチェックボックスを空白にしておけば、TV用でもPC用でも通用するMPEG2ファイルになります。
  逆に、16-235の近辺でまとまっているデータを伸張処理せずにストレートで渡す場合は
  チェックボックスにチェックを入れることで、16-235付近のデータが受け継がれPCでもTVでも通用する
  MPEG2が完成するのです。

  じゃあ、AviUtlでMPEG2をYUY2読み込みして、WMV9VCMなどのYUY2入力に対応したAVIに出力する場合は?
  という質問が多いですが、Yは「内部で」16-235の範囲にすればいいのです。
  伸張無しRGB読み込み→AviUtlの「TV→PC」にチェック→RGBヒストグラム0-255→YUY2出力やRGB出力
  伸張ありRGB読み込み→伸張なし→RGBヒストグラム0-255の範囲で補正→YUY2出力やRGB出力やVFAPI用プロジェクトファイル
  YUY2読み込み→伸張なし→RGBヒストグラムは0-255の範囲でプレビューを見ながら補正→YUY2出力(下と同じですが、わかりにくいです)
  YUY2読み込み→伸張なし→YCbCrヒストグラムを16-235、16-240の間に収めて補正→YUY2出力(もっとも綺麗に出来ます)
  YUY2読み込み→伸張なし→RGBヒストグラムを0-255の範囲、YCbCrのヒストグラムは16-235、16-240→VFAPI用プロジェクトファイル
  にすれば、思ったとおりの色になると思います。

  「AviUtlのプレビューやRGBヒストグラム」ではYUY2読み込みしても伸張されたデータが現れていると思います。コレを見てRGB0-255にすれば、
  YUY2読み込みであっても、RGB読み込みした場合であっても、伸張ミスは起きません。

  YCbCrのヒストグラムを見てください。「16-235や16-240の範囲がMAX」になっているのがわかると思います。
  YUY2読み込みをした時、この16-235周辺の範囲が、そのままYUY2出力されてコーデックはYUY2の信号を受け取り、
  伸張や小数点切捨ての無いRGB色空間を通ることなく、そのまま受け継がれるのです。

  してはいけないことだけ書いておきますね。
  ・2重伸張ミス(0-255めいっぱいのデータをTMPGEncでBasicYCbCr「出力する」とか)
  ・色圧縮ミス(16-235のデータをTMPGEncでBasicYCbCrで「出力しない」とか)
  ・AviUtlのプレビューを信じない行為(YUY2読み込みした時は、内部はストレートでもプレビューはYC伸張後のRGB)
  つまり、プレビューが薄い場合は、YUY2出力も薄いです。プレビューと出力が異なるとAviUtlの説明書に書いてあっても、
  プレビューで調整する以外に方法はありません。(YCbCrのヒストグラムを見てください。それは信用できます)

  結論:実験は自分でしてみてください。YUY2読み込み→AviUtl内部YUV→YUY2出力が優れている事がわかります。

  注意1:VFAPI経由を2回するときなどは注意してください。1回目の設定を変えると2回目も影響を受けます。
  また、この実験によりエンコード環境を崩した場合は、元に戻してください。お願いします。
  Bt.709を使ったり、MPEG2をVFAPI経由を使ってエンコードしている場合はいつもの環境にもどさないと大変な事になります。
  注意2:CCEの設定にもご注意ください。持って無いのでわかりませんが0-255のデータを受け取る場合、
  16-235のデータを受け取る場合と2通りの設定があるようです。



もどる



Internet Explorer5以上、横解像度800以上でのの閲覧を推奨します
jumper