« さすがニコニコ動画(9)は格が違った(最悪な意味で) | トップページ | DirectShowでFLVを再生するための仕組み等について »

2009年11月 1日 (日)

FLVの「On2 VP6 with alpha channel」(VP6A)の仕様等について

何故かまだ続くFLVの話。
今回は「On2 VP6 with alpha channnel」についての話です。

 
■「On2 VP6 with alpha channel」の仕様について

  FlashPlayer 8 から、「On2 VP6 with alpha channel」が採用され、
  Flashでアルファチャンネル(透明度情報)つきの映像を扱えるようになりました。
  (長いので、以後「On2 VP6A」と表記します。)

  「On2 VP6 with alpha channel」は、名前のとおりVP6コーデックを利用していますが、
  FLVの仕様書v10で規定されているCodecIDは「4」ではなく「5」となっており、
  「On2 VP6」とは別になっています。

FLVの仕様書で規定されている
ビデオコーデックID
FLV規定の
CodecID
コーデック名
1 JPEG (currently unused)
2 Sorenson H.263
3 Screen video
4 On2 VP6
5 On2 VP6 with alpha channel 
6 Screen video version 2
7 AVC

 
  アルファチャンネルつきの映像は一般的にARGB32形式として
  扱うことが多いですが、VP6はYUV4:2:0(YV12)形式であり、
  そのままではアルファチャンネルを扱うことはできません。

  そのため、「On2 VP6A」では、
     「色情報を持つ通常のVP6映像ストリームとは別に、
      アルファチャンネル専用のVP6映像ストリームを作って格納する」

  という方法で、アルファチャンネルを扱っているようです。

  詳細は、SWF仕様書v10のp.248に書かれていますが、
  アルファチャンネル専用のVP6映像ストリームは、
     ●YUVデータの輝度(Y)にアルファ値を入れる
     ●色差(UとV)は0とする
  という形でエンコードされるようです。
  (後述する「FLV Extract」を使ってみるとよくわかります)

  デコードの際のYUV→RGB変換時に、
     「色情報のVP6映像ストリーム」
     「アルファチャンネルのVP6映像ストリーム」
  の2つを合成して、透明度つきの映像(ARGB32)を再現してるようですね。

  ちなみに、ニコニコ動画に「On2 VP6A」のFLVを投稿しようとすると、
  「エンコードに失敗しました。未対応形式です。」と出て、エラーになります。

 
■「VP6A」は実際にはFourCCとしては使われていない?

  「VP6A」は、ffmpegにおいて、「On2 VP6 with alpha channel」を表す
  コーデックIDとして使われていますが、実際にFourCCとして使われているかというと、
  そうでもないようです。というか、使ってるものが見当たりませんでした。

  ほとんどのソフトは、アルファチャンネルを無視して処理するようです。
  今のところ、「On2 VP6A」をアルファチャンネル付きでうまく扱うには
  On2 Flix Pro付属のDirectShowフィルタを使うのが一番良いようです。

  Hugflashも便利ですが、今のところVP6-Sタイプには対応していないようですね。

  以下に、主なソフトウェアでの「On2 VP6A」のFLVの扱いをまとめてみました。
  (FlashPlayerやFlavieでの再生時はもちろんアルファチャンネルが考慮されます。
   また、その他のAdobe製品(CS4シリーズなど)でもアルファチャンネル付きで
   読み込める気がしますが、使ったことがないのでわかりません。)

主なソフトウェアでの「On2 VP6A」のFLVの扱い
ソフトウェア名「On2 VP6A」の映像ストリームの扱い
FLV Splitter
(MPC-HC 1.3.1249.0)
FourCC「FLV4」としてデコーダーに振り分ける。
(ffdshowでこれをデコードした場合、アルファチャンネルは無視される。)
ffdshow tryouts
(rev.3119)
設定画面を見ると、「VP6F(FLV4)」の対応FourCCの中に
「VP6A」が含まれているが、実際にVP6AというFourCCで
デコーダーに渡してくるソフトを知らないので、
具体的なデコード処理は不明。
ただ、Hugflashでアルファチャンネルつきの変換を行なう場合に、
ffdshowのVP6Aデコーダーを呼び出しているように見えるので、
もしかしたらアルファチャンネル専用ストリームのほうを
デコードするようになっているのかもしれない?
これについてはまだよくわかってません。
On2 Flix Pro v8.545
(On2 Flv Splitter Filter、
On2 Video Decoder Filter)
On2 Flv Splitter Filterは、FourCC「FLV5」でデコーダーに渡す。
On2 Video Decoder Filterは、「FLV5」を受け取ると、色情報と
アルファチャンネル情報を合成し、RGB32またはARGB32で出力する。
Hugflash
(v2.6.4)
VP6-Eタイプであれば、アルファチャンネルつきの
無圧縮ARGB32のAVIに変換可能。
VP6-Sタイプの場合は変換に失敗する。
FLV Extract
(v1.6.0)
「VP6A.flv」というファイルを入力すると、
   VP6A.avi
   VP6A.alpha.avi
という2つのAVIファイルが出力される。
両方ともFourCCは「VP6F」となる。
前者は色情報のVP6Fストリームを抜き出したAVIで、
後者はアルファチャンネル専用のVP6Fストリームを抜き出したAVI。
Aviutlの
FLV File Reader
プラグイン

(v0.04 alpha)
VP6 VFW Codecでデコードを行なわせる。
FourCCは「VP60」「VP61」「VP62」が使われる。
当然ながらアルファチャンネルは無視される。
FFmpeg
こちらのpentium4-19883)
VP6Aについてはデコードのみ対応なので、VP6Aという
FourCCをもった動画ファイルを作ることはできない。
VP6A用に、アルファチャンネルを含むyuva420pという
特殊なYUVの色空間が使われているようですが、
アルファチャンネルを保持したまま別形式にする方法が
わかりませんでした。orz
うまくやればARGB32とかにできるんだろうか・・・。
どなたかわかる方いれば教えて下さい。orz

 
■「On2 VP6 with alpha channel」のアルファチャンネル付きFLVサンプル

  フラッシュバック(株)の「Sorenson Squeeze 5 for Flash Pro」の
  製品紹介ページに、アルファチャンネル付きFLVのサンプル(zip形式)が置かれています。

 
■「FLV Extract」で「On2 VP6A」のFLVから映像を取り出してみた例

  上の表にあるとおり、「FLV Extract」というソフトを使うと、
  「On2 VP6A」のFLVから、色情報の映像ストリームと
  アルファチャンネルの映像ストリームとを別々に取り出すことができます。
  実際に取り出してみた例を以下に示します。
  サンプルに使ったFLVは、ブルーバックの付きの映像をOn2 Flix Proに読み込み、
  On2 Flix Proのキーイング機能でブルーバック部分を透明化してVP6Aにエンコードしたものです。
      Flvextract

  VP6Aが2つのストリームで構成されてるというのがわかりやすいですね。

  ただ、アルファチャンネル専用のストリームは、前述のとおり
     「YUVのYにアルファ値を入れ、U=0、V=0としてエンコードしたもの」
  ですから、見ての通り、なんか緑っぽい映像になります。
  せめて「トラックマット(ルミナンス)」とかで使えるような形なら
  応用もできるのですが、こういう緑の映像じゃそれも無理ですね。
  単に取り出してみただけであって、活用方法は特に無いという・・・。

 
AviutlやNiVEで、VP6AのFLVをアルファチャンネル付きでうまく読み込む方法も書こうと思ったのですが、
長くなってしまったので別エントリで書こうと思います。

|

« さすがニコニコ動画(9)は格が違った(最悪な意味で) | トップページ | DirectShowでFLVを再生するための仕組み等について »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1278146/32019964

この記事へのトラックバック一覧です: FLVの「On2 VP6 with alpha channel」(VP6A)の仕様等について:

« さすがニコニコ動画(9)は格が違った(最悪な意味で) | トップページ | DirectShowでFLVを再生するための仕組み等について »