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日の記事「オーバーレイと上下反転」
●ソース ファイルとして AVI ファイルを使用するとビデオの上下が反転する
レス抜粋 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より優れてるんだぜ!」って言ってるようですが、どうなるのでしょう。
| 固定リンク
この記事へのコメントは終了しました。
コメント