ビデオ エンコーディングの構成 (Microsoft Media Foundation)
ビデオ エンコーダーを構成するには、次の手順を実行します。
IPropertyBag::Write を使用して、エンコーダー DMO のプロパティを設定します。 次のリストは、CBR ビデオ ストリームをエンコードするために必要なプロパティの最小セットをまとめたものです (これらすべての値には、使用できるデフォルトがあります)。
- MFPKEY_VIDEOWINDOW プロパティは、ストリームに使用するバッファ ウィンドウを指定します。 バッファ ウィンドウの設定とそれがコンテンツに与える影響の詳細については、「エンコード方法」を参照してください。 デフォルトのバッファ ウィンドウは 3 秒で、多くのシナリオに適しています。
- ビデオの複雑さは、エンコードされたコンテンツの品質とエンコードに必要な時間との間のトレードオフを決定するために設定されます。 値を設定しない場合は、デフォルト値が使用されます。 ただし、 IWMCodecProps::GetCodecProp を呼び出して g_wszWMVCComplexityExLive、g_wszWMVCComplexityExOffline、および g_wszWMVCComplexityExMax を取得することにより、特定のコーデックの推奨モードを見つけることができます。 次に、 MFPKEY_COMPLEXITYEX を 0 から報告された最大の複雑さまでの値に設定できます。
- MFPKEY_CRISP は、ビデオの滑らかさとエンコードされたフレームの画質の相対的な重要度を指定します。 ほとんどの場合、デフォルト値で問題なく動作します。
- ASF 以外のコンテナーに保存されているビデオ コンテンツの場合、 MFPKEY_ASFOVERHEADPERFRAME プロパティを 0 に設定する必要があります。 これはデフォルト値ではありません。
VBR ストリームの設定については、 VBR エンコーディングの使用を参照してください。
入力タイプに合わせて DMO_MEDIA_TYPE 構造を構成するか、Media Foundation SDK を使用している場合は、 MFInitMediaTypeFromVideoInfoHeader 関数を使用します。 圧縮されていない入力コンテンツを記述する VIDEOINFOHEADER 構造を使用します。 コーデックはビデオのサイズを変更したり、色空間を変換したりしません。
IMediaObject::SetInputType または IMFTransform::SetInputTypeを使用して入力タイプを設定します。
エンコーダの出力タイプを設定します。 入力タイプが設定されると、エンコーダーは、 VIDEOINFOHEADER 構造体の dwBitrate メンバー、または IMFMediaType インターフェイスの MF_MT_AVG_BITRATE 属性を除いて、完全な出力タイプを列挙します。 入力タイプを設定する前に出力タイプを取得した場合、配信される DMO_MEDIA_TYPE 構造には、関連付けられた VIDEOINFOHEADER が含まれません。
コーデックのプライベート データを取得し、それを DMO_MEDIA_TYPE 構造体または IMFMediaType に渡す VIDEOINFOHEADER 構造体に追加します。 詳細については、「ビデオ コーデックのプライベート データの使用」を参照してください。
IMediaObject::SetOutputType または IMFTransform::SetOutputType メソッドを呼び出して出力タイプを設定します。 pbFormat メンバーで参照される完成した VIDEOINFOHEADER 構造 (追加されたプライベート データを含む) を含む DMO_MEDIA_TYPE 構造を渡すか、 MFInitMediaTypeFromVideoInfoHeader を呼び出して IMFMediaType を構築します。
Note
ビデオ エンコーダー オブジェクトは 2 つの出力をサポートします。 2 番目の出力はエンコーダーの「ポストビュー」用です。 デコーダーから配信される非圧縮サンプルをそのまま配信します。 これにより、ストリーム全体が処理されるまで待たずに、エンコードの品質を監視できます。 この出力はオプションです。 使用したい場合は、エンコーダー入力タイプを設定するのと同じ手順に従ってタイプを構成します。