YUV格式一般有兩大類:打包(packed)格式和平面(planar)格式。前者將YUV份量存放在同一個數組中,一般是幾個相鄰的像素組成一個宏像素(macro-pixel);然後者使用三個數組分開存放YUV三個份量 數組
YUV420P(planar格式)在ffmpeg中存儲是在struct AVFrame的data[]數組中 spa
data[0]-------Y份量 data[1]------U份量 data[2]-------V份量 內存
YUV420P的內存結構: 開發
4個Y份量對應1個UV份量 ffmpeg
YUV420格式是指,每一個像素都保留一個Y(亮度)份量,而在水平方向上,不是每行都取U和V份量,而是一行只取U份量,則其接着一行就只取V份量,以此重複(即4:2:0, 4:0:2, 4:2:0, 4:0:2 .......),因此420不是指沒有V,而是指一行採樣只取U,另外一行採樣只取V。在取U和V時,每兩個Y之間取一個U或V。但從4x4矩陣列來看,每4個矩陣點Y區域中,只有一個U和V,因此它們的比值是4:1。因此對於一個像素,RGB須要8 * 3 = 24位,即佔3個字節;而YUV420P,8 + 8/4 + 8/4 = 12位,即佔2個字節,其中8指Y份量,8/4指U和V份量。 打包
YUV420內存格式: im
YYYYYYYY UU VV ------最多見的 數據
YYYYYYYY UU VV ------也有,不過我開發中沒遇到過 img
咱們用ffmpeg把yuv420P 存儲到文件中,而後利用一些yuv播放器就能夠播放YUV原始數據,貌似VLC不能播放YUV原始數據: 文件
data[]中存放着YUV原始數據(在struct AVFrame中的,位於frame.h中----ffmpeg)