定義
下面是兩者在ffmpeg中的定義
AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
注:這里不討論相同點。
區別
區別的表現
兩者的不同在於,顏色空間不同。
AVCOL_RANGE_JPEG
/**
* MPEG vs JPEG YUV range.
*/
enum AVColorRange {
AVCOL_RANGE_UNSPECIFIED = 0,
AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges
AVCOL_RANGE_NB, ///< Not part of ABI
};
YUVJ420P的字面含義是“使用了JPEG顏色范圍的YUV420P,像素使用表示顏色的數值范圍發生了變化。
YUV420p的像素顏色范圍是[16,235],16表示黑色,235表示白色
YUVJ420P的像素顏色范圍是[0,255]。0表示黑色,255表示白色
從這里來看,貌似是YUVJ420P表示的更准確一下。
區別的緣由
YUV420p對應的是電視。
YUVJ420P對應的是顯示器。
灰階
何謂灰階?通常來說,液晶屏幕上人們肉眼所見的一個點,即一個像素,它是由紅、綠、藍(RGB)三個子像素組成的。每一個子像素,其背后的光源都可以顯現出不同的亮度級別。而灰階代表了由最暗到最亮之間不同亮度的層次級別。這中間層級越多,所能夠呈現的畫面效果也就越細膩。以8bit面板為例,能表現2的8次方,等於256個亮度層次,我們就稱之為256灰階。LCD屏幕上每個像素,均由不同亮度層次的紅、綠、藍組合起來,最終形成不同的色彩點。也就是說,屏幕上每一個點的色彩變化,其實都是由構成這個點的三個RGB子像素的灰階變化所帶來的。
電腦如果想顯示准確的色彩,那么必須要0-255灰階全部齊全。灰階的損失,就意味着色彩的損失。 對於PC主機,灰階的輸出是0-255。灰階輸出為0的情況下,顯示全黑畫面;灰階為255的情況下,顯示全白畫面。液晶顯示器為了適應PC主機,所可接受的灰階信號范圍同樣是0-255。
256個灰階輸出圖,如果PC接電視,必然會有13%的灰階損失 而液晶電視是不同的,它的灰階范圍是16-235,當接收到信號16時,液晶電視將其還原成白色;當接收到信號235時,顯示全白畫面。電視的輸入設備,比如說有線電視信號、DVD影碟機等輸出的也是16-235的灰階信號。 液晶電視如果接收到了低於16的信號,會被認為是干撓,將不被顯示;如果接收到了高於235的信號,大部分液晶電視只能做削波處理,即仍當做235信號來處理。簡單點說,就是0-15全部顯示純黑,236-255全部顯示純白,中間的過渡全部損失。
(上面這一段是從“液晶電視與液晶顯示器的區別”中截取的一段)
總結
沒啥太大的區別。
如果偏色不嚴重,你也可以對客戶解釋說是顯示器的色差,而不是你的程序的問題。
