筆者在完成「DVD壓很大,8片變1片」專題後,回頭想想自己對固定流量的壓縮方式還有些疑惑,在 VBR 、 ABR 、 CBR 三種壓縮方式到底有什麼不同?因此在深入研究一番後,在此向讀者分享一些心得。
VBR有其必要
基本上影片壓縮的方式可分為VBR、ABR、CBR、CQ、CRF共5種,只有VBR需要經過多次pass,其餘只要1 pass即可完成。
VBR的1st pass工作是分析影片,確認影片每一幀的「複雜度」(complexity),在分析完過整部影片後,可以算出複雜度與設定影片檔案大小的比例,然後調整這個比例,讓所每一幀得到相對應的量化區間(Qquantizer),就可以在2nd pass時,精準地控制影片的檔案大小。
ABR回家種田
ABR的好處是可以在單一pass的情況下,控制影片大小,筆者也感到疑惑,為什麼它可以在沒有分析影片的情況下,掌控輸出影片的大小。
在壓縮影片時,為了要計算動態補償,都會預先讀取「未來」的幾張畫面(通常以1/2解析度進行),以決定「現在」處理中的畫面,該如何進行動態補償。在這個過程中,可以偷偷計算影片的複雜度,並在處理完每一畫面後,將這畫面所造成的檔案大小累加,就可以即時調整往後的資料流量,以控制輸出檔案大小。
但是ABR有個限制,就是在影片開頭和結尾附近的片段,沒辦法計算得很精準。在開頭時因為不知道「中段」會發生什麼事,說不定畫面很單純,也可能是複雜度爆表,因此在開頭的部分通常不會特別調整資料流量。在結尾的部分則是因為生米煮成熟飯,如果前面已經把儲存空間用光,結尾只能隨便壓縮一番,況且也沒有足夠的預讀畫面,來計算複雜度。
CBR不切實際
要固定流量最簡單的方法,就是單純讓每一幀獲得相同的資料流量,這樣不僅可以在一開始就確定每一幀分得的可用空間,也可以100%精準地控制輸出檔案大小。首先透過公式「設定資料流量 / FPS」算出每幀可用的流量,接下來只需要單純在處理每一畫面時,調整量化區間,讓大小與預期相符,就可以達成目標。
CBR雖然十分「淺顯易懂」,但是我們無法得到最佳品質,如果流量設得太小,會造成畫質太差,設得太高又會造成影片虛胖(編碼器要把所有空間填滿)。如果不想等待2 pass的話,還不如使用CQ或CRF,只要壓縮出來的影片容量不要爆肥,大家應該都能接受吧。
測試條件
本次的測試過程中,筆者分別使用VBR、ABR、CBR等方式,將長度為2分鐘的1080p影片,轉為960 x 544解析度,使用的轉檔軟體為MeGUI,編碼器為x264。筆者會將資料流量設定為2000 kbps及800 kbps,以測試上述3種編碼方式,在高流量及低流量下的表現。
由於MeGUI沒有將CBR內建於的範本中, 因此需要手動調整x264編碼器的設定,輸入Rate Control選項中的Quantizer Compression設定值,可以改變編碼器動態調整量化區間的數值。
將Quantizer Compression設為1.0的話,編碼器就會以CQ的方式運作,將量化區間鎖定為固定值,若是將Quantizer Compression設為0.0,編碼器就會以CBR方式運作,無論畫面多複雜,都一律調整量化區間,讓檔案大小符合預期。
結果分析
由於使用VBR方式轉檔得經過2個pass的步驟,因此需要耗費更多的時間。但是可以從測試擷圖中清楚地看到,VBR能夠在相同流量下,提供更好的畫質,無論在影像的清晰度、輪廓,或是畫面雜訊上,表現都較為傑出。
在800kbps流量的樣本中,可以看到VBR的畫質非常明顯地贏過ABR、CBR,無論在畫面中央爆炸的地方,或是左側電纜線,畫面的邊緣都比較銳利,顏色也比較滑順。如果在轉檔的時間,希望能控制轉出檔案大小的話,最好還是多花一點時間,以VBR方式編碼以提升畫質。而2000kbps測試的結果,和800kbps的情況相似。
礙於篇幅限制,完整測試圖檔,請至http://pcadv.in/yHEDBy下載「電腦王92期技研堂.zip」檔案。
▲在電纜線的部份可以清楚看到,畫面出現因動態補償而產生的典型方格雜訊,ABR的表現已經不太理想,CBR的情況更糟糕。
▲由於VBR需要跑2個Pass的關係,所以需要比較多的時間。CBR在編碼時的運算複製度不及VBR,因此速度會比較快。