共用方式為


交錯式視訊編碼(Microsoft Media Foundation)

要與計算機搭配使用的視訊數據通常 漸進式,這表示每個畫面都會編碼為單一影像。 某些設備,如電視,不是一次顯示整個影格,而是分成兩個圖像來顯示。 其中一個圖像或欄位包含所有偶數列。 另一個字段包含所有奇數數據列的數據。 每個畫面以一個以上的欄位編碼的視訊稱為交錯,因為它會藉由在偶數位段與奇數位段之間切換來轉譯。

過去,交錯式視訊內容在編碼之前一律會取消交錯,再使用 Windows 媒體視訊編解碼器進行編碼。 不過,從 Windows Media 9 系列開始,視訊編碼器支援壓縮交錯式內容,而不需要先將它轉換成漸進式內容。 當內容需要在交錯式顯示器(例如電視)上呈現時,維持編碼檔案中的交錯格式是非常重要的。 這項功能的重要性越來越大,因為 Windows 媒體內容的支援會傳播到 DVD 播放機、機頂盒和其他家用電子產品。

編碼和傳遞交錯式視訊最簡單的方式是使用 Windows 媒體格式 SDK 開發應用程式,並將內容儲存在 ASF 檔案中。 框架的交錯資訊會使用數據單元擴展傳遞至編解碼器,這對於 ASF 內容很適用,但在其他容器中則稍顯複雜。 如需資料單位延伸模組的詳細資訊,請參閱使用資料單位延伸模組

若要支援交錯編碼,需要兩個主要步驟:取得編碼器的畫面資訊,並將資訊傳遞給轉譯應用程式。 下列步驟會在下列段落中說明。

交錯式視訊和編碼器

在保留交錯的情況下編碼視訊的第一個步驟是將編碼器設定為編碼交錯場。 若要這樣做,請將 MFPKEY_INTERLACEDCODINGENABLED 屬性設定為 TRUE。 這會準備編碼器以接收交錯式樣本。 每個輸入範例都必須包含這兩個字段。

啟用交錯式編碼之後,您使用編碼器處理的每個範例都應附加一個數據單元擴展。 假設範例沒有具備預期的數據單位擴展名,則認為該範例是漸進式的。 識別擴充功能的 GUID 是 D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC。 下表定義 Windows Media Format SDK 物件所傳遞的值。

價值 描述
0x00000020 指定範例以底部欄位優先進行編碼。 只有在與交錯值結合時,這個值才有意義。
0x00000040 指定樣本以頂端欄位優先進行編碼。 只有在與交錯值結合時,這個值才有意義。
0x00000080 指定樣本有交錯特性。 這是對編解碼器 DMO 有意義的唯一值。

 

前兩個值的其中一個一律會使用位 OR 與0x80結合,然後再在範例上設定。 不過,編碼器只會檢查0x80,並忽略延伸模組的其餘部分。 如果延伸模組將範例識別為交錯式,編碼器會維護壓縮數據流中的範例交錯,並在數據流中內嵌指示旗標,讓譯碼器可以識別交錯的畫面格。 每個交錯樣本都會標示,讓混合漸進式和交錯式的來源內容可以一起編碼成數據流。

Windows Media Format SDK 的寫入器物件在將樣本寫入 ASF 容器的數據區段時,會包含用於渲染時的內容類型數據單元擴展。

讀取和轉譯交錯式視訊

譯碼器會根據編碼器在數據流中設定的旗標來識別交錯樣本。 默認值為譯碼器會清除取樣,並提供漸進式輸出。 播放器應用程式可以透過設定 MFPKEY_DECODER_DEINTERLACING 屬性,來配置譯碼器以處理並維持交錯的輸出。

在解碼器提供樣本之後,交錯式視訊播放的困難才會出現。 轉譯器(裝置中的視頻卡或晶元)無法正確顯示視訊內容,而不知道哪個欄位是哪一個字段。 在使用 Windows 媒體格式 SDK 的應用程式中,內容類型數據單元延伸模組會從未壓縮的範例擷取,而且可以傳遞至裝置。

直接使用編解碼器物件時,不會自動進行此數據傳輸。 您必須在緩衝區對象和用於編碼內容的容器中實作數據單位延伸模組支援。 最常見的媒體容器類型(例如 AVI)不支援範例層級元數據。 您可以實作自己的系統,將數據儲存在檔案中,並將其與個別範例產生關聯,但只有自定義讀取器可以擷取數據。

注意

MFPKEY_INTERLACEDCODINGENABLED 屬性設定為 TRUE,然後如果未傳送任何帶有內容類型數據單元擴展的範例,可能會導致編碼器當機。 只有在您有交錯式樣本要傳遞時,才設定交錯編碼器。

 

處理影片