ADVERTISEMENT
筆者在完成「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,因此速度會比較快。
可以再開一篇專門介紹MeGUI這套軟體的嗎~~?
想搞清楚Rip的詳細流程
ABR、CBR、CBR...
啊...你重點的VBR跑哪去了?
因為我查了一下Wikipedia後, 似乎筆者的解釋跟Wikipedia不太相同
http://en.wikipedia.org/wiki/Variable_bitrate
http://en.wikipedia.org/wiki/Constant_bitrate
http://en.wikipedia.org/wiki/Average_bitrate
http://en.wikipedia.org/wiki/Video_quality
如果有冒犯的地方還請原諒 〒ˍ〒
> 不知道筆者文中所提的這四個名詞是針對MeGUI這軟體來解釋的嗎?
> 因為我查了一下Wikipedia後, 似乎筆者的解釋跟Wikipedia不太相同
> http://en.wikipedia.org/wiki/Variable_bitrate
> http://en.wikipedia.org/wiki/Constant_bitrate
> http://en.wikipedia.org/wiki/Average_bitrate
> http://en.wikipedia.org/wiki/Video_quality
> 如果有冒犯的地方還請原諒 〒ˍ〒
我想這位讀者的問題應該是在ABR的部分吧
文中的ABR方式針對X.264這支編碼器的說明,和WIKI中提到的不太一樣
你可以參考一下這篇文件
http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD
> MeGUI我只用來解析影片 輸出d2v 然後用AVS腳本搭配x264壓制
我比較懶惰,透過AVS腳本用ffdshow解析影片,然後就直接進X.264了。
總覺得都用ASV了,再產生d2v有些多此一舉,除非要處理MPEG2的影片,不然我都不用d2v了
圖片的標題打錯了,已經改回來囉
http://alan6716.dropmark.com/11541/457326
但是用 AVS Script Creator 會出現錯誤 unDot: supports YUY2 color format only
用 File Indexer,等他慢慢跑完第一步驟後又出現錯誤 FFVideoSource:Insanity detected:decoder returned an empty frame
不知道還有什麼方法可以建立腳本...
> 不知道還有什麼方法可以建立腳本...
>
你要不要試試看更新ffmpeg,印象中avs應該是可以處理YUY2,所以應該是缺少codec的關係。
> ※ 引述《悟訢》的留言:
> > 不知道還有什麼方法可以建立腳本...
> >
> 你要不要試試看更新ffmpeg,印象中avs應該是可以處理YUY2,所以應該是缺少codec的關係。
十分感謝您的回答,我一直都有使用K-lite codec,32、64位元都有,版本皆為最新,請問是否與安裝解碼器的過程選項有關?或是應該換個解碼器試試?
總之,我現在先去重先安裝一次試試。
> ※ 引述《悟訢》的留言:
> > 不知道還有什麼方法可以建立腳本...
> >
> 你要不要試試看更新ffmpeg,印象中avs應該是可以處理YUY2,所以應該是缺少codec的關係。
發現unDot: supports YUY2 color format only這句話應該是指說他只支援YUY2,但我這部無壓縮avi影片是RGBA格式。
如果是這個原因的話,有辦法將這影片用MeGUI轉嗎?