Share via


(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::SetOutputTypeIMFTransform::SetOutputType 方法來設定輸出類型。 透過已完成的 VIDEOINFOHEADER結構傳遞DMO_MEDIA_TYPE結構, (包括pbFormat成員中所參考的附加私人) 資料,或呼叫MFInitMediaTypeFromVideoInfoHeader來建構IMFMediaType

注意

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

 

使用影片