忘記講 H.264 和 WMV-9 的不同....
實在太多了:
1. H.264 的 Macroblock 模式有七種,16x16, 16x8, 8x16, 8x8
,8x8, 8x4, 4x8, 4x4。
好像和 WMV-9 差不多?
差很多
WMV 的 Macroblock 模式,壓縮單位,有 16x16,還有 4MV,也就是最小的動作補償單位是 8x8,每個 8x8 的小方塊可以獨自擁有一個 MV。
8x8, 8x4, 4x8, 4x4 這四種是在做係數轉換的時候,可以用 4x4 的轉換,而不是動作補償的單位可以用 4x4,不是每 4x4 的小方塊就可以有一個動作向量 (MV)。
而 H.264 所謂的七種 Macroblock 模式,是指有這七種動作補償的模式,每一個次分割的方塊都可以有一個獨自的向量。
動作補償的方塊越小,越能找到誤差最小的參考對象,節省記錄誤差所需的 bit 數,但是代價是需要記錄的向量變多。例如舉一個最極端的情況,本來 16x16 只需要記錄一個向量,現在每 4x4 就有一個向量,向量數增加為 16 個。
(不過注意動作向量也是有用預測的方式作壓縮,以削減所需的資料量)
所以這一來一往,壓縮的效益會被互相抵銷。
所以 Encoder 必需在這多種的壓縮模式中作判斷,選擇最有壓縮效益的壓縮方式。一般來說畫面細節豐富的地方,或者剛好位於銳利線條邊界的地方,會用較小的動作補償方塊,畫面色塊平坦的地方,會用較大的動作補償方塊。
由於可用的壓縮模式有很多種,所以壓縮的時候就要多做許多判斷,造成 H.264 壓縮的時間會變得很久。
2. 次像素動作搜尋的精度,本來 H.264 的草案中有 1/8 像素,甚至 1/16 像素,大概是後來覺得太複雜而且壓縮效益不大,在現在最終定案的三個 Profile 裡都拿掉了。當然將來也可以視需要增加新的 Profile。H.264 的內插補點是 6-tap FIR 的 filter。
Qpel 不是對所有的畫面類型都可以提高壓縮率,因為 Qpel 會增加向量的複雜度,所以 Qpel 所節省的紀錄誤差的 bit 數,必需能剛好抵銷或者超過記錄 1/4 MV 所需花費的代價,這樣才能賺到,提高到壓縮率。
越細緻複雜的畫面,例如枝葉茂盛的草地或樹叢、銳利的邊界等等,這種地方用 1/4 像素會節省很多記錄誤差的 bits,是 Qpel 最有利的使用時機。
3. 量化的方式也不一樣。H.264 Basic 和 Main Profile 沒有量化矩陣,有多種轉換的 block size,量化式和 WMV-9 完全不同,前面提過,它的 QP 量化品質前面切得很細,可以壓出其他 Codec 難以望其項背的超高品質。
前面有一點所提有誤,H.264 QP=24~28 不是壓出來的品質等於 MPEG-4 ASP H.263 quantizer=2,而是壓出來的檔案大小相等,QP=24~28 的時候壓出來的檔案大小會和 H.263 quantizer=2 的時候差不多,但是品質不相等。H.264 在同檔案大小的時候,品質比 MPEG-4 ASP 高出甚多。
所以我還真的有點搞不懂前面 QP=
0~23 的位階到底是要用來量化什麼恐怖的東西....
4. 能參考的畫面數目不一樣。
H.264 不只可以參考最靠近的前一張畫面,還可以參考前前好幾張畫面,你可以設定 Encoder 參考前面 16 張畫面,在前面所有的 16 張畫面上作動作搜尋,從裡面挑選壓縮率最高的畫面來參考。
當然以上舉的例子是很極端的情況,實際上這樣的參考壓縮速度會非常非常慢慢慢慢~~,而且不見得能增加什麼壓縮效益。
但是如果使用得宜,控制參考的畫面張數在合理的範圍內,拿這個功能來壓動畫,想想看會有多好用
動畫有許多重複、完全一模一樣的畫面,可能隔個三、四張畫面就重複出現一次,H.264 能夠跳過中間的畫面直接參考到完全一樣的參考對象,這整張畫面就可以不必壓縮,直接 skip 掉。
WMV-9 和傳統的 MPEG-1/2/4 一樣,P-frame 只能參考前面一張畫面,B-frame 只能參考前後兩張畫面。
5. entropy coding 無失真壓縮的部分,H.264 (Main Profile) 可以使用壓縮率較高的 CABAC。
其他還有太多不一樣的地方,可以這麼說:H.264 和 WMV-9 相差很多。
故我覺得就壓縮功能(壓縮工具)來說,還有壓縮效率來說,WMV-9 比較接近的是 MPEG-4 ASP,而不是 H.264。