① 视频设置中yuvj420p和yuv420p有什么区别
yuvj420p是一般是照相机拍出来的格式,和拍出来的jpg照片一样,灰阶范围是0-255,是pc主机的显示色彩;yuv420p是大部分摄像机拍出来的格式,灰阶范围是16-235,是tv主机的显示色彩,也是现在的主流格式。
差异在于,yuv420p格式的视频,在用pc主机(显示范围为0-255)进行播放的时候,会比yuvj420p格式的视频偏灰一些,因为它的灰阶范围是16-235,所以它的白定义为235,黑的定义为16,在pc主机上都不算是纯白或者纯黑。
② 2160pyuv420是4k吗
2160pyuv420是4k
160P,顾名思义即是3840×2160的分辨率,接近4K清晰度,几乎达到影院标准。横向3840个像素点,纵向2160个像素点。1080P为现在的全高清分辨率标准,也就是说2160P的清晰度达到了1080P的四倍。
③ 蓝光机HDMI输出RGB,全RGB,YCBCR,YCBCR422 选哪个画质最好
HDMI高清接口画质最好
1:HDMI接口可以传输的视频支持高清1080I,高清720P,普通隔行和普通逐行
2:同时支持NTSC和PAL电视制式
3:可以根据接受端可以接受的视频状态自动输出YU或RGB编码的视频格式
4:而HDMI 1.4支持RGB 24Bit、YUV 420、YCbCr 444、YCbCr 420。
④ 4k视频文件的码流是多大
这样算
例如
输入码率:
7680x4320分辨率, 10比特 YUV420采样,60fps帧率
7680 x 4320 x 15 bit/pixel x 60fps = 29.86 Gbps
⑤ 蓝光机HDMI输出RGB,全RGB,YCBCR,YCBCR422 选哪个画质最好
HDMI高清接口画质最好
1:HDMI接口可以传输的视频支持高清1080I,高清720P,普通隔行和普通逐行
2:同时支持NTSC和PAL电视制式
3:可以根据接受端可以接受的视频状态自动输出YU或RGB编码的视频格式
4:而HDMI 1.4支持RGB 24Bit、YUV 420、YCbCr 444、YCbCr 420。
⑥ YUV格式小结
☞ 对格式采样的理解
提出yuv格式的原因,是为了解决彩色电视和黑白电视兼容性问题,因此从rgb的颜色空间,转换为yuv的颜色空间,其中y代表亮度,u和v代表色度。
yuv种类分为很多,可以理解是一个 二维的 ,即空间间,和空间内,这样的表述,借鉴了h264中的帧间和帧内的思想
为什么这么说呢?
下面分别从这两种情况阐述一下这个观点:
空间-间 :不同空间,即描述一个像素的bit数不同,比如yuv444,yuv422,yuv411,yuv420
空间-内 :相同空间,即描述一个像素的bit数相同,但是存储方式不同,比如对于yuv420而言,又可细分为yuv420p,yuv420sp,nv21,nv12,yv12,yu12,I420
因此,我们在理解yuv格式时,时刻需要记住要从bit数,和存储结构两方面考察
☞ 对于4的理解
为什么yuv444,yuv420,yuv422,yuv411都是用的4呢?
我仔细的研究了一下,
首先yuv的命名方式和rgb的命名方式是不相同的,如果是rgb4444,这里的数字代表的是不同颜色分量所占的bit数
这里,rgb4444代表alpha 4bit,red 4bit,green 4bit,blue 4bit,从宏观上看,是16bit,也就是2字节,但是从微观上看,是以bit区分的
yuv的命名方式则不是这种情况,yuv不会分细到bit级别,最低最低的单位,也是1字节,即8bit,说到这里,就会抛出一个问题,
难道每个像素点都需要至少1字节的整数倍来描述吗?
如果说描述的最小单位是1字节,那么每个像素都是由y,u,v共同描述的,难道说明每个像素点至少都是
来描述吗?显然这是不合理的,因为人眼对y是很敏感的,但是u和v是可以在一定程度上压缩的,也就是说,同一个像素点,u和v的描述可以小于1字节,那么这是不是和最小单位为一字节矛盾呢? 答案是不矛盾,因为用到了共享的思想,这是yuv和rgb的本质区别
rgb是一个像素是一个家庭,家庭成员是r,g,b,但是yuv是若干像素是一个家庭,不同像素的y共享同一个u和v ,这样,引入了共享的思想,虽然最小单位是一个字节,但实际上描述一个像素点的字节,不一定是字节的整数倍
该进入正题了,为什么是4?因为这个4,实际上表达了共享的最大单位!也就是最多4个像素进行共享,因此4实际上是隐含的采样全集
☞ 不同空间下yuv格式
这里从空间的角度考虑yuv格式
① yuv444
那么yuv444代表什么呢?就是最完整的最理想的最奢侈的状态,
这无疑是最理想的状态了y,u,v都为4,说明大家都是满的
② yuv422
那么,yuv422呢?说明这里,u由4变为2,v由4变为2,也就是在原来满的情况下,每行需要去掉两个u和两个v
如何去掉呢?最简单的方法就是第一个点保留u,第二个点保留v,第三个点保留u,第四个点保留v ..
图示如下:
在这张图中,显然一个家庭的成员为
也就是两个像素点共享uv
③ yuv411
yuv411又是什么情况呢?显然在原来yuv422的基础上,每行再去掉一个u和一个v
图示如下:
这个家庭的成员为
也就是四个像素点共享uv
④ yuv420
yuv420的意思似乎是在yuv422的基础上,再拿掉两个v,这样不就没有v了吗?
其实yuv420的取名方式不是很高明, 更确切的命名为yuv420yuv402
也就是第一行只有两个u,而第二行只有两个v
图示如下:
[ y v ] [ y ] [ y v ] [ y ]
仔细体会yuv420和yuv411的区别
对于yuv420而言,这个家庭的成员为
也是四个像素点共享uv,但是这个家庭显然比yuv411的家庭关系更近一些
思考:从这个课题讨论来看,我们是否可以进一步提高yuv的压缩效率?可以更多y共享uv吗?可以自适应吗?
小结:从这里可以看出,yuv211和yuv422显然格式上是不一样的,因此这里的数字不仅仅代表了比例,还代表了实际的值
☞ 三种格式packet,planar,semi-plane
在这一课题,我们探讨一下相同bit数的不同存储格式,主要讨论yuv422和yuv420
packet是打包格式,即存储yuv,然后再存储下一个yuv ..
planar是平面格式,即先存储y平面,再存储u平面,最后存储v平面
semi-planar是两个平面,正常的planar是三个平面,即y平面,u平面,v平面,现在的semi-planar是两个平面,也就是说uv为同一个平面,即一个y平面,一个uv平面
① yuv422
yuyv(yuy2)
uyvy
yuv422p(yu16)
或(yv16)
[ v v v v ]
[ v v v v ]
[ u u u u ]
[ u u u u ]
yuv422sp(nv16)
或(nv61)
② yuv420
yuv420p(yu12 / I420)
或(yv12)
yuv420sp(nv12)
或(nv21)
☞ 对nv系列理解
常见的有nv12,nv21,nv16,nv61等,这里代表什么意思呢?
其实nv系列,都属于semi-plane系列
这里nv12表示正常的顺序,即uv plane,先是u,然后是v
而nv21表示相反的顺序,即uv plane,先是v,然后是u
同样,nv16和nv61的区别也是仅仅是uv的次序而已
这里的12和16又代表什么呢?实际上代表的是一个像素所占的位数!
以nv12为例,表示一个像素占用12bit,其中y是定死的占8bit,也就是u占2bit,v占2bit,实际上就是yuv420格式,具体而言是yuv420sp格式
nv16,则表示一个像素占用16bit,其中y是定死的8bit,也即是u占4bit,v占4bit,实际上就是yuv422格式,具体而言是yuv422sp格式
⑦ RGB与YUV
每个像素用1个bit表示,可表示的颜色范围为双色,即最传统的黑和白。1个bit只能表示0,1两种值。需要调色板,不过调色板只包含两种颜色。
每个像素用4个bit表示,4个bit所能够表示的索引范围是0-15,共16个。也就是可以表示16种颜色。即调色板中包含16中颜色。
每个像素用8个bit表示。8个bit所能够表示的索引范围是0-255,共256个。也就是可以表示256中颜色。即调色板中包含256中颜色。
RGB像素格式中的bit存储的是每一个像素点的R,G,B值
一个像素用16个bit = 2个byte表示 ,R=5 G=6 B=5
为什么绿色为6位?
一个像素用16个bit = 2个byte,但是最高位不用,R=5 G=5 B=5
RGB24图像每个像素用8个bit,共24个位表示,共3个字节,注意:在内存中RGB各分量的排列顺序为:BGR
RGB32图像每个像素用32个bit表示,占4个byte,R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个字节保留。注意:在内存中RGB各分量的排列顺序为:BGR
RGB32图像每个像素用32个bit表示,占4个字节,R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个为透明像素。注意:在内存中RGB各分量的排列顺序为:BGRA
注意:java默认使用大端字节序,c/c++默认使用小端字节序,android平台下Bitmap.config.ARGB_8888的Bitmap默认是大端字节序,当需要把这个图片内存数据给小端语言使用的时候,就需要把大端字节序转换为小端字节序。例如:java层的ARGB_565传递给jni层使用时,需要把java层的ARGB_565的内存数据转换为BGRA565。
详细验证请看: Android Bitmap像素排列与JNI操作
YUV有很多变种,我们常说的YUV指的是YCbCr,YUV三个字母中,其中”Y”表示明亮度(Lumina nce或Luma),也就是灰阶值;而”U”和”V”表示的则是色度(Chrominance或Chroma)作用是描述影像色彩及饱和度,用于指定像素的颜色。Cb指蓝色色度分量,而Cr指红色色度分量,是标准 YUV 的一个翻版(还有YPbPr等),此文中,我们就用 YUV 指代 YCbCr 了。
首先,YUV按照数据大小分为三个格式,YUV420,YUV422,YUV444。由于人眼对Y的敏感度远超于对U和V的敏感,所以可以多个Y分量共用一组UV,这样既可以极大的节省空间,又可以不太损失质量。
按照多个 Y 分量共用一个 UV 的方式,我们可以把 YUV 分为 420,422,444 三种类型,而在这三种类型之下,我们又可以按照 YUV 的排列储存顺序,将其细分为好多种格式,这些格式数量繁多,又不好记忆,这为我们学习过程中造成了不少困难。下面我就为大家一一介绍。
首先,我们将可以按照 YUV 的排列方式,再次将 YUV 分成三个大类,Planar,Semi-Planar 和 Packed。
Planar YUV 三个分量分开存放
Semi-Planar Y 分量单独存放,UV 分量交错存放
Packed YUV 三个分量全部交错存放
按照这三种方式,我们就可以将 YUV 格式进行比较细致的分类了。
YUV的所有格式列表
一张从上到下分别为原图、Y、U 和 V:
YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit,也就是一个字节。
如下图所示:
其中,Y 分量用叉表示,UV 分量用圆圈表示。
举个例子 :
假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
最后映射出的像素点依旧为 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
最后映射出的像素点依旧为 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
可以看到这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。
YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。如果水平方向有 10 个像素点,那么采样了 10 个 Y 分量,而只采样了 5 个 UV 分量。
如下图所示:
举个例子 :
假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3] 那么采样的码流为:Y0 U0 Y1 V1 Y2 U2 Y3 V3
其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
最后映射出的像素点为 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:Y0 U0 Y1 V1 Y2 U2 Y3 V3 其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
最后映射出的像素点为 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
采样的码流映射为像素点,还是要满足每个像素点有 Y、U、V 三个分量。但是可以看到,第一和第二像素点公用了 U0、V1 分量,第三和第四个像素点公用了 U2、V3 分量,这样就节省了图像空间。
一张 1280 * 720 大小的图片,在 YUV 4:2:2 采样时的大小为:
可以看到 YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。
YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。
如下图所示:
假设第一行扫描了 U 分量,第二行扫描了 V 分量,那么需要扫描两行才能够组成完整的 UV 分量。
举个例子 :
假设图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3][Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
那么采样的码流为:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
最后映射出的像素点为:[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7][Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
假设图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3][Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
那么采样的码流为:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
最后映射出的像素点为:[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7][Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
从映射出的像素点中可以看到,四个 Y 分量是共用了一套 UV 分量,而且是按照 2*2 的小方格的形式分布的,相比 YUV 4:2:2 采样中两个 Y 分量共用一套 UV 分量,这样更能够节省空间。
一张 1280 * 720 大小的图片,在 YUV 4:2:0 采样时的大小为:
可以看到 YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。
YUV 的存储格式,有两种:
YUYV 格式是采用打包格式进行存储的,指每个像素点都采用 Y 分量,但是每隔一个像素采样它的 UV 分量,排列顺序如下:
UYVY 格式也是采用打包格式进行存储,它的顺序和 YUYV 相反,先采用 U 分量再采样 Y 分量,排列顺序如下:
YUV 422P 格式,又叫做 I422,采用的是平面格式进行存储,先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量。
基于 YUV 4:2:0 采样的格式主要有 YUV 420P 和 YUV 420SP 两种类型,每个类型又对应其他具体格式。
I420 的单帧结构示意图如下(Planar 方式)
这幅图的上面一幅可以看出 Y1、Y2、Y7、Y8 共用 U1 和 V1。后面的线性数组为其存储顺序,可以看出 Y、U 和 V 都是顺序存储的,往外写的时候,先按顺序将 Y 分量写出,然后再根据 U、V 分别将它们依次写出即可。
NV12的单帧结构示意图如下(Planar 方式)
可以看出与 YV12 不同的时,它的 Y 虽然也是顺序存储,但 U、V 却是交错存储的,这种方式存储在往外写出时则先直接顺序写出 Y,然后对 UV 分别依次写出。
PS:Android的Camera Preview默认图像格式为NV21。
把RGB和YUV的范围都缩放到[0,255]
YUV转RGB
RGB转YUV
参考资料:
图片RGB数据格式
一文读懂 YUV 的采样与格式
视音频数据处理入门:RGB、YUV像素数据处理
Android Bitmap像素排列与JNI操作
YUV420_SVG
⑧ PS4 Pro 4K输出2160p YUV420和2160p RGB有什么区别
rgb跟yuv420都是表示色度抽样方式。yuv420是一种有损压缩的数据,是为了让hdmi1.4版本的设备也支持2160p@60hz,而rgb则是未经压缩的数据,可以让支持hdmi2.0版本的设备以2160p@60hz显示未经压缩的原始数据。yuv420的画质是不如rgb的,就跟音频的mp3压缩格式不如wav无损格式一个道理。
⑨ 4k分辨率 电影 444和420差距
YUV444 色度信号分辨率最高的格式是YUV4:4:4,每4点Y采样,就有相对应的4点U和4点V。换句话说,每个Y值对应一个U和一个V值。