10bit 8bit 編碼 、Chroma subsampling不同的差異


最近想弄一些bdrip
所以做了一下基本的研究關於color space 與 採樣顏色的差異
source

首先講一下Chroma subsampling是什麼東西
眼睛對亮度最為敏感,再接下來才是色度、濃度

在數位化影片中也是採取這個方式進行,亮度優先再來是色度跟濃度
也就是一般認知的 YUV or YCbCr

另外採樣的方式也有不同,主要有4:4:4、4:2:2、4:2:0 這三種
第一個數字是亮度的解析度 4代表1:1完全採樣
眼睛對亮度最敏感當然這邊絕對需要完全採樣

4:4:4代表的意思是顏色垂直採樣1:1 水平採樣1:1 非Y之其他兩分量示意圖
也就是色度的解析度維持與Source相同

4:2:2
代表的意思是顏色 垂直採樣1:1 水平採樣2:1 非Y之其他兩分量示意圖
色度垂直的解析度與Source相同,水平解析度則是減半

4:2:0
代表的意思是顏色 垂直採樣2:1 水平採樣2:1 非Y之其他兩分量示意圖
色度的垂直跟水平的解析度都減半

越編碼越模糊,很大一部份的原因在於上面提到Chroma subsampling採用的模式
目前主流是4:2:0(BD、DVD都是這個),每編碼一次 色度部份就模糊一半
雖然由於亮度1:1完全採樣 即便色度採樣很嚴重
實際上帶給人的感受 模糊感沒這麼嚴重,這邊有範例說明

Q:採樣1:1、2:1 會影響到編碼出來影片的大小嗎?
A:不會影響太大,影片採的是失真壓縮
只要內容沒有變得更複雜,採樣的方式不會影響到編碼出來影片的大小
會直接受到影響的是未壓縮的raw 影片
通常是在第一線作業時才會有raw訊號,到消費者手上都已經是失真壓縮的東西了

就我自己嘗試的結果4:4:4 編碼出來的影片容量大小
可能還是這些模式裡面容量最小的 (4:4:4 比4:2:2、4:2:0 小個10~20%)
實際上失真壓縮採用 4:2:2 就蠻夠用了,可以比對最下面的實際編碼圖
4:4:4畫面跟4:2:2非常類似,但檔案大小會比4:2:0小10%
所以要用4:4:4 也是OK的

至於8bit、10bit 網路上常常找的到色階示意圖
其實這有很大的問題,因為市面上絕大多數螢幕是8bit
10bit 圖在8bit的螢幕下看 跟8bit 的圖在8bit 的螢幕下看,是一模一樣的
除非有10bit 的螢幕 要不然任何人都看不出來 8bit 、10bit 的圖差在哪裡
(以上純就同樣RGB來相比是這樣,但如果是RGB轉YUV的話就看得出來差異了)
當然影片也是如此,理論上不需要特別去編10bit 的影片在8bit的螢幕下看
畢竟沒有辦法看出來差異
其實就連要從8bit 的畫面要分出色階差異對一般人來說就有很大的困難性
(修正:因為8bit YUV沒辦法重現8bit的RGB顏色 實際上還是需要10bit的YUV)
但影片的話轉換上有一些意外的運算bug存在
這bug讓8bit YUV編出的影片沒辦法完整重現8bit RGB的顏色
(YUV <->RGB轉換顏色上不完全可以100%對應)
要顯示出8bit的RGB顏色,首先影片必須要採用10bit的YUV編碼

主流媒體(BD、DVD…) 或許影片source 可能是10bit 或是12bit
只不過編碼出來一定要是 8bit(因為BD、DVD制定的標準就是8bit)
由於8bit的YUV 影片沒辦法呈現8bit RGB的全部顏色
所以到使用者端一定會有色階的問題
廠商為了要在8bit 的YUV環境顯示類似source的顏色,導入了dither
dither 是用很多雜點分佈來取代不能8bit 表現不出來10bit 色階的方式
dither 產生的雜點是吃掉頻寬的殺手級人物
實在不需要為了硬表現出8bitYUV不能表現出的顏色 弄出這些雜點吃掉頻寬
吃掉的頻寬會導致主體的細節因頻寬不足而模糊掉 實在得不償失
但就影片來說10bit 編碼的存在有其必要性
他不僅可以避免dither 吃掉頻寬
也可以讓8bit YUV沒辦法呈現8bit RGB,一定會有色階的問題得到改善
(10bit 以上也就不需要dither 產生雜點了,可以說沒人能分辨出來)

至於實際上編碼的情形是如何呢?
以下提供編碼出來的結果
由於沒辦法獲取4:4:4的Video source作為編碼比較
所以將原本source 是1080p(4:2:0 8bit)的BD影片
透過縮小的步驟 讓720p讓色度的垂直、水平解析度更接近於4:4:4
來進行實際上的編碼比較

source
10bit-444
8bit-422
10bit-422
8bit-420
10bit-420

可以看出重新編碼後的畫質乍看之下 還比source 來的好
這可是沒採取任何post processing effect

只不過很可惜H264 一般硬解只支援8bit,要10bit 只能靠軟解
一般mobile 裝置效能不足以軟解1080p (甚至於720p也是) 的H264
H265的話已經把10bit納進支援標準內,未來很有可能可以直接硬解H265

廣告

2 則迴響 (+add yours?)

  1. 匿名
    六月 16, 2017 @ 15:12:32

    謝謝你的分享 收穫很多

    回應

  2. orange
    六月 18, 2017 @ 16:20:01

    這篇是兩年前寫的
    內容有些許錯誤的地方,剛剛我做了修正
    主要是補充:
    為什麼8bit RGB就看不出來色階,8bit YUV就會看得出來色階
    所以需要10bit YUV來進行影片的編碼

    主要是RGB 轉YUV的過程,本身顏色就會失真一次
    (雙方顏色對應沒辦法1:1直接轉換對應)

    回應

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: