音視頻 yuv視頻格式詳解(一)

引論
Yuv在流媒體領域是一個既熟悉又陌生的概念,在轉碼過程中需要將視頻解碼成yuv再重新編碼以便更改一些參數, 也需要在yuv上做一些處理比如添加水印, 提升亮度,等等。之前也是使用沒用重視這個格式, 但現在需要着重處理圖片信息就需要深入瞭解yuv格式,這時候發現對yuv不瞭解, 這些是怎麼存儲的,怎麼做測試, 怎麼對應座標。Yuv倒底是一個什麼格式呢。以此爲契機, 着重看了不少文章, 形成了自己的理解, 有不對的地方望指正。
概述
Yuv是一種視頻格式, 指亮度和色度分開表示的像素格式, 但這是一個籠統的提法, 它包含了很多不同的格式。本文所有的講述都是基於8位yuv格式
定義
Yuv分爲三個分量, Y 表示亮度 也就是灰度值;uv表示的是色度,描述影像的色彩及飽和度。
顯示
Yuv這種格式是一種顏色編碼方法, 主要用於電視系統以及模擬視頻領域, 沒有uv分量一樣可以顯示完整的圖像,只不過是黑白的, 這種是有時播放yuv視頻時會出現顏色的閃爍。但是yuv格式不能直接用屏幕進行渲染。手機播放器解碼出yuv格式時是通過opengl將yuv格式轉換成RGB格式再進行渲染。
Yuv三個主要方面
存儲分類
Yuv存儲方式有兩大分類
1) Packed
每個像素點的y u v是連續交叉存儲的, 即將yuv分量連續存儲打包成一個宏像素存放在一個數組中
2) Planar
每個像素的y u v 三個分量用三個數組分別存放,也可以在一個數組中, 先連續存儲所有的像素的y 緊接着存儲所有像素點的u, 再是所有像素點的v 。yuv分別連續存儲就像分別放在三個平面上
FOURCC碼
要理解yuv格式, 必須要理解FOURCC碼, 這是一個什麼東東呢
FOURCC是 four character code的縮寫, 用於媒體文件中的視頻編解碼器、壓縮格式、顏色或像素格式的標識符,character大小爲1byte或者8bit。所以一個FOURCC佔用32bits或者4byte, bit和byte區別就不說了。代碼中FOURCC是一個32位無符號整數, 由四個ASCII字符連接而成。詳細在下面分類中詳解。
採樣
Yuv的採樣有這麼幾種 444 、422、420 、411等, 平常最常的就是420。
444、420又是什麼東西呢, 這就涉及A:B:C表示法
A:B:C表示法
因爲yuv這種格式, 拿到所有y值就可以顯示整幅畫面,但僅是黑白的即灰度圖。色度飽合度的採樣率比y低, 同時又不會明顯降低視覺質量, 這也就是yuv比rgb的優勢所在
4:4:4
表示色度沒有下采樣, 每一個Y對應一組UV分量 即每一個像素都有 y u v 分量, 沒有下采樣, 跟rgb一樣,用的較少。
在這裏插入圖片描述
如圖, 圓圈爲uv分量,叉爲y分量, 它們的對應關係爲一對一, 這圖好多博客裏有, 源自微軟對yuv的官方說明, 我看這圖也蒙了好久, 這是怎麼存的呢, 想了好久這圖跟存儲沒有任何關係,就是代表對應關係,如何存儲就是看FOURCC和packed、planar。
4:2:2
表示2:1的水平下采樣,沒有豎直下采樣。每條掃描線包含4個y對應2個u或者v。即每兩個Y共用一組UV分量

在這裏插入圖片描述
4:2:0
表示2:1的水平下采樣, 2:1的豎直下采樣,每四個Y共用一組UV分量, 這4個y不是一條線上的4個是一個正方形的4個,
它有兩種對應關係, 一種是mpeg1 一種是mpeg2
在這裏插入圖片描述
上圖爲mpeg1規定的對應方式

在這裏插入圖片描述
上圖爲mpeg2規定的對應方式

是不是覺得這兩個圖是什麼鬼啊, 有啥子區別。等等, 別急, 這先按下, 下面對應FOURCC
類型就能懂了, 我也是想了好久。請看下一篇

Yuv重要概念
原點
(0,0)一直是在畫布的左上角
跨距
畫布的間距, 就是畫布的寬度是多少bytes。 以原點算, 跨距是正數

對齊
畫布的對齊跟根不同的顯示硬件定, 但畫布必須是用DWORD對齊

格式資源:
FOURCC格式說明
http://www.fourcc.org/yuv.php
微軟格式說明
https://docs.microsoft.com/en-us/previous-versions/aa904813(v=vs.80)?redirectedfrom=MSDN

https://docs.microsoft.com/en-us/windows/desktop/medfound/recommended-8-bit-yuv-formats-for-video-rendering

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章