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

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

楼层直达
级别: 侠客
注册时间:
2005-12-16
在线时间:
5小时
发帖:
676
只看该作者 15楼 发表于: 2008-06-06
引用
最初由 minime 发布


直接丢avs到播放器没变化

但是并不能说明什么问题

很多代码avs能播放,但是放到MeGUI里面就会报错

他是问你颜色有没有不一样, 一样的话就不是压制问题

你用的FFD+VMR9(renderless) 一般不做YC伸张, 所以发灰
机器好可以把FFD的输出改成RGB, 机器不好就用覆盖合成器渲染(overlay)

爱看看不看滚
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 16楼 发表于: 2008-06-06
YUY2->ConvertToYV12 不会做任何扩张或压缩

现在LZ需要确认的是:源在解码后输出的YUY2到底是pc scale还是tv scale

如果是PC游戏录像的话,录制出来的YUV就是PC Scale的,所以用Haali渲染器播放需要选择PC Scale(也就是不进行扩张)才能获得正确颜色

但如果真这样,就发生矛盾了

如果源是PC Scale的YUY2,那么ConvertToYV12得到的YV12也应该是PC Scale的,压出来的H264也应该是PC Scale的,但LZ现在得到的H264中的YUV是TV Scale,那么到底是哪一步发生了clip呢
级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 17楼 发表于: 2008-06-07
引用
最初由 qyqgpower 发布
YUY2->ConvertToYV12 不会做任何扩张或压缩

现在LZ需要确认的是:源在解码后输出的YUY2到底是pc scale还是tv scale

如果是PC游戏录像的话,录制出来的YUV就是PC Scale的,所以用Haali渲染器播放需要选择PC Scale(也就是不进行扩张)才能获得正确颜色

但如果真这样,就发生矛盾了

如果源是PC Scale的YUY2,那么ConvertToYV12得到的YV12也应该是PC Scale的,压出来的H264也应该是PC Scale的,但LZ现在得到的H264中的YUV是TV Scale,那么到底是哪一步发生了clip呢


我是用捕捉卡采集的XBOX360上面的视频
应该是tv scale的

我只是想让素材和压出来的东西不管用什么渲染方式都保持一致的色彩
这对发布后让每个人的感受一致是非常重要的

要不然调来调去就没意思了。而且调整了渲染方式也还是跟素材色彩不一致。只是看起来没那么灰而已
级别: 侠客
注册时间:
2005-12-16
在线时间:
5小时
发帖:
676
只看该作者 18楼 发表于: 2008-06-07
不管本来是什么scale, 你录下来的源和转压的YV12应该是一个颜色范围的才对
所以你还是回答一下roozhou的问题,
avs里看两者有无颜色区别, MPEG2和H264解码器各用的什么?

爱看看不看滚
级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 19楼 发表于: 2008-06-07
引用
最初由 kzhou 发布
不管本来是什么scale, 你录下来的源和转压的YV12应该是一个颜色范围的才对
所以你还是回答一下roozhou的问题,
avs里看两者有无颜色区别, MPEG2和H264解码器各用的什么?


avs直接放到播放器截图
有ConvertToYV12()命令与否色彩没区别

------------------------------------

MPEG2和H264解码器在ffdshow设置里面各用的
libmpge2/libavcodec


我把素材源文件上传了。各位大大看看是怎么回事

http://www.mgcn.com/members/zbws/ng1.rar
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 20楼 发表于: 2008-06-07
这是MJPEG格式

ffdshow解码在我这里有问题(分辨率减半的感觉),暂不讨论

使用系统自带的MJPEG解码器,输出RGB32
加上ConvertToYV12(matrix="pc.709")即可得到正确的YV12色彩

到播放环节,“每个人看到的都一致”是不可能的,影响最后输出的因素太多,你能保证所有人的软件设置、硬件配置都一样么
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 21楼 发表于: 2008-06-07
色彩问题只发生在YUV<->RGB过程中。

请把所有解码器的输出都设成YV12,MJPEG和H264都是YUV,这样所有的处理都不需要色彩空间的转换。如果不放心可以把ffdshow里output里RGB的勾全部去掉。
级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 22楼 发表于: 2008-06-07
引用
最初由 qyqgpower 发布
这是MJPEG格式

ffdshow解码在我这里有问题(分辨率减半的感觉),暂不讨论

使用系统自带的MJPEG解码器,输出RGB32
加上ConvertToYV12(matrix="pc.709")即可得到正确的YV12色彩

到播放环节,“每个人看到的都一致”是不可能的,影响最后输出的因素太多,你能保证所有人的软件设置、硬件配置都一样么


我这个是捕捉卡自带的MJPEG编码
sorry,没能提供解码器

我试验了一下,用以下两行代码
ConvertToRGB32
ConvertToYV12(matrix="PC.709")
果然能得到正确的色彩。

不过我试验了下,pc.709还是偏暗,用pc.601才是正确的

以下是截图


级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 23楼 发表于: 2008-06-07
引用
最初由 roozhou 发布
色彩问题只发生在YUV<->RGB过程中。

请把所有解码器的输出都设成YV12,MJPEG和H264都是YUV,这样所有的处理都不需要色彩空间的转换。如果不放心可以把ffdshow里output里RGB的勾全部去掉。


你的方法也试过了,把所有的RGB勾掉还是发白

嗯,这个问题真的是出现在压缩的时候,跟解码器无关
只是单单的ConvertToYV12就会发白
级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 24楼 发表于: 2008-06-07
引用
最初由 qyqgpower 发布

到播放环节,“每个人看到的都一致”是不可能的,影响最后输出的因素太多,你能保证所有人的软件设置、硬件配置都一样么


你没看懂我的意思啊

我说的一致是至少素材和发布后的东西拿到任意一台机器上播放色彩应该一致

而不是强求压制者机器上看起来跟任意一台机器上看起来效果一致。这明显不现实

无论如何,谢谢你啦

这个问题终于搞定了
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 25楼 发表于: 2008-06-07
HDTV应该用709变换,601变换是错误的
错误的现象体现在红色偏暗,绿色偏亮

但变换和播放都必须要709
也就是说,RGB->709->YV12->编码->解码->YV12->709->显示器

由于计算机系统默认的YUV变换是601的,所以你现在看到的是
RGB->709->YV12->编码->解码->YV12->601->显示器

现在只有
Vista的EVR渲染器(包括DXVA2)
Haali渲染器
XP下的DXVA(必须N卡8系以上,7系的DXVA没有709变换,A卡别问我)

才会对HDTV进行709变换
级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 26楼 发表于: 2008-06-07
引用
最初由 qyqgpower 发布
HDTV应该用709变换,601变换是错误的

如果709的画面你觉得不正确,有可能的是,你的采集卡把采集到的YUV以601方式变换成RGB保存在了MJPEG中,


为啥HDTV应该用709变换?

游戏机的输出跟广播信号不同的吧?

如果你把我上面的三张截图保存后顺序切换
你就会明显看出709变换的稍暗
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 27楼 发表于: 2008-06-07
游戏机输出的HD信号当然必须符合广播标准,开什么玩笑,不然你在HDTV电视上看到的颜色都不正常了
级别: 新手上路
注册时间:
2004-12-22
在线时间:
0小时
发帖:
156
只看该作者 28楼 发表于: 2008-06-07
引用
最初由 qyqgpower 发布
HDTV应该用709变换,601变换是错误的
错误的现象体现在红色偏暗,绿色偏亮

但变换和播放都必须要709
也就是说,RGB->709->YV12->编码->解码->YV12->709->显示器

由于计算机系统默认的YUV变换是601的,所以你现在看到的是
RGB->709->YV12->编码->解码->YV12->601->显示器

现在只有
Vista的EVR渲染器(包括DXVA2)
Haali渲染器
XP下的DXVA(必须N卡8系以上,7系的DXVA没有709变换,A卡别问我)

才会对HDTV进行709变换


晕了,那现在的情况就是我用Haali渲染器的情况下

601比709的颜色正确。看刀柄就很明显
709的明显暗一点

何解?
级别: 侠客
注册时间:
2005-12-16
在线时间:
5小时
发帖:
676
只看该作者 29楼 发表于: 2008-06-07
问题就是你的解码,不是压缩过程。本来对的你觉得灰,现在压错了你觉得对了。

首先我要说的是你的这个源只要一句
AVISource("C:\ng1.avi")
就可以压264,你说输出YUY2需要加YV12应该是你解码器设置有误的问题,改成FFD解码MJPG并限定YV12输出即可


另外再来看一下你用的这两行
ConvertToRGB32
ConvertToYV12(matrix="PC.709")

matrix这个参数:
unspecified : Use Rec.601 coefficients, scaled to TV range [16,235]. 用601规则变换,做YC伸张或压缩
"PC.601" : Use Rec.601 coefficients, keep full range [0,255]. 用601规则变换,不做YC伸张或压缩
"Rec709" : Use Rec.709 coefficients, scaled to TV range. 用709规则变换,做YC伸张或压缩
"PC.709" : Use Rec.709 coefficients, keep full range. 用709规则变换,不做YC伸张或压缩

不论你ConvertToYV12用PC.709还是PC.601,都不做YC压缩,而不做YC压缩是肯定错的,上面说过了,你的播放设置有问题(放264不做YC伸张,放

MJPG时做YC伸张)。于是你看264时错错得正,所以你看起来才会和源一样亮,而实际上把这个结果给一个设置正常的人看是有问题的(色彩过浓)

。什么叫设置正常,上面说过了,限制FFD输出为RGB,把其它的钩去掉,或者用yv12输出+覆盖合成器。你先限制FFD输出为RGB再把你所谓“正确”的压制结果用播放器看看就知道了。


最后是709和601的问题,
经试验ConvertToRGB32默认相当与用参数 matrix="Rec601",所以你用709变换回去就不如601更接近源。

爱看看不看滚
快速回复

限150 字节
上一个 下一个