瀏覽單個文章
LIBIDO
Major Member
 

加入日期: May 2001
文章: 122
引用:
Originally posted by jessehu
謝謝LIBIDO兄的詳細回應,請原諒我老實說,後面那一半我有看沒有懂
不過我按照先提供的參數加上您提供的資訊實作一遍,看起來好多了,
(Luminous, Chroma 我不知要加多少,隨便各加了60)

我沒寫清楚
YUV Descale CCIR601(Luminous, Chroma ~> 255)
的意思是 Luminous, Chroma 都推到 255

後面那一段是我作的筆記,在解釋為什麼有作 ITU-R BT.601 補正就不能勾選 "Basic YCbCr 出力"。
......
原來 DVD 上面記錄的是壓縮過的 YUV 訊號,DVD2AVI 解壓縮出來成為 YUV 4:2:0 之後再內插展開成為 YUV 4:2:2。存成專案檔以後轉成 VFAPI,VFAPI 會將 YUV 4:2:2 轉成 RGB 的格式才能交給其他程式開啟處理。此時 RGB 的範圍是 16~235(以" R(d)G(d)B(d) "表示),純白是 R(235),G(235),B(235)。在電腦上看,因為電腦螢幕的純白應該是 R(255),G(255),B(255),所以 R(235),G(235),B(235) 看起來會"不夠白",整個顏色對比都不正確。所以交給 AviUtl 之後,要先作 ITU-R BT.601 補正,將 0~235 的 RGB 資料伸張為 0~255,看起來才會接近正確。AviUtl 應該是將 R(d)G(d)B(d) 轉回 YUV 之後做 YC 伸張,再轉為 RGB,此時 RGB 的範圍就是 0~255(表示為" RGB ")。
======================================================DVD 解碼 YUV 4:2:0
==> DVD2AVI 補間 YUV 4:2:2 --> .D2V
==> VFAPI YUV 4:2:2 <2>--> RdGdBd(16~235)
==> AviUtl ITU-R BT.601 補正
RdGdBd <2>--> YUV --> 伸張 <1>--> RGB(0~255)
======================================================

然後交給 TMPGEnc 壓 MPEG1/2 的時候,TMPGEnc 有個選項,叫做 "Basic YCbCr 出力",不勾的話 TMPGEnc 會先將 RGB 壓縮為 16~255 之間的範圍(表示為" R(d)G(d)B(d) "),然後再轉換為 YUV 進行 MPEG 壓縮。這樣做等於 Cinema Craft Encoder SP 這個軟體的 "16 から235" 這個選項,用的是下面這個 RGB->YUV 的轉換式
======================================================
<1> CCS 的 "16 から235" = TMPGEnc 不勾 "Basic YCbCr で出力", PC Scale
Rd = 219*R + 16*256
Gd = 219*G + 16*256
Bd = 219*B + 16*256
Y = 77*Rd + 150*Gd + 29*Bd / 2^16
CR = (( 131*Rd - 110*Gd - 21*Bd ) / 2^16 ) +128
CB = (( -44*Rd - 87*Gd + 131*Bd ) / 2^16 ) +128
======================================================

經過這樣壓縮以後的 MPEG1/2 拿到電視放是正常的,在電腦上放播放軟體會先解出 YUV 4:2:0,然後包成 YUY2 的格式,走 YUY2 DirectDraw Overlay,直接丟給顯示卡上的硬體色空間轉換做 YUV->RGB,轉換成 RGB 然後顯示到螢幕上。顯示卡的 YUY2 轉 RGB 是 PC Scale,會先作 YC 伸張,然後才轉為 RGB,所以轉換後的 RGB 範圍也是 0~255,這樣在電腦上看顏色才會是正常的。
======================================================
==> TMPGEnc MPEG 壓縮, 不勾選 "Basic YCbCr で出力"
RGB(0~255) --> RdGdBd(16~235) <1>--> YUV 4:2:0 壓縮
==> 播放
解出 YUV 4:2:0 --> YUY2 DirectDraw Overlay -->
顯示卡色空間轉換(PC Scale)--> 正確的顏色
======================================================

那麼如果勾選 "Basic YCbCr 出力" 的話會怎樣呢?
勾選的話(等於 Cinema Craft Encoder SP 的 "0 から255" )TMPGEnc 就不會作 RGB 壓縮,直接以下面這個轉換式轉換為 YUV
======================================================
<2> CCS 的 "0 から255" = TMPGEnc 勾 "Basic YCbCr で出力", TV Scale
Y = 77*Rd + 150*Gd + 29*Bd / 2^8
CR = (( 131*Rd - 110*Gd - 21*Bd ) / 2^8 ) +128
CB = (( -44*Rd - 87*Gd + 131*Bd ) / 2^8 ) +128
======================================================
這個轉換式(ITU-R BT.601-5)的 RGB 是給範圍 16~235 的 R(d)G(d)B(d) 用的,而我們現在輸入的 RGB,是已經做過伸張之後範圍 0~255 的 RGB,強行帶進去轉換的話,會造成許多資料破表被削掉,轉換之後的 YUV 再顯示出來,顏色對比會完全不正確。

所以如果有作 ITU-R BT.601 補正的話,壓縮時就不能勾選 "Basic YCbCr 出力"。
^^;

反過來說如果沒有作 ITU-R BT.601 補正,壓縮時就要勾選 "Basic YCbCr 出力"。
希望這樣會清楚一點。
舊 2002-07-26, 07:08 AM #36
回應時引用此文章
LIBIDO離線中