私はこれに困惑しています。誰かが私を正しい方向に向けてくれることを本当に望んでいます。
現在、Windows Mobile でビデオをキャプチャし、WMV 9 DMO (CLSID_CWMV9EncMediaObject) を使用してエンコードしています。これで十分に機能しますが、出力ビデオのビットレートが高すぎるため、ビデオ ファイルが大きすぎて私のニーズには対応できません。
最終的に、私の目標は、Microsoft のカメラ キャプチャ ダイアログが C++ コードから「メッセージング」品質モード (64kbps) で出力するビデオ設定を模倣することです。 現在、私のコードは 352kbps のビットレートで WMV ファイルを出力しています。
WMV9 DMO でキャプチャ ビットレートを指定する唯一の例は、これでした。そのコードのアイデアは、基本的にプロパティバッグを使用してビットレートを DMO のプロパティに書き込むことでした。
更新: Windows モバイルでは、ビットレートに相当すると思われる最も近いコーデック プロパティは "g_wszWMVCVBRQuality" です。このプロパティに関するMicrosoft のドキュメントは、私にとって非常に紛らわしいものです。基本的には、数値が高いほど品質が高くなると言っているようですが、各数値の詳細についてはまったく説明されていません。WMV9 DMO のプロパティバッグを介してこのプロパティを「1」などの値に設定しようとすると、-2147467259 (不明) エラーが発生します。
要約すると、Windows モバイル プラットフォームで directshow (wmv9) を介してキャプチャされたビデオのビットレート/品質を指定するための基本的な戦略は何ですか? 次の方法を聞いた(または疑問に思った):
- プロパティバッグを使用して、ビットレート/品質に対応するエンコーダ DMO のプロパティを変更します (現在失敗しています)。
- 独自のカスタム トランスコーダ/エンコーダを作成して指定します。WMV エンコーダーは十分に機能するため、これは必要ないように思われます。ビットレートが高すぎるだけです。
- VIDEOINFOHEADER にはビットレート プロパティがありますが、ここで新しい設定を指定しても、実際のエンコード プロセスを変更することにはならないのではないかと思います。これは、エンコード後までファイル属性が有効になるとは思わないからです。
助言がありますか?
PS: 特定のソース コードを投稿したいと思いますが、この時点では、これを行う方法について非常に苦労しているため、役立つ以上に混乱する可能性があります。現時点では、一般的な戦略を検証しようとしています。
ありがとう!