設定視訊編碼 (Microsoft Media Foundation)

若要設定視訊編碼器,請執行下列步驟:

  1. 使用 IPropertyBag::Write 在編碼器 DMO 上設定任何屬性。 下列清單摘要說明編碼 CBR 視訊串流所需的最小屬性集(所有這些值都有可使用的預設值):

    • MFPKEY_VIDEOWINDOW 屬性會指定要用於數據流的緩衝區視窗。 如需緩衝區窗口設定及其影響內容方式的詳細資訊,請參閱 編碼方法。 默認緩衝區視窗為三秒,適用於許多案例。
    • 視訊複雜度設定為決定編碼內容質量與編碼所需時間之間的取捨。 如果您未設定值,則會使用預設值。 不過,您可以呼叫 IWMCodecProps::GetCodecProp 來擷取g_wszWMVCComplexityExLive、g_wszWMVCComplexityExOffline和g_wszWMVCComplexityExMax,以尋找特定編解碼器的建議模式。 然後,您可以將MFPKEY_COMPLEXITYEX設定為介於 0 與報告的最大複雜度之間的值。
    • MFPKEY_CRISP指定視訊平滑度和編碼畫面影像質量的相對重要性。 在大部分情況下,預設值會正常運作。
    • 對於儲存在 ASF 以外的容器中的視訊內容, MFPKEY_ASFOVERHEADPERFRAME 屬性必須設定為 0。 這不是預設值。

    如需設定 VBR 數據流的相關信息,請參閱 使用 VBR 編碼

  2. 設定輸入類型的DMO_MEDIA_TYPE結構,或者如果您使用 Media Foundation SDK,請使用 MFInitMediaTypeFromVideoInfoHeader 函式。 使用描述未壓縮輸入內容的 VIDEOINFOHEADER 結構。 編解碼器不會調整視訊大小或轉換色彩空間。

  3. 使用 IMediaObject::SetInputTypeIMFTransform::SetInputType 設定輸入類型。

  4. 設定編碼器的輸出類型。 設定輸入類型之後,編碼器會列舉除了VIDEOINFOHEADER結構的 dwBitrate 成員或IMFMediaType介面的 MF_MT_AVG_BITRATE 屬性以外,已完成的輸出類型。 如果您在設定輸入類型之前擷取輸出類型,傳遞 DMO_MEDIA_TYPE 結構將不會有相關聯的 VIDEOINFOHEADER

  5. 擷取編解碼器私用數據,並將其附加至您傳遞給DMO_MEDIA_TYPE結構或IMFMediaTypeVIDEOINFOHEADER結構。 如需詳細資訊,請參閱 使用影片編解碼器私用數據

  6. 呼叫 IMediaObject::SetOutputType 或 IMFTransform::SetOutputType 方法來設定輸出類型。 使用 pbFormat 成員中參考的 VIDEOINFOHEADER 結構傳遞DMO_MEDIA_TYPE結構,或呼叫 MFInitMediaTypeFromVideoInfoHeader 來建構 IMFMediaType。

注意

視訊編碼器物件支援兩個輸出。 第二個輸出適用於編碼器「張貼檢視」。 它會傳遞未壓縮的樣本,因為它們會從譯碼器傳遞。 這可讓您監視編碼品質,而不需要等到處理整個數據流為止。 此輸出是選擇性的。 如果您想要使用它,請遵循用來設定編碼器輸入類型的相同程式來設定其類型。

使用影片