搜索 社区服务 统计排行 帮助
  • 11709阅读
  • 162回复

[请教]x264压制出来画面发白怎么办?

楼层直达
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 120楼 发表于: 2008-06-09
现在没有读这些东西的解码器,没用

YUV并没有在数字化时经过严格定义,BT.601和BT.709定义的都是YCbCr

我现在只能猜测,我们在计算机上称呼的YUV色空间其实都是YCbCr

好多地方的资料都把这两者混淆,有的资料意识到这两者并不相同,但也解释不清楚为什么在计算机上,YCbCr会被称为YUV
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 121楼 发表于: 2008-06-09
除了601和709,还有FCC和SMPTE 240等等,用得矩阵都不一样。
只是大部分情况下我们也不知道计算机上的YUV到底是用什么矩阵转的
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 122楼 发表于: 2008-06-09
colorimetry在MPEG2PS里有明确的定义bit,定义过的DVD当然可以看到使用的矩阵,例如Kanon和Clannad是SMPTE 170M=BT.601,而未定义的DVD现在一律assume为BT.470-2=BT.601
BD之类的不用多说,都是BT.709

问题在于,这些矩阵的对象都是YCbCr,而不是所谓的YUV,因为MPEG2里储存的是YCbCr,其他基于分量的数字图像格式也应该都是YCbCr。更简单地说,YUV是模拟制式的分量标准,怎么可能会在数字领域出现

那么我们在讨论的,计算机上的YUV系色空间到底是什么东西
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 123楼 发表于: 2008-06-09
These values are termed Y', U, and V. (In fact, this use of the term "YUV" is technically inaccurate. In computer video, the term YUV almost always refers to one particular color space named Y'CbCr, discussed later. However, YUV is often used as a general term for any color space that works along the same principles as Y'CbCr.)

http://msdn.microsoft.com/en-us/library/bb530104(VS.85).aspx

[/TX] 微软爷发话了,计算机上的所称的YUV就是Y'CbCr,我不继续纠缠了;)

附送BT601和709的最新版文档

[BT.601-6 (0107)] .pdf
http://www.namipan.com/d/1f63f02e51ef53a988ff86e77d308d5492ded9b5ced20600

[BT.709-5 (04_02)].pdf
http://www.namipan.com/d/84c482e5720bc0527cb1c7bc4d2cf24e6807d9f0fc120500
级别: 侠客
注册时间:
2005-12-16
在线时间:
5小时
发帖:
676
只看该作者 124楼 发表于: 2008-06-09
晕, 越来越复杂了么...

qyq大看过这篇没有:
http://bbs.et8.net/bbs/showthread.php?t=501147
我看下来的理解是YUV范围最广,只要把RGB换成Y+红蓝色度来储存就都是YUV
它包括模拟的YPbPr和数字的YCbCr.
计算机上的YUV系色空间应该就是数字的YCbCr格式....
但YCbCr->数字RGB的变换标准看来还是不唯一的....

引用
最初由 qyqgpower 发布
These values are termed Y', U, and V. (In fact, this use of the term "YUV" is technically inaccurate. In computer video, the term YUV almost always refers to one particular color space named Y'CbCr, discussed later. However, YUV is often used as a general term for any color space that works along the same principles as Y'CbCr.)

http://msdn.microsoft.com/en-us/library/bb530104(VS.85).aspx

[/TX] 微软爷发话了,计算机上的所称的YUV就是Y'CbCr,我不继续纠缠了;)

好吧..orz
那么YCbCr->数字RGB的变换捏, 就视频来说有601和709的不同吧?
JPG这种图片到底是按啥标准做YCbCr->数字RGB的变换的...

爱看看不看滚
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 125楼 发表于: 2008-06-09
JPG的YCbCr变换当然由JFIF定义

http://www.jpeg.org/public/jfif.pdf
级别: 风云使者
注册时间:
2006-03-12
在线时间:
54小时
发帖:
6604
只看该作者 126楼 发表于: 2008-06-09
你们好专业哈

有没人能告诉我
pixel_type 和 ConvertTo 有什么区别呢
还有X264那个关于601/709的参数设置 和 AVS里面转 有什么不同

级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 127楼 发表于: 2008-06-09
pixel_type是让解码器输出特定的格式,ConvertTo是AVS做的转换

x264的VUI设置不影响编码,作用是告诉解码器、渲染器应该如何处理已经编码好的东西
问题在于现在没有任何解码器和渲染器会去读取这个信息
级别: 侠客
注册时间:
2005-12-16
在线时间:
5小时
发帖:
676
只看该作者 128楼 发表于: 2008-06-09
比了下公式,不太一样, 猜测一下:
BT601和709是用来做YCbCr<->数字RGB(16~235); 或者YPbPr<->模拟RGB(16~235);的规范(搞错了,模拟RGB取值应该是0~1)
JPG那个是用来做YCbCr<->数字RGB(0,255)的规范

不知道搂主的MJPEG是用啥方案.....

爱看看不看滚
级别: 新手上路
注册时间:
2007-11-19
在线时间:
0小时
发帖:
145
只看该作者 129楼 发表于: 2008-06-09
引用
最初由 roozhou 发布


恩,x264只支持YUV 4:2:0。另外x264有一堆这样的参数
--colorprim Specify color primaries ["undef"]
- undef, bt709, bt470m, bt470bg
smpte170m, smpte240m, film
--transfer Specify transfer characteristics ["undef"]
- undef, bt709, bt470m, bt470bg, linear,
log100, log316, smpte170m, smpte240m
--colormatrix Specify color matrix setting ["undef"]
- undef, bt709, fcc, bt470bg
smpte170m, smpte240m, GBR, YCgCo
--chromaloc Specify chroma sample location (0 to 5) [0]

貌似可以让解码器按指定的矩阵输出RGB,不知道有没有用


曾经试过CoreAVCdec可的,BT709的源,在解码器设置为RGB输出时可以得到正确的颜色。但如果还是YUV输出,CoreAVC仅有pc/tv sclae的调整没有变换成601的YUV作用,仍然要靠后续渲染器/显卡来作。
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 130楼 发表于: 2008-06-09
引用
最初由 superkidx 发布
你们好专业哈

有没人能告诉我
pixel_type 和 ConvertTo 有什么区别呢
还有X264那个关于601/709的参数设置 和 AVS里面转 有什么不同

pixel_type是强制指定解码器的输出类型,如果和编码使用的颜色空间不符则由解码器完成色彩空间转换。

而ConvertTo由AviSynth的内置滤镜来完成色彩空间转换。

两种转换方式可能会使用不同的矩阵从而产生不同的结果。

X264不会做任何颜色空间转换,并且只接受YUV 4:2:0输入。里面的601/709参数不对编码造成任何影响,只是告诉解码器在将YUV转成RGB时使用相应的矩阵。

MJPEG->H264,所有处理过程都能在YUV色彩空间中进行,没有任何必要使用AviSynth的RGB<->YUV功能
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 131楼 发表于: 2008-06-09
引用
最初由 kzhou 发布
比了下公式,不太一样, 猜测一下:
BT601和709是用来做YCbCr<->数字RGB(16~235); 或者YPbPr<->模拟RGB(16~235)的规范
JPG那个是用来做YCbCr<->数字RGB(0,255)的规范

不知道搂主的MJPEG是用啥方案.....

我刚才就想把这段话编辑进去,最后想想还是算了。但果然有人看了pdf之后上当

BT系的pdf里
E'R/E'G/E'B指的是非线性(gamma corrected)的RGB,取值范围是0-1,而根据这个算出来的E'RD/E'GD/E'BD范围是16-235,这当然也是非线性的数字化RGB

我们通常说的0-255范围的RGB是线性
级别: 风云使者
注册时间:
2006-03-12
在线时间:
54小时
发帖:
6604
只看该作者 132楼 发表于: 2008-06-09
引用
最初由 roozhou 发布

pixel_type是强制指定解码器的输出类型,如果和编码使用的颜色空间不符则由解码器完成色彩空间转换。

而ConvertTo由AviSynth的内置滤镜来完成色彩空间转换。

两种转换方式可能会使用不同的矩阵从而产生不同的结果。

X264不会做任何颜色空间转换,并且只接受YUV 4:2:0输入。里面的601/709参数不对编码造成任何影响,只是告诉解码器在将YUV转成RGB时使用相应的矩阵。

MJPEG->H264,所有处理过程都能在YUV色彩空间中进行,没有任何必要使用AviSynth的RGB<->YUV功能


晕 又绕回来了
你是说 AVS的这句是不需要的?ConvertToYV12(matrix="PC.709")
缺了这句 X264直接报错啊 X264只支持YV12输入的啊

另外ConvertTo可以转601/709/PC/TV 但是pixel_type就不行吧

级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 133楼 发表于: 2008-06-09
引用
最初由 superkidx 发布


晕 又绕回来了
你是说 AVS的这句是不需要的?ConvertToYV12(matrix="PC.709")


另外ConvertTo可以转601/709/PC/TV 但是pixel_type就不行吧

看来你还是没明白,如果解码器输出是YUY2,你用ConvertToYV12(matrix=xxx)会报错的。RGB<->RGB,YUV<->YUV不存在601/709的说法。

pixel_type只是让解码器输出指定的颜色空间,如果解码器需要做颜色转换,用什么矩阵DirectShowSource是管不到的。

就像楼主的MJPEG,如果用M$的解码器输出RGB到avs,我们会遇到两个难题
1)不知道捕捉卡用的什么矩阵,假设为A
2)不知道MS的解码器用的什么矩阵,假设为B
如果A!=B,出来的RGB就是错的
现在你要压x264,又要用ConvertToYV12(Matrix=C)转成YUV。如果A,B,C三个都不一样,压出来的片子在放的时候应该用什么矩阵转RGB呢?

但如果换个支持YUY2输出的解码器,那downsample到YV12后就可以直接送x264了。放的时候只要用和捕捉卡相同的矩阵就可以得到正确的RGB颜色。
级别: 风云使者
注册时间:
2006-03-12
在线时间:
54小时
发帖:
6604
只看该作者 134楼 发表于: 2008-06-09
引用
最初由 roozhou 发布

看来你还是没明白,如果解码器输出是YUY2,你用ConvertToYV12(matrix=xxx)会报错的。RGB<->RGB,YUV<->YUV不存在601/709的说法。

pixel_type只是让解码器输出指定的颜色空间,如果解码器需要做颜色转换,用什么矩阵DirectShowSource是管不到的。

就像楼主的MJPEG,如果用M$的解码器输出RGB到avs,我们会遇到两个难题
1)不知道捕捉卡用的什么矩阵,假设为A
2)不知道MS的解码器用的什么矩阵,假设为B
如果A!=B,出来的RGB就是错的
现在你要压x264,又要用ConvertToYV12(Matrix=C)转成YUV。如果A,B,C三个都不一样,压出来的片子在放的时候应该用什么矩阵转RGB呢?

但如果换个支持YUY2输出的解码器,那downsample到YV12后就可以直接送x264了。放的时候只要用和捕捉卡相同的矩阵就可以得到正确的RGB颜色。


我当然知道RGB<->RGB,YUV<->YUV不存在601/709的说法。一般不会这样做的吧
问题是在RGB<->YUV pixel_type是较交给解码器去做转换 而ConvertTo可以手动设定 但是解码器可以根据片源自动正确识别并且转换么?COREAVC那个AUTO是否起作用?

这里的情况 你的意思是用其他解码器 比如FFD? 而不用系统自带的是么?

快速回复

限150 字节
上一个 下一个