2006-03-05

MEPG24等相關影像壓縮標準

WMV9 是一個很類似 MPEG-4 的壓縮格式,但是他不是標準的 MPEG-4,不能把它和 MPEG-4 混為一談。我們可以說 WMV9 使用了類似「標準 MPEG-4」的壓縮技術,但是不能說 WMV9 就是 MPEG-4,也不能說 WMV9 是 MPEG-4 的「一種」。MPEG-4 是一個標準的格式,它有統一的規格,沒有「多種」不同的格式,只有一種格式,只要不符合這個標準的格式,就不是 MPEG-4。只要是 MPEG-4,不管使用什麼編碼器(encoder)壓縮的,壓出來的資料流都可以被支援的解碼器(decoder)解碼。encoder+ decoder=codec,也就是說不管表面上看起來 MPEG-4 codec 有多少個,有 DivX 5.x 系列,有 XviD,有 Nero Digital,有 3ivX.... 等等等等,有好多個 MPEG-4 codec,不管有多少個 codec,他們都是 "MPEG-4" 的 codec,彼此之間都可以互通,這個 codec 壓出來的資料可以用另一個 codec 解碼,完全沒有問題。就如同 MPEG-2 也有好多個 codec,有好多編解碼器,編碼器有 TMPGEnc,有 Canopus ProCoder,有 MainConcept MPEG Encoder;解碼器有 WinDVD,有 PowerDVD,有 Elecard MPEG-2 Decoder.... 等等等等,有這麼多的 MPEG-2 codec,但是他們都是標準 MPEG-2 的 codec,所以壓縮出來的東西可以被其他任何一個 MPEG-2 codec 解碼,完全沒有相容的問題。同樣,MPEG-4 是一個已經制定好(早就已經制定好,如同前面有網友提到,1999 年的時候 Version 1 就已經拍板定案),是一個國際化的標準規格,和 MPEG-2 一樣,只要標明是 "MPEG-4" codec,代表他壓出來的東西是標準的 MPEG-4 資料流,可以被其他同樣是 MPEG-4 的 decoder 解碼。所以我們知道,MPEG-4 是一個統一的規格,雖然有許多不同的 MPEG-4 codec,但是並沒有規格混亂,MPEG-4 規格只有一個,所有的 codec 都是遵照這個標準的規格在設計的,所以只要沒有做錯,壓出來的東西一定都可以被其他 decoder 所解碼。如果將來 MPEG-4 技術要實用化,要拿來做為下一代影音媒體所使用的壓縮方法,那麼情況也是一樣,各家製作廠商使用各自的 MPEG-4 encoder 壓縮,製作 DVD/HD-DVD/AOD/... 碟片,然後消費者買回家,用各自的硬體 MPEG-4 player,裡面可能是不同公司開發的 MPEG-4 decoder 晶片來解碼播放,一定不會有問題,放心,有問題廠商也不敢賣你 所以請不要再為「MPEG-4 規格很混亂」「MPEG-4 規格有好多種」「MPEG-4 彼此不相容」這種問題煩惱了,實際上根本沒有這種問題 如果我們要更進一步地探討,則各個 codec 壓出來的檔案確實可能會有不相容的情況,這個問題很複雜,可以分為幾點來討論:1. MPEG-4 規格根據應用的目標不同,有分為好幾個不同的 Profile@Level,不同的 Profile 能使用的壓縮工具不同,例如 MPEG-4 ASP 這個 Profile 有 B-frame, GMC, Quarter Pixel 等這三個主要的、特別的壓縮工具。如果 decoder 沒有做到支援 MPEG-4 ASP 這個 Profile 的壓縮工具,那麼這個 decoder 就不能播放 ASP 的檔案。如果 MPEG-4 會拿來做為下一代影音媒體所使用的壓縮方法,那麼請放心,這個媒體標準一定會明訂壓縮規格使用的 MPEG-4 Profile@Level,以確保所有的硬體晶片都能正確解碼。就如同,MPEG-2 規格有好幾個 Profile@Level,要到 High Level 才能壓縮 1920x1080 這種這麼大的解析度。而我們一般在用的 DVD-Video,這個「媒體標準」,使用的是 MPEG-2 這個「壓縮規格」做為視訊壓縮的方法,而且 DVD-Video 規定,使用的是 MPEG-2 MP@ML 這個 MPEG-2 的 Profile@Level。DVD-Video 的視訊,必須是 MPEG-2 MP@ML,而 ML(Main Level) 的最大解析度只能到 720x576,也就是 DVD-Video 所能容納的最大解析度。而日本的 HDTV,數位衛星直播,也是使用 MPEG-2 做為壓縮的方法,當然要壓縮 1920x1080 的高解析度,他就必須指定使用另一個 MPEG-2 的 Profile@Level。不同的媒體應用,會使用不同的 Profile@Level。同理,如果真的要拿 MPEG-4 做為下一代影音媒體的壓縮方法,則 DVD 論壇在制訂的時候一定會明訂要用哪一個 Profile@Level。雖然各個 codec 能夠支援的 Profile@Level 可能不同,造成壓縮出來的檔案可能有些無法彼此互通,但是不能因為這樣就誤認為「MPEG-4 規格有很多種」「MPEG-4 規格很混亂」「MPEG-4 規格有一堆,每個都不同,各自是各自的技術,彼此不相容」。雖然支援的 Profile@Level 不同,但是他們都是 "MPEG-4" 的 codec,只要不使用這些高級的壓縮工具,只用最基本的壓縮工具,保證壓出來的檔案一定都可以彼此互通。
2. 另一個會造成不相容的原因,是因為這個 codec 在實作 MPEG-4 壓縮規格的時候做錯了。程式有 bug,造成壓出來的資料流是「不合法」、不符合 MPEG-4 標準的資料流,所以其他正確的 MPEG-4 codec 無法解碼。有的時候不一定是 codec 的程式設計人員做錯,而是 MPEG-4 規格有一些修訂,設計人員沒有更新手上的 MPEG-4 標準文件,還是用舊的規格去實作,結果當然不符合新的修訂規格。或者是,標準本身就有錯。真的,標準也會有錯,尤其是那個天殺的,超難看懂的 MPEG-4 Standard 文件 有時候會出現 Standard 文件裡面寫的是這樣做,然而範例程式的 source code 卻是用另一種做法,令人不知所措,不知道該聽誰的,哪一個做法才是正確的。再加上 MPEG-4 涵蓋的範圍很廣,又不容易閱讀,所以程式設計人員不小心看錯,或者是理解錯誤的情況也時有發生。用錯誤的 codec 壓出來的檔案就有可能無法被其他 codec 解碼,所幸的是這種錯誤通常會立刻被發現,隨即推出更新的版本。DivX 5.x 系列有許多版號,從 5.0 到現在的 5.1.1,每一版都是 MPEG-4 codec,不同的版本只是在更新提高壓縮的效率,還有修正這些重大的錯誤。就如同 TMPGEnc 這個 encoder 有許多版本,每一版都做了一些修正和改進,但是他壓出來的都還是 MPEG-2。DivX 5 這個 "encoder" 也一樣,每一版只是在做改進,不是每一版都是一個新規格。3. 第三種不相容的情況,不是完全不能播放,而是播放的時候會有一些錯誤。例如1) 畫面會出現各種奇怪的瑕疵,例如水波紋、顏色逐漸變成粉紅色、色彩像水彩沾到水一樣擴散開來... 等等,idct mismatch 的問題。這個是 MPEG-4 壓縮規格本身的瑕疵,不同的 iDCT 演算法會造成嚴重的畫面瑕疵。這個問題無解。由於目前流行的 DivX 和 XviD 所採用的 iDCT 演算法是 walken idct,所以硬體的 MPEG-4 player 可能也都會採用 walken idct,以避免不相容的情形。2) 畫面會頓。由於解碼的 buffer 不可能無限大,在硬體播放機上更是有一定的限制,例如 DVD-Video 規定 VBV Buffer 必須是 224kbytes,然而目前 MPEG-4 並沒有被制訂為是媒體壓縮的標準,所以各個 codec 在壓縮時並沒有做統一的限制 VBV Buffer 的大小。DivX 的公司 DXN 有自訂幾個 Profile 限制最大 Bitrate,只要有掛上這個 DivX Profile 認證的播放機,就可以順暢的播放沒有問題。而 XviD 目前的 RC 演算法並沒有考慮 VBV 的設計,所以無法限制最大 Bitrate,如果檔案的流量真的很大,拿到硬體播放機上面播放就有可能會出現停頓的現象。以上是一些不相容的情況,其中大部分的問題,在制訂媒體壓縮標準的時候一定會有明確的規定,所以這些問題都不成為問題。MPEG-4 要成為媒體標準最大的問題,我覺得還是在 MPEG-4 本身的瑕疵上面。MPEG-4 當初制定的時候目標並不是高流量,而是在低流量的品質,所以他能夠壓出來的最高品質,比 MPEG-2 低。有在壓 MPEG-4 的人會發現,H.263 quantization quantizer 2 壓出來的品質還是很差,如果用 quantizer 1 壓縮,檔案又會很大,quantizer 1 和 quantizer 2 的落差很大,沒有進一步細分。而要做為高品質的壓縮標準,quantizer 2 還是不夠用的。而 MPEG-2 的 quantizer 2,non-linear scale,和 MPEG-4 的 MPEG quantization 相比,品質高了一倍。再加上現在的 MPEG-4 codec,DC 精度都只有 8bit,MPEG-2 可以到 11bit,所以高品質 MPEG-4 還是比不過 MPEG-2。MPEG-4 的設計還有其他許多缺陷,例如 B-frame 的 Macroblock skip 機制,這是一個天才的設計,會造成離譜的壓縮瑕疵。所以要拿 MPEG-4 做為高畫質的影音媒體標準,實在是不太行。相形之下,WMV9 或 VP6 可能就好一點。現行的 MPEG-4 不是不能做為高畫質影音媒體的壓縮標準,只是還要修改一下,例如前面提到的 DC 精度,MPEG-4 不是只能為 8bit,只是現行的設計都是 8bit。修改一下,為影音媒體量身定做一個 Profile,還是可行的,但是我想大家應該都已經轉移目標,把希望寄託在 MPEG-4 的 part.10,MPEG-4 AVC(Advanced Video Coding),也就是 H.264 的身上。如果要拿來做為下一代影音媒體的標準,MPEG-4 AVC,也就是 H.264 是比較考慮的,不過 H.264 的問題在於:「太複雜了!!」,編碼、解碼的負擔非常重,而且很難設計,實在太難了,君不見有多少開放原始碼的 H.264 的計畫最後都無疾而終。光是以前的 MPEG-4,MPEG-4 part.2 視訊壓縮大家就做得要死要活,錯得錯誤百出,做到現在才算有一點成熟,part.10 要做到實用化,可能還要再等上一段時日。在這段空窗期,WMV9 就很有可能趁虛而入 或者乾脆用回以前的 MPEG-2。一切都還在未定之數.....

WMV9 沒有經過 ISO 標準化,不是國際化的壓縮標準。WMV9 是由微軟開發、主推的壓縮格式。MPEG-4 是由 Apple 主導,HP, IBM 還有微軟 等公司共推的壓縮格式。微軟推到一半,可能認為 MPEG-4 涵蓋太廣,東西太雜,進展太慢,自己跳出來搞 WMV9。不過這些都不重要,因為即使 MPEG-4 是 ISO 標準,是 MPEG 小組的心血結晶,也不代表下一代高畫質 DVD 就一定要用 MPEG-4 做為壓縮格式 當然,MPEG-4 不是只能壓低流量的東西,新制訂的 MPEG-4 Studio Profile,MPEG-4 SP 的目標就是業務使用,高畫質的保存格式,這個的畫質就真的超越 MPEG-2。不過 Studio Profile 大概不可能拿來做為民生消費產品使用....


引用:
Originally posted by ri7672 小弟最近買了一台sanyo C1,是有標準的mepg4格式的影像壓縮,但是出來的副檔名是MP4,而且window media player無法播放,一定要用quick time才能播放,如果照大大屬說的,那不是應該所有的播放軟體都可以播放嗎?我想好像不是如此的! 不是的,您的推論有誤。所有的 MPEG-4 的資料流 bitstream 都是相容的,不同的 MPEG-4 codec 可以互相解碼播放彼此壓出來的 bitstream。例如 DivX 可以播放 XviD 壓出來的 bitstream,XviD 可以播放 Nero Digital 壓出來的 bitstream。因為今天我們使用的,用來裝載 bitstream 的"載體",也就是一般所說的檔案格式,是用 .avi 來裝這些 MPEG-4 的資料流。AVI 的檔頭有一個 FourCC 的資訊,會告知播放軟體要用哪一個 codec 來解碼裡面裝載的資料。DivX 的 AVI 會指定要用 DivX 的 codec 來解碼,如果系統上找不到 DivX codec,就會認為沒有對應的解碼器,而宣告解碼失敗。但是其實這個 AVI 裡面裝的東西,不一定要用 Divx codec 來解,用 XviD codec 來解也是可以,但是播放軟體不知道,他不會自動幫你用 XviD codec 來解碼 DivX 的 AVI。如果我們手動更改 DivX AVI 的檔頭,把 FourCC 由 "DIVX" 改成為 "XVID",這樣播放軟體就會認為這個檔案要用 XviD 來解碼,就會自動使用 XviD codec 來解碼裡面的東西。所以 MPEG-4 AVI 不同 codec 要用對應的 codec 來解碼的原因,是因 .avi 這個載體設計的關係,不是因為 MPEG-4 codec 彼此不相容,實際上是相容的,都可以互相解對方裡面放的東西,只是播放軟體不知道。如果今天改用 MPEG-4 標準本身制訂的 .mp4 檔案格式做為載體,那麼所有支援 .mp4 檔案格式的 decoder 都可以自動地解碼,不管這個檔案是誰壓的,例如 3ivX 的 decoder,Envivo MPEG-4 player。就如同,MPEG-2 有好多個 encoder,大家壓出來的資料都用 .mpg 這樣的檔案格式裝,所有支援 .mpg 播放的軟體,能夠辨認 .mpg 格式的軟體就可以自動地起來播放,不管這個檔案是用哪一個 MPEG-2 encoder 壓的。MPEG-4 也是一樣,所有的 MPEG-4 都是互通的,大家都可以解,但是必須用 .mp4 這個標準的載體裝。然而目前的 MPEG-4 流行趨勢,大家都還是用 AVI 來裝載,因為支援 AVI 的軟體比較多,事後要剪接處理會比較方便,流通也比較方便,不然還要向別人解釋「你要先裝一個能播放 .mp4 的軟體才能看喔」這樣很麻煩。至於您說
引用:
但是出來的副檔名是MP4,而且window media player無法播放,一定要用quick time才能播放,如果照大大屬說的,那不是應該所有的播放軟體都可以播放嗎?當然不是這樣。要播放 .mp4,首先你的播放軟體要能辨認 .mp4 這個檔案格式,以 Windows Media Player 來說的話,它沒有內建 .mp4 的 spiliter,你的系統上必須有 .mp4 file 的 spiliter,把 MPEG-4 video 的資料流分離出來,送給可以解碼 raw MPEG-4 資料流的 DirectShow Filter 去做解碼。所以:1. 播放軟體要能辨認、分離 .mp4,如果播放軟體沒有內建,系統上要有對應的 spiliter。就如同播放 .avi 檔案格式,需要 AVI Spiliter,只是你不知道背後有它在運作,因為系統內建了,所以使用覺得開啟 AVI 是那麼自然。2. 有了 .mp4 的 Spiliter 之後,還要有接受能 raw MPEG-4 資料流的輸入,做解碼的 DirectShow Filter。由於你的系統缺少這兩樣東西,所以沒有辦法用 Windows Media Player 來播放 .mp4。如果你有安裝 3ivX codec,或者 Nero Digital,這兩個軟體在安裝的時候會自動幫你安裝對應 .mp4 的 DirectShow Filter,這樣你才能用 Windows Media Player 播放 .mp4。所以「MPEG-4 用 .mp4 裝,就可以彼此相容」,這句話是說,AVI 這個載體因為格式的關係,需要對應的 codec 才能解碼,如果改用 .mp4 裝,則不管那個 encoder 壓的,所有能解 MPEG-4 的 codec 都可以解碼。但是你的播放軟體必須先能辨識 .mp4,分離出正確的資料給 codec 解碼啊,不然即使裡面的東西 codec 明明會解,他也沒有辦法取得資料來解啊。「.mp4 裡面放的 MPEG-4 資料格式是相容的」和 「所有播放軟體都要可以播放 .mp4」,這兩件事完全沒有關係。MPEG-4 的資料格式都是相容的沒錯,有的播放軟體不能放 .mp4 那是檔案操作的問題,和 MPEG-4 是否相容無關。QuickTime Player 內建 .mp4 的 Spiliter 和 decoder,所以直接就可以放 .mp4。

0 Comments:

張貼留言

<< Home