« FLV1(Sorenson H.263)の仕様等について | トップページ | VP6-EとVP62、VP6-SとVP60って関係あるの??? »

2009年10月27日 (火)

FLV4(On2 VP6)の仕様や、VP6-E、VP6-Sプロファイル等について

なんだかFLVのブログになりつつありますが、一気にまとめておきたいので今日もFLVの記事。
例によって間違ってるところがあったらツッコミをお願いします。
今回は、FLV4(On2 VP6、VP6F)の話です。

 
■FLV4(On2 VP6)の仕様

  FlashPlayer 8 から、FLVの新たな映像コーデックとして、On2 Technology社の
  「On2 VP6」コーデックが採用されました。これにより、それまで使われていた
  「Sorenson H.263」に比べて低ビットレートかつ高画質で映像を扱えるようになりました。
  また、VP6コーデックを利用して、アルファチャンネルつきの映像を扱えるようにした
  「On2 VP6 with alpha channel」にも同時に対応しています。
  (VP6 with alpha channelについてはまた別のエントリで書く予定です。)

  「Sorenson H.263」と「On2 VP6」の映像の比較などは、On2 Technology社のVP6のページにある、
     「WHITE PAPER On2 VP6 for Flash 8 Video」(PDF)
  に載っています。
  また、ブロードアース(株)のサイトでは実際の比較サンプル映像を見ることができます。
  (このサイトには上記WHITE PAPERを和訳したPDFも置かれています。)

  FLVのVP6映像ストリームは確かにVP6コーデックでエンコードされた映像なのですが、
  FLVからVP6の映像ストリームを取り出してみると、映像が上下反転しています
  ニコニコ動画まとめWikiにある「aviutlを使ったVP6 2pass」のFLVエンコード方法でも、
  エンコード時にわざわざ映像を上下反転させてからエンコードしていますね。

  つまり、FLVのVP6映像ストリームに対して、既存のVP6のFourCCである
  「VP62」などをそのまま使ってしまうと、上下が反転したまま再生されてしまいます
  そんなわけで、上下反転を解消して再生するために、FLVのVP6映像ストリームにも
  専用のFourCCをつける必要があり、その結果「FLV4」「VP6F」といった
  FourCCが使われるようになったものと思われます。

  なお、FlashPlayer 9.0.115.0から、HD(High Definition)映像用に
  VP6コーデックがチューニングされています。HD用にチューニングされたVP6は
     「VP6-S コーデックプロファイル」
  と呼ばれており、これにともない従来のVP6は「VP6-E」と呼ばれるようになっています。
  (詳細は後述します)

  また、VP6コーデックで使われている要素技術については、
      「The On2 VP6 codec: how it works (DSP DesignLine)
  の記事で詳細に解説されています。
  ただ、英語なうえに内容が難しくて、自分にはよくわかりませんでした。 \(^o^)/

  ちなみにSWF仕様書v10(PDF)のp.247には、VP6の色情報の保持形式が
  YUV4:2:2と書いてますが、WikipediaのVP6の項目にもあるように
  YUV4:2:0(YV12)が正しいようですね。

 
■FLV4の映像ストリームが上下反転している理由の推測

  自分もよくわかっていませんが、おそらくVP6コーデックの仕様が絡んでいるのかなと。

  試しにAviutlでVP6 VFW Codecを使って実験をしてみます。

    1.何か適当な映像を、VP62でAVIにエンコード

    2.Aviutlのコーデックの設定で、VP62の「YUY2で展開する」にチェックを入れる

    3.Aviutlの入力プラグイン優先度の設定で、「AVI/AVI2 File Reader」を一番上にし、
      Aviutlを再起動する

    4.1でエンコードしたVP62のAVIを読み込む

  こうすると、4で読み込んだ映像は、上下が反転してしまっています。
  つまり、
     「VP6 VFW Codecは、YUY2展開で読み込むと上下が反転してしまう」(YV12でも同様)
  という変な仕様をもっていることになります。
  「YUY2で展開する」のチェックを外してRGB読み込みをすると上下は正しく表示されます。

  詳細は自分もよくわかってませんが、YUVフォーマットをめぐる仕様の混乱が
  原因になっているのではないかと思います。以下の記事などが参考になります。

     ●まるも氏の2004年6月3日の記事「オーバーレイと上下反転」

     ●BITMAPINFOHEADER 構造体

     ●ソース ファイルとして AVI ファイルを使用するとビデオの上下が反転する

     ●【On2】VP6は最強か?【VP6】のレス345

レス抜粋
 VP62デコーダは、正しくないメディアタイプを申告する。
 具体的には、画像の高さを負数で報告するが、これはYUV
 フォーマットでは不正(RGBフォーマットなら上から下へ
 マイナス方向に座標を張ることも可能)。

 
  このVP6の仕様が影響して、FLVではあらかじめ上下反転したVP6映像ストリームを
  使うことになったのかなと。原因が本当にこれなのかはわかりませんが、
  現象から考えるとやっぱりこれが原因なんですかね???

 
■VP6-Sプロファイルについて

  前述のとおり、FlashPlayer 9.0.115.0から、
     「HD映像を低データレートかつ低負荷で再生する
  ことを目的として、VP6コーデックがチューニングされています
  HD映像用のVP6技術は
     「 VP6-S コーデックプロファイル」
  と呼ばれ、従来のVP6は「VP6-E」と呼ばれるようになっています。

  VP6-Sは、「VP6-Eよりも高品質なエンコードを行なう」というものではありません
  Adobe社のFlash Media Serverのページにある、
     「Adobe Flash Media Server 3.5 テクニカルホワイトペーパー」(PDF)
  のp.26では、VP6-Sについて、以下のように説明されています。

On2 VP6-S のサポート
 Flash Media Server 3.5 は、Flash Player 9,0,115,0 で使用できる
 新しい VP6-S コーデックプロファイルのストリーミングをサポートしています。
 VP6-S では、高解像度の全画面ビデオのエンコードやデコードが
 大幅に簡略化されるので、プロセッサ速度が限られた市販のコンピュータに
 対しても高画質ビデオをストリーミングしてスムーズに再生することができます。
 このような比較的低速なコンピュータに高画質ビデオを 500 Kbps 以上で
 配信する場合は、VP6-S を使用することをお勧めします。

 
  また、「Producing VP6 Video」の記事の2ページ目にある比較画像を見てもわかる通り、
  エンコード品質自体は、VP6-SよりもVP6-Eのほうが高品質です。

  VP6-Sの技術の詳細は、上で挙げた
     「The On2 VP6 codec: how it works (DSP DesignLine)
  にも書かれていますが、大雑把にまとめるとVP6-Sとは以下のような内容のようです。

     ●VP6-Sの目的は、「HD映像を低データレートかつ低負荷で再生すること

     ●VP6には高品質にエンコードするためのいくつかの要素技術があるが、
       その中には複雑な処理を行なう分、デコード負荷が上がってしまうような技術もある。
       VP6-Sでは、エンコード時にそれらの技術を一部制限するような
       チューニングを行なうことで、デコード負荷を軽減している。

     ●つまりVP6-Sは新しいVP6コーデックというわけではなく、
       「従来のVP6のエンコード処理をチューニングしたもの」である。

     ●このチューニングによって、VP6-SはVP6-Eと比べるとある程度の品質劣化が発生するが、
       デコード負荷軽減とのトレードオフとして、品質劣化はある程度許容する。

     ●VP6-Sは、FlashPlayer 9.0.115.0 から実装されたものだが、
       VP6-Eとのデコード互換性があるので、FlashPlayer 8 でもデコード可能。
       (もしかしたらFlashPlayer 9.0.115.0以降ではHD再生用に
        VP6デコーダーのチューニングも行なわれているかもしれませんが、
        そのへんは調べてもわかりませんでした。)

     ●新しいコーデックというわけではないので、VP6-EでもVP6-Sでも、
       FLVのCodecIDは、従来と同じ「4」(On2 VP6)のまま。

     ●VP6-SとVP6-Eの使い分けの目安としては、
         ◎対象の再生環境が比較的低スペック
         ◎画面サイズがSDサイズ以上
         ◎ビットレートが500kbps以上
       といった条件の場合は「VP6-S」を利用し、
       それ以外は品質を保つためになるべく「VP6-E」を利用するといった感じ。

  エンコード処理の内容をチューニングしたものですから、ネットに出回っている
  VP6 VFW Codecでは、VP6-Sでのエンコードは不可能なようです。
  VP6-Sでのエンコードを行なうためには、On2 Flix Proなど、
  VP6-Sに対応した製品を使う必要があります。

     (2009.10.30追記)
       VP6-SをVP60と解釈している例があったので別エントリに書いてみました。→こちらの記事
       ただし、これをもってただちに
          「VP6 VFW CodecでもVP6-Sエンコード可能」
       と言えるかというと疑問ですが・・・。

  また、On2 Technology社のこちらのページを見ると、
  VP6のエンコーダー自体も改良されていってるようですね。

  On2 Technology社のVP6のページに置いてある
     「WHITE PAPER Flash Video Codec Comparison」(PDF)
  では、FLVで使われている各コーデック(Sorenson H.263、VP6-E、VP6-E、H.264)を
  色々な面から比較した内容が記述されています。

  VP6-SでエンコードされたFLVのサンプルは、On2 Technology社の
  VP6-Sサンプルのページにいくつか置かれています。

  ちなみに、Gabest氏によって開発されたGuliverkli2プロジェクト
     「FLV Splitter 1.0.0.5 (FLVSplitter_20090428.zip)」
  に付属する
     「FLV4 Video Decoder」
  は、VP6-SでエンコードされたFLV4のデコードができないようです。
  (スプリッタからの入力は受け付けて出力もするが、画面は真っ黒のまま。
   どうやらFLV4 Video Decoderは、映像ストリームがVP62であることを前提として
   デコードしているようです。VP60やVP61のストリームだと真っ黒になります。)
  いくらVP6-Eとの互換性があるといっても、デコーダーの実装方法によるでしょうから、
  On2社以外が開発したデコーダーでデコードできないのは仕方ないでしょうね。
  ただ、ffdshow(ffdshow_beta6_rev2527_20081219.exe)でのデコードは問題ないようです。

  (2009.10.31追記)
    Hugflash v2.6.4でも、VP6-Sのストリームデータはうまく抽出できないようです。

 
■「FLV4」「VP6F」の命名経緯についての推測

  FLVのVP6については、「FLV4」「VP6F」というFourCCが使われます。

  「FLV4」の由来は、おそらくFLVの仕様書で定義されている
  「On2 VP6」のCodecID(4)だと思われます。

  「VP6F」については、
     「Flip(上下反転)したVP6」
  という意味か、もしくは
     「Flash(FLV)のVP6」
  という意味だと思いますが、どちらなのかはよくわかりません。

  まあこのへんを突き詰めても(ry

 
■参考: GoogleがOn2 Technology社を買収

  On2 Technology社は、2009年8月にGoogleによる買収に合意。
  年内に買収作業完了予定となっているようです。

     ●Google、賢い買物―VP8ビデオ圧縮技術のOn2を$106Mで

     ●Google、VPコーデックのOn2を買収、HTML5動画論争にも影響か

  これらの記事に書かれているように、On2 Technology社のコーデック技術は、
  Googleによって今後HTML5やYoutubeで採用されていくかもしれませんね。
  「VP8はH.264より優れてるんだぜ!」って言ってるようですが、どうなるのでしょう。

|

« FLV1(Sorenson H.263)の仕様等について | トップページ | VP6-EとVP62、VP6-SとVP60って関係あるの??? »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: FLV4(On2 VP6)の仕様や、VP6-E、VP6-Sプロファイル等について:

« FLV1(Sorenson H.263)の仕様等について | トップページ | VP6-EとVP62、VP6-SとVP60って関係あるの??? »