GraphEdit の使い方 (2) - Media Sub Type の確認方法および GraphEdit を使ったファイル コンバータの作成
こんにちははらだんです。前回の GraphEdit の使い方 (1) に引き続き GraphEdit の使い方です。今回は Media Sub Type の確認、フィルタ プロパティの設定と、GraphEdit を使ったファイル コンバートをやってみたいと思います。
目次(前回の続き)
3. Media Sub Type の確認~フィルタ プロパティの設定
-1. proppage.dll の登録
-2. Media Sub Type の確認
-3. フィルタ プロパティ
4. ファイルの変換
-1. フィルタ グラフ作成
3. Media Sub Type の確認~フィルタ プロパティの設定
----------
GraphEdit にてフィルタを右クリックするとポップアップメニューに Filter Properties… とか Pin Properties… という項目があると思います。しかし、選択すると無情にも "The requested property page could not be displayed." と怒られてしまいます。プロパティを表示するためには proppage.dll をレジストリに登録する必要があります。
-1. proppage.dll の登録
----------
Proppage.dll は GraphEdit と同じ Windows SDK に同梱されています。Windows SDK for Windows 2008 の場合には以下のパスにあります。
C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\proppage.dll
コマンドプロンプト( Vista の場合管理者権限)で上記フォルダに移動し、以下のコマンドを実行してレジストリに登録します。
C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\ > regsvr32 proppage.dll
-2. Media Sub Type の確認
----------
以下の例は Vista に同梱のサンプル ビデオ コンテンツ Bear.wmv のグラフより、WMVideo Decoder DMO フィルタの出力ピンのプロパティです。Media Sub Type は NV12 になっています。Video Renderer(VMR9) にはこのフォーマットで出力されています。
ためしに [DirectShow Filters] の [Color Space Converter] をデコーダとレンダラの間に入れてみてレンダラに入る Media Sub Type がどうなるか確認してみると・・・
RGB32 に変わりました。Color Space Converter フィルタはこのように色空間を変換するフィルタです。このグラフの場合ピン接続の際に WMVideo Decoder DMO フィルタが RGB32 の出力に対応しているのでデコーダの出力時点から RGB32 となっています。
-3. フィルタ プロパティ
----------
フィルタを右クリックして Filter properties… を表示すると、プロパティ ページが実装されているフィルタの場合、フィルタの設定ができます。プロパティ ページがまったくないものや入出力ピンのプロパティを表示するだけのものもあります。
VMR9 のプロパティを見るとかなりいろいろ設定できるフィルタになっていることがわかります。Demultiplexer フィルタなどで出力ピンを作成することができるものもあります。
4. ファイルの変換
----------
GraphEdit を使用してファイル形式の変換を行ってみます。Bear.wmv を AVI ファイルに変換してみます。具体的には以下のような変換になります。
変換元:Bear.wmv
Video : WMV3 720*480 24bit
Audio : WMAudio V8 16bit 48kHz Stereo
変換後:TestOut.avi
Video : CRAM 720*480 16bit <--- Microsoft Video 1
Audio : IMA ADPCM 4bit 48kHz Stereo
-1. フィルタ グラフ作成
----------
Bear.wmv を GraphEdit で読み込んだところから始めて、AVI への出力までフィルタを差し替えていきます。以下の手順でフィルタを読み込んではピン接続を繰り返し図のグラフを作成します。
1) [Audio Compressors] より [IMA ADPCM] フィルタを追加
2) [Video Compressors] より [Microsoft Video 1] フィルタを追加
3) [DirectShow Filters] より [AVI Mux] フィルタを追加
4) [DirectShow Filters] より [File Writer] フィルタを追加
5) 上記フィルタの追加の際にファイル名を聞かれるので TestOut.avi とする
使わなくなった [Video Renderer] と [Default DirectSound Device] は削除しても大丈夫です。フィルタを追加したら図のようにピン接続します。デコーダにて一度非圧縮のデータとなったストリームをエンコーダ フィルタにより再度別の形式で圧縮し AVI Mux フィルタにてビデオと音声をミキシングし、最後にファイル ライタ フィルタでファイルに出力します。
ここで、エンコーダ フィルタを使用せずに AVI Mux にデータを送ると非圧縮の AVI ファイルが出来上がります。非常にサイズの大きな AVI ファイルとなります。
再生アイコンを押すとエンコードが始まります。これだけで WMV -> AVI 変換ツールになります。
お疲れ様でした。次回は DirectShow アプリケーション開発時のデバッグシーンで GraphEdit を使う例を紹介できたらと思います。
今日は MCP の試験を受けに行って落ちてしまったはらだん~