次の方法で共有


H.264 ビデオ エンコーダー

Microsoft Media Foundation H.264 ビデオ エンコーダーは、次の H.264 プロファイルをサポートする Media Foundation 変換 です。

  • ベースライン プロファイル
  • メイン プロファイル
  • 高プロファイル (Windows 8が必要)

H.264 ビデオ エンコーダーは、次のインターフェイスを公開します。

入力の種類

入力メディアの種類には、次のいずれかのサブタイプが必要です。

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

これらのサブタイプの詳細については、「 ビデオ サブタイプ GUID」を参照してください。

出力の種類は、入力の種類の前に設定する必要があります。 出力の種類が設定されるまで、エンコーダーの IMFTransform::SetInputType メソッドは MF_E_TRANSFORM_TYPE_NOT_SETを返します。

出力の種類

エンコーダーでは、1 つの出力サブタイプがサポートされています。

  • MFVideoFormat_H264

出力メディアの種類に次の属性を設定します。

属性 説明
MF_MT_MAJOR_TYPE メジャー型。 MFMediaType_Videoする必要があります。
MF_MT_SUBTYPE ビデオ サブタイプ。 MFVideoFormat_H264する必要があります。
MF_MT_AVG_BITRATE エンコードされたビット レートの平均 (1 秒あたりのビット数)。 0 より大きくなければなりません。
MF_MT_FRAME_RATE フレーム レート。
MF_MT_FRAME_SIZE フレーム サイズ。
MF_MT_INTERLACE_MODE インターレース モード。
MF_MT_MPEG2_PROFILE H.264 エンコード プロファイル。
サポートされる値は
  • eAVEncH264VProfile_Base (既定値)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (Windows 8が必要)
MF_MT_MPEG2_LEVEL 省略可能。 H.264 エンコード レベルを指定します。
既定値は –1 で、エンコーダーがエンコード レベルを選択することを示します。
メディアの種類にレベルを設定し、エンコーダーがレベルを選択できるようにしないことをお勧めします。 エンコーダーは、形式の制約とビデオの特性を考慮して、特定のビデオ ストリームの適切なレベルを派生させることができます。 プロファイル制約とレベル制約の詳細については、ITU-T H.264 の付録 A を参照してください。
MF_MT_PIXEL_ASPECT_RATIO 省略可能。 ピクセル縦横比を指定します。 既定値は 1:1 です。

 

出力の種類が設定されると、ビデオ エンコーダーは MF_MT_MPEG_SEQUENCE_HEADER 属性を追加して型を更新します。 この属性にはシーケンス ヘッダーが含まれています。

コーデックのプロパティ

H.264 エンコーダーは、エンコード パラメーターを設定するための ICodecAPI インターフェイスを実装します。 次のプロパティがサポートされています。

HCK エンコーダー認定のコーデック要件については、以下の 「認定ハードウェア エンコーダー 」セクションを参照してください。

Windows 7 では、次のプロパティがサポートされています。

プロパティ Description
CODECAPI_AVEncCommonRateControlMode レート制御モードを設定します。 「解説」を参照してください。 既定のモードは、制約のない可変ビット レート (VBR) です。
CODECAPI_AVEncCommonQuality 品質レベルを設定します。 このプロパティは、レート制御モードが品質ベースの VBR (eAVEncCommonRateControlMode_Quality) である場合に適用されます。 有効な範囲は 1 から 100 です。 既定値は 70 です。
このパラメーターを設定するには、 IMFTransform::SetOutputType を呼び出す前に プロパティを設定します。
Windows 7 でこのパラメーターを設定するには、 IMFTransform::SetOutputType を呼び出す前に プロパティを設定します。 エンコーダーは、出力の種類が設定された後の変更を無視します。
Windows 8では、このプロパティはエンコード時にいつでも設定できます。 変更は、次の入力フレームから適用されます。
内部的には、エンコーダーはこのプロパティを AVEncVideoEncodeQP 値に変換します。

 

次のプロパティにはWindows 8が必要です。

プロパティ Description
CODECAPI_AVEncAdaptiveMode アダプティブ エンコード モードを設定します。 H.264 エンコーダーは、Windows 8で次のモードをサポートしています。
  • eAVEncAdaptiveMode_None。 アダプティブ エンコードなし。 (既定値。)
  • eAVEncAdaptiveMode_FrameRate。 フレーム レートをアダプティブに変更します。

CODECAPI_AVEncCommonBufferSize 定数ビット レート (CBR) エンコードのバッファー サイズをバイト単位で設定します。
有効な範囲は [1 ... です。2 ²–1]。
Windows 8が必要です。
CODECAPI_AVEncCommonMaxBitRate 制約付き VBR エンコードの場合、"漏れバケット" がドレインされる速度をビット/秒で指定します。 このプロパティは、レート制御モードが eAVEncCommonRateControlMode_PeakConstrainedVBR場合に適用されます。
有効な範囲は [1 ... です。2 ²–1]。
CODECAPI_AVEncCommonMeanBitRate エンコードされたビット ストリームの平均ビット レートを 1 秒あたりのビット数で設定します。 レート制御モードが eAVEncCommonRateControlMode_Quality場合、このプロパティは無視されます。
有効な範囲は [1 ... です。2 ²–1]。
CBR モードと制約のない VBR モードでは、平均ビット レートによってファイルの最終サイズが決まります。 CBR モードでは、平均ビット レートは、圧縮ビットが "漏れバケット" からドレインされるレートでもあります。(詳細については、「 リークバケット バッファー モデル」を参照してください)。
Windows 7 では、平均ビット レートは、メディアの種類の MF_MT_AVG_BITRATE 属性によって指定されます。
Windows 8では、MF_MT_AVG_BITRATE属性または CODECAPI_AVEncCommonMeanBitRateプロパティを使用して、平均ビット レートを設定できます。 両方が設定されている場合は、CODECAPI_AVEncCommonMeanBitRateオーバーライドされます。 Windows 8では、エンコード中の平均ビットレートを設定できます。 ビット レートが変更された場合、エンコーダーはアダプティブ エンコードを使用します。
CODECAPI_AVEncCommonQualityVsSpeed 品質/速度のトレードオフを設定します。 有効範囲:
  • 0 から 33: 複雑さが少ない
  • 34 から 66: 中程度の複雑さ (既定値)
  • 67-100: 複雑さが高い

この値は、エンコーダーがモーション補正などのさまざまなエンコード操作を実行する方法に影響します。 複雑度レベルが高いと、エンコーダーの実行速度は遅くなりますが、同じビット レートで品質が向上します。
CODECAPI_AVEncH264CABACEnable H.264 エントロピ コーディングの CABAC (コンテキスト 適応型バイナリ算術コーディング) を有効または無効にします。 既定値は VARIANT_FALSE です。
CABAC はベースライン プロファイルには使用されません。
CODECAPI_AVEncH264SPSID H.264 ビットストリームの SPS NAL ユニットで seq_parameter_set_id の値を設定します。
CODECAPI_AVEncMPVDefaultBPictureCount 出力ビットストリーム内の連続する B フレームの最大数を設定します。 有効な値は次のとおりです。
  • 0: B フレームを使用しないでください (既定値)。
  • 1: 1 つの B フレームを使用します。
  • 2: 2 つの B フレームを使用します。
このパラメーターを設定するには、 IMFTransform::SetOutputType を呼び出す前に プロパティを設定します。
ベースライン プロファイルの場合、B フレームの数は常に 0 です。 エンコーダーは 0 以外の値をオーバーライドします。
他の H.264 プロファイルの場合、このプロパティが 0 以外の場合、エンコード パターンは IBBPBBP で、連続する B フレームの最大数は CODECAPI_AVEncMPVDefaultBPictureCountと等しくなります。
CODECAPI_AVEncMPVGOPSize 1 つの GOP ヘッダーから次の GOP ヘッダーまでの画像の数を設定します(先頭のアンカーを含みますが、次のアンカーは含まれません)。
有効な範囲は [0 ... です。2 ²–1]。 0 の場合、エンコーダーは GOP サイズを選択します。 既定値はゼロです。
CODECAPI_AVEncNumWorkerThreads エンコーダーによって使用されるワーカー スレッドの数を設定します。
有効な範囲は 0 から 16 です。 0 の場合、エンコーダーはスレッドの数を選択します。
CODECAPI_AVEncVideoContentType ビデオ コンテンツの種類を示します。
CODECAPI_AVEncVideoEncodeQP 有効な範囲: 16 から 51。 既定値は 24 です。
このプロパティは、レート制御モードがeAVEncCommonRateControlMode_Qualityされている場合 適用されます。
このプロパティは、 AVEncCommonQuality と同じエンコード設定を構成します。 ただし、 AVEncVideoEncodeQP を使用すると、アプリケーションで QP の値を直接指定できます。 両方のプロパティが設定されている場合、AVEncVideoEncodeQP はオーバーライドされます。
既定値の 24 は、 AVEncCommonQuality 設定の既定値の 70 に対応しています。
CODECAPI_AVEncVideoForceKeyFrame エンコーダーで次のフレームをキー フレームとして強制的にコーディングします。
CODECAPI_AVEncVideoMinQP 有効な範囲: 0 から 51。 既定値は 0 です。
このプロパティは、すべてのレート制御モードに適用されます。 エンコーダーは、 CODECAPI_AVEncVideoMinQP プロパティで指定された値より小さい QP 値を生成しないでください。
CODECAPI_AVLowLatencyMode 待機時間の短いモードを有効または無効にします。 「解説」セクションの「マルチスレッド」を参照してください。

 

解説

エンコーダーでは、次のレート制御モードがサポートされています。

モード 定数 説明
定数ビット レート (CBR) eAVEncCommonRateControlMode_CBR エンコーダーは、"漏れバケット" モデルを使用して、一定のビット レートを実現しようとします。 ターゲット ビット レートは 、CODECAPI_AVEncCommonMeanBitRate プロパティによって指定されます。
Windows 8が必要です。
制約付き可変ビット レート (VBR) eAVEncCommonRateControlMode_PeakConstrainedVBR エンコーダーは、ピーク ビット レートの "漏れバケット" モデルを使用します。 漏れバケットのドレインレートは、 CODECAPI_AVEncCommonMaxBitRate プロパティによって指定されます。
Windows 8が必要です。
品質ベースの可変ビットレート (VBR) eAVEncCommonRateControlMode_Quality エンコーダーは、 AVEncCommonQuality プロパティによって指定された一定の品質レベルを実現しようとします。
制約のない VBR eAVEncCommonRateControlMode_UnconstrainedVBR エンコーダーは、出力メディアの種類の MF_MT_AVG_BITRATE 属性によって指定されたターゲット ビットレートの達成を試みます。 これは既定のモードです。

 

CBR モードと制約付き VBR モードでは、Windows 8が必要です。

Windows 8では、エンコーダーは出力サンプルに次の属性を設定します。

Note

以前のバージョンのドキュメントでは、エンコーダーが Windows Server 2008 R2 でサポートされていることが誤って記載されています。

 

マルチスレッド

Windows 8では、エンコーダーは次の 2 つのエンコード モードをサポートしています。

  • スライス エンコード。 このモードでは、スライスは並列でエンコードされます。 各スライスは、異なるスレッドでエンコードされます。 1 つの画像が並列でエンコードされるため、このモードの待機時間は短くなります。 ただし、スライスの数は入力画像内のマクロブロック行の数で囲まれているため、この方法はコアの数が増えるにつれてスケーリングされません。
  • マルチフレーム エンコード。 このモードでは、エンコーダーは複数の入力フレームを受け入れ、並列でエンコードします。 このモードはマルチコア環境ではスケーリングが向上しますが、待機時間が長くなります。

待機時間を最小限に抑えるために、エンコーダーは既定でスライス エンコードに設定されます。 マルチフレーム エンコードを有効にするには、 CODECAPI_AVLowLatencyMode プロパティを VARIANT_FALSE に設定します。

エンコーダーで使用されるワーカー スレッドの数を設定するには、 CODECAPI_AVEncNumWorkerThreads プロパティを設定します。

Windows 7 では、エンコーダーは常にスライス エンコードを使用します。

認定ハードウェア エンコーダー

認定ハードウェア エンコーダーが存在する場合は、通常、Media Foundation 関連のシナリオで受信トレイ システム エンコーダーの代わりに使用されます。 認定エンコーダーは、特定の ICodecAPI プロパティセットをサポートするために必要であり、必要に応じて別のプロパティ セットをサポートできます。 認定プロセスでは、必要なプロパティが適切にサポートされていること、および省略可能なプロパティがサポートされている場合は、そのプロパティも適切にサポートされていることを保証する必要があります。

HCK エンコーダー認定に合格するエンコーダーに必要な ICodecAPI プロパティと省略可能な ICodecAPI プロパティのセットを次に示します。

次のWindows 8およびWindows 8.1 ICodecAPI プロパティが必要です。

次のWindows 8.1 ICodecAPI プロパティは省略可能ですが、サポートされている場合は HCK でテストされます。

次のWindows 8およびWindows 8.1 ICodecAPI プロパティは省略可能ですが、サポートされている場合は HCK でテストされます。

次の ICodecAPI プロパティは省略可能です。 HCK ではテストされません。

要件

要件
サポートされている最小のクライアント
Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー
サポートなし
[DLL]
Mfh264enc.dll

関連項目

Codec オブジェクト

Media Foundation での MPEG-4 サポート

メディア ファンデーションでサポートされるメディア形式

ビデオ メディアの種類