DirectShowでWebMエンコード

chakemiです。最近、首を寝違えてばかりで首がまわりません。。。

DirectShowネタが続いたので、今日はDirectShowでWebMファイルをエンコードしてみようと思います。

まず、TheWebMProjectよりDirectShowフィルタをダウンロード、インストールします。

どうやらwebmdshow-0.9.12.0-20101216.zip が最新のようです。 パッケージの中には「makewebm.exe」って簡単なエンコーダが付属しますが、DirectShowの勉強なので使いません。

前回も説明しましたが、DirectShowは「フィルタグラフ」を構築し動作させます。 フィルタグラフを簡単に構築するためにWindowsSDKには「graphedt.exe」ってものがBinディレクトリに用意されています。

今回はもっと使いやすいオープンソースの「MONOGRAM GraphStudio」ってものを使いました。

エンコード素材にはフリー素材をこちらから拝借しました。

では、GraphStudioを使って実際に構築したフィルタグラフを見てみます。

フィルタグラフを構築するにはメニューの[Graph]から[Insert Filter]を選択し、 最低限必要なフィルタをグラフに並べます。

1
2
3
4
ソースフィルタに「File Source(Async)」
変換フィルタに「WebM VP8 Encoder Filter」
WebMフォーマット形式にするために「WebM Muxer Filter」
ファイルに保存するために「File Writer」

これらをストリーム順につないでいきます。 フィルタグラフマネージャーは「インテリジェント接続」という仕組みを使ってフィルタとフィルタを繋ぐのに必要なフィルタを自動的にフィルタグラフに追加してくれます。

これによって自分では追加しなくても、aviファイルを映像と音声に分ける 「AVI Splitter」とDVコーデックをデコードするための「DV Video Decoder」が追加されました。

すべての接続が完了したら、「Start」ボタンを押してエンコード開始。

最初、エンコードにかなり時間が掛かりましたが、「WebM VP8 Encoder Filter」のプロパティのThread Countをいじったら多少速くなった気がしますが、 この辺はもうちょっと調査しないと分かりません。

Comments