XviD 使用的 RGB -> YUV 算式
由 source code 可以得知,XviD 和大部分的軟體一樣是遵照這本書的標準轉換式作的
http://www.video-demystified.com/book1/index.htm
(網頁上有一個當作樣本的 PDF 檔下載,剛好就是講 Color Space,內容很棒 ^^)
算式為
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
此算式等於上述 CCE SP 的第一個算式,也就是假設收到的是 0~255 的 RGB 資料,會先做 Y/C 壓縮,然後才壓 MPEG。
知道這些有什麼用呢?
譬如說當我看到 TMPGEnc vs. CCE SP 的壓縮測試,測試說 TMPGEnc 壓出來的顏色比較鮮豔,CCE SP 的顏色比較黯淡,我第一個就會想到,測試時 TMPGEnc 和 CCE SP 的 Y/C 伸張/壓縮 的設定是什麼?兩者的設定是否相同?如果兩者的設定不同,則出來的顏色表現不同是當然的。
或者說 TMPGEnc 的畫面較模糊,CCE SP 的畫面較清晰,我就會想到,TMPGEnc 的 resize 方法是用「平均像素法」,這種 resize 法的畫面本來就較模糊,但是對低流量的 VCD 來說,這樣比較好壓。模糊是 resize 造成的結果,和壓縮無關,如果真的要比壓縮編碼的效果,應該用別的軟體先做好 resize,譬如說用 Avisynth 的 lanczos3 先做好 resize,再送進去給 TMPGEnc/CCE SP 壓縮,這樣比較才有意義。
所以了解這些原理還是有它的用處的。
又例如擷取卡應該要遵循 ITU-R BT.601 的建議,YUV 的範圍應該在 16~235 之間,所以必須做 Y/C 伸張。但是實際上各家的擷取晶片不一定會完全依照 ITU-R BT.601,事實上 ITU-R BT.601 也沒有強制 Y/C 一定要在 16~235 之間,超出一點是可以的,這個設計本來有很大的一個原因是因為 MPEG 壓縮後資料不會和原來一樣,可能會超出一點,事先規範壓縮前的 YUV 在 16~235 之間可以預留一些空間(低於 16 和高於 235),給壓縮後超出的資料使用。
像新出的 SAA7134HL 和 CX23881 晶片,SAA7134HL 的 scale(範圍)是 15~235,CX23881 則是 0~255,不用再作 Y/C 伸張。所以 CX23881 擷取下來的畫面看起來比 SAA7134HL 鮮豔非常多,會讓人誤會 SAA7134HL 很爛,顏色很黯淡。
請看這個網頁的比較圖片
http://anipeg.yks.ne.jp/topic.html
所以了解這些原理以後,便會知道要確認自己的擷取卡的動態範圍,好知道後續要做什麼樣的色調補正處理。
================================
轉貼完畢