Xvid(舊稱為XviD)是一個開放原始碼的MPEG-4視訊編解碼器,
它是基於OpenDivX而編寫的。

維基 Xvid:http://zh.wikipedia.org/wiki/XviD
[轉] Xvid 的歷史與特點:http://easylearn.bhes.tpc.edu.tw/high/xvid_history.htm


『 XviD的歷史與特點 』

作者:沈晟 中文化 by Denise

 2002 年, TDX 2002 的規則中, 除了允許使用舊有的 DivX 3.11 編碼之外, 新加入了第二種核准使用的編碼--也就是本文標題中的 XivD 編碼。作為每年在網上放出數千部最新影片的網上高品質影音組織, 他們所遵循的規則對於整個 MPEG-4 編碼的應用市場來說, 都有決定性的重要意義。XviD 在 TDX 2002 中, 以 DivX3.11 的替代者的姿態出現, 還有人戲稱 : XviD 是繼承 DivX3.11 的非商業個人版。那麼 XviD 到底是什麼? 它又有些什麼通天本領的視頻壓縮本領? 或許您並不知道的是 : XviD 是個本來不會出現的東西……

幾經波折的誕生記

 4 年以前, 在 PC 上能用的唯一 MPEG-4 編碼器就是由微軟所開發的, 包括 MS MPEG4 V1、MS MPEG4 V2、MS MPEG4 V3 的系列編碼核心。其中前面兩種都可以用來製作 AVI 檔案, 至今都作為 Windows 的默認組件。不過 V1 和 V2 的編碼質量都還不太好, 直到 MS MPEG4 V3 開始, 畫面質量有了顯著的進步。不過微軟卻決定僅將這個 MS MPEG4 V3 的視頻編碼核心封閉在 Windows Media 流媒體技術, 也就是我們熟知的 ASF 檔案之中, 不再能用於 AVI 檔案。ASF 檔案當然有一些好處, 但是過於封閉甚至不能被編輯, 惹惱了天不怕地不怕的電影駭客。很快便有小組修改了微軟的 MS MPEG4 V3, 解除了不能用於 AVI 檔案的限制, 並開放了其中一些壓縮參數, 由此, 也就誕生了我們今天所熟悉的 MPEG4 編碼器 DivX 3.11。

 DivX廣泛流行, 成為 DVDRip 的標準, 問題是, 它的基礎技術是非法盜用微軟的, 只能在地下裏流傳卻上不了檯面, 無法進行更廣泛的產品化, 更無法生產硬體播放機。在這種情況下, 一些精通視頻編碼的工程師 (包括原 DivX 3.11 的開發者) 成立了一家名為 DivX Networks Inc. 的公司, 簡稱 DXN。DXN 發起一個開放原始碼專案 Project Mayo, 目標是開發一套全新的、開放原始碼的 MPEG4 編碼軟體。特別是完全符合 ISO MPEG4 標準的 Open DivX CODEC 吸引了許多軟體高手參與, 並很快開發出Open DivX 編碼器和解碼器原型, 之後又開發出更高性能的編碼器 Encore 2 等等。這一時期, 主要編碼工作是 DXN 的人在做, 而許多技術難關的解決得力於來自開放原始碼社會的幫助。

 就在一切都看起來進展順利的時候, 好戲上演了。Project Mayo 當然是開放原始碼, 但不是依據 GPL (通用公共許可証, 一種開放原始碼項目中常用的保障自由使用和修改的軟件或原始碼的協議) 。DXN 在設計授權協議時留了一手, 2001 年 7 月, 就在 Encore 2 基本成型, 差不多可以產品化的時候, DXN 另搞了一個 DIVX.COM 網站, 封閉了原始碼, 發佈了他們自己的 DivX 4。DivX 4 的基礎就是 Open DivX中 的 Encore 2, 但利用了 DivX 的牌號, 可以說出乎意料的擺了所有人一道。由於 DXN 不再參與, Project Mayo 陷於停頓, Encore 2 的原始碼也被 DXN 從伺服器上撤下。經過激烈的爭論, DXN 當然承認 Encore 2 在法律上是開放的, 但仍然拒絕把它放回伺服器。開放原始碼社會就這樣被狠狠地涮了一回。

 Open DivX 尚不能實際使用, 而 DivX 4 (以及後續的收費版本 - DivX 5) 等等都成了私有財產, 許多人為打破微軟壟斷而無償付出的智慧和勞動僅僅是幫助了 DXN 發財, 這種結果當然是不能被接受的。為此, 整個 0dayz 組織永遠的拒絕了 DXN 公司的 DivX4\5, 而原 Open DivX 開發組中的倖存者, 逐漸重新聚攏開發力量, 在最後一個 Open DivX 版本的基礎上, 發展出了 XviD。

 劫後餘生的 XviD 到線在又度過了近 1 年時間, 它繼承並發展了 Open DivX Encore 2, 性能得到極大提高, 被認為目前世界上速度最快的 MPEG4 CODEC。XviD 重寫了所有代碼, 並吸取前車之鑒依照 GPL 發佈 (注意不再是 LGPL, 所以誰要是想用它做成產品而不開放原始碼是非法的) 。不過, 因為 MPEG4 還存在專利權的問題, 所以 XviD 只能仿照 LAME 的做法, 僅僅作為對如何實現 ISO MPEG-4 標準的一種研究交流, 網站上只提供原始碼, 如果要使用就要自己編譯原始碼或者到第三方網站下載編譯好的可運行版本。

 想當初 Gaj 之流的幾個傢伙搞 Open DivX 的時候, 一開始是很像一個像模像樣的開放原始碼項目, 很多人都被吸引過去一起開發, 測試。直到後來, 那幾個傢伙一夜之間露出騙子的本來面目了, 把 Open DivX 的成果一股腦帶走, 變成了封閉原始碼的 DivX4, 而後進一步變成現在的收費的 DivX 5 了。本來很好的 Open DivX 被逼流產, 不過也就促成了今天 XviD 的誕生、發展和壯大。現在的 XviD 更可以說超越了 DivX 5, 以更好的質量, 更強的功能挑戰著新一代的 MPEG4 應用戰場。

豐富多彩的技術特性

 不僅 XviD 的出線本身就是開放原始碼社會中典型的一部教科書, 它在技術上的各種新特性也都是貨真價實、童叟無欺的。對於一個第二代的 MPEG4 視頻編碼核心來說, XviD 的各種演算法設計都有代表性的先進意義。

多種編碼模式:

 除了最原始單重估定碼流壓縮 (1-pass CBR) 之外, XviD 提供了包括 : 單重質量模式動態碼流壓縮、單重量化 (Quantization) 模式動態碼流壓縮、和包括外部控制和內部控制的兩種雙重 (2-pass) 動態碼流壓縮模式。XviD 顯然是目前 PC 上的 MPEG4 編碼核心中, 可選模式最多的視頻編碼。

 其中特別是雙重 (2-pass) 動態碼流壓縮模式, 通過檢測畫面運動幅度以最優化的方式曲線分配畫面量化幅度, 使充滿活性元素的視頻影片可以在佔用空間和畫面質量之間獲得最佳的平衡。而單重量化 (Quantization) 模式動態碼流壓縮, 可以高速地一次性生成可控畫面細節的動態碼流視頻檔案, 在較少的壓縮時間代價之下, 可以獲得較穩定的畫面細節質量, 這都是單純的 DivX 3.11 所不具有的優秀功能。

量化 (Quantization) 方式和範圍控制

 量化 (Quantization) , 簡單的說就是在編碼時通過對時間或空間上相鄰的畫面單元進行同化、模糊細節的程度, 是對畫面質量最基本的控制因素。XviD 不僅提供了標準的 MPEG 量化方式, 還特地提供了更適合低碼流壓縮的 .h263 量化方式。並且 XviD 還可以在雙重 (2-pass) 運算時, 根據對畫面資訊的綜合分析, 動態的決定某段場景的畫面量化方式, 真可以說是為網絡媒體檔案傳播中, 空間與畫質的平衡而考慮, 設計貼心得到家了。

 除了量化方式選擇, XviD 還提供了強大的對壓縮過程中的量化幅度的範圍控制。用戶可以選定壓縮時允許使用的量化幅度範圍。例如設定一個量化的上限, 就可以避免可能出線的畫質大幅下降的情況。

運動偵測 (Motion Search) 和曲線平衡分配 (Curve)

 對畫面逐幀進行運動偵測, 以及對全片段的運動偵測結果進行分析後, 重新以曲線平衡分配每一幀的量化幅度, 以做到 : 需要高碼流的運動畫面可以分配更多空間、更高的碼流、更低的量化幅度來保持畫面的細節; 而對於不包含太多運動資訊的靜態畫面, 則消減分配預算。這種把好鋼用在刀刃上的做法, 是 XviD 做為第二代 MPEG4 編碼的核心內容。

 XviD提供了多極運動偵測精度, 包括半圖元插值 (half pixel interpolation) 的技術以 16x16 圖元的微區塊為單元標示上運動向量; 以及 4 分運動向量 (inter4v motion vectors) 的方式, 以 8x8 的圖元區塊為單元更細緻的紀錄運動向量以供二重分析。

動態關鍵幀距 (I-frame interval)

 動態關鍵幀距是另一個 XviD 所具有的, 在空間和畫面之間獲得最大平衡的技術。我們知道在視頻壓縮中不是每一幀都記錄著全部的畫面資訊, 事實上只有關鍵幀記錄著完整的畫面資訊, 而後續的 P 幀 (P-Frame) 僅僅是紀錄下與之前一幀的差值。如果關鍵幀之間的畫面變化很大, 則會浪費寶貴的空間在 P-Frame 上; 而加入把變化很大的那一幀記錄在關鍵幀裏, 那麼由於後續的幀不再有更大的變化, 就可以節省 P 幀所需的空間。因此, 根據畫面鏡頭切換和運動幅度來變換關鍵幀的位置, 對於視頻壓縮下的畫面質量提高, 就有著事半功倍的效果。

心理視覺亮度修正

 除了基本的 MPEG4 編碼外, XviD 還提供了不少附加功能。其中典型的就是心理視覺亮度修正。這個功能可能通過去除肉眼不能分辨的亮度信號和亮度差異, 來提高壓縮效率。遺憾的儘管這個設計非常的有創意, 但是目前的實際應用中卻會導致肉眼可見的畫面質量下降, 還期待在日後的版本中可以有所改進。

演職員表選項

 另外一個貼心的設計是電影專用的"演職員表選項"。這個功能可以在用戶指定的某些不必要保留細節的段落處 (例如電影的演職員表) , 設定下極低的碼流。甚至壓縮到正片碼流的10%以下, 可以節省不少空間, 設計的也非常的貼心。

外部自定義控制

 除了 XivD 自己的內部曲線分配控制方式外, XviD 也提供了外部的開放介面。允許使用者略過 XviD 本身的編碼分析核心, 利用第三方提供的外部分析工具, 例如 Gordian Knot, 生成的分配好的控制檔案, 再交還 XviD 做最終的二重運算壓縮。這種方式擴展了 XviD 的可用性和用戶控制程度, 因為像 Gordian Knot 這種軟件甚至可以做到由用戶控制每一幀的量化幅度和碼流分配額度, 可以為高級應用提供更多的可能性。

運動向量加速 (Hinted Me) 編碼

 XviD 還有專為提高編碼效率而開發的設計, 就是紀錄下畫面的運動向量資訊至一個 Log 檔案中。再在二重運算壓縮時通過直接讀取該檔案中的資訊, 節省下對運動向量資訊的重複運算, 大幅提高編碼速度。

畫面優化解碼

 不僅在編碼上 XivD 擁有強大的功能, 在解碼時的畫面優化方面, XviD 也有很多新的建樹。例如 "Horizontal deblock (Y)" 可以柔化水平方向的亮度馬賽克; "Horizontal deblock (C)" 可以柔化水平相的色度馬賽克; "Deringing(Y)" 可以柔化環狀亮度色斑; "Deinging (C)" 可以柔化環狀色度色斑; "mosquito" 可以減少畫面中的蚊狀噪斑。並且, 這些 XviD 的畫面優化手段都是可選的, 因此只要關閉幾個不是那麼必要的選項, 就可以在低配置的PC機上播放。

正在開發的 B 影格

 另一個 XviD 中引人注目的技術發展, 就是 B 影格。我們知道 I 影格就是關鍵影格, P 影格在關鍵影格之間, 只儲存與之前一幅已解壓畫面的差值。B 影格與 P 影格的原理一樣, 但除了三者之前解壓了的畫面外, 亦會參考後面一影格中的畫面資訊。因此 B 影格解壓出來的畫面比P影格就要來的好。

 之前的 MPEG4 編碼核心都僅僅使用了 I 影格和 P 影格存儲畫面。如果能在此基礎上使用 B 影格技術, 自然可以在畫質和壓縮比上更上一層樓。目前 XviD 已經為開發人員提供了測試性質 B 影格體驗版的 XviD 編碼核心, 相信不久的將來, XviD 就可以把 MPEG4 編碼的優勢發揮到極致, 成為網上視頻記錄格式的盟主。

ca95 發表在 痞客邦 PIXNET 留言(0) 人氣()