『漫游』酷论坛>『影音数码技术学习交流』>[请教]x264压制出来画 ..

qyqgpower@2008-06-07 22:38

楼上你别搞错了

LZ的源是MJPEG,Windows系统自带的MJPEG Decompressor输出是RGB32
而这个文件输出的RGB32是TV Scale
所以变换到YUV时,不可以对RGB进行clip,ConvertToYV12时需要使用PC系列的matrix
这样,得到的YV12是TV Scale,播放时就可以正确伸张了
引用

kzhou@2008-06-07 23:36

哦,没有矛盾。你说的那样直接一句ConvertToYV12(matrix="PC.709")就行。

关键楼主不知道用的啥解码。。。囧
但他自称看源时候色彩饱满,而且输出是YUY2。。
在那种情况下ConvertToRGB32 是有伸张的,
再ConvertToYV12(matrix="PC.709")
不对的
引用

minime@2008-06-08 03:14

我用AVISource和DirectShowSource得到的错误代码不一样

我用AVISource("D:\ng1.avi")
MeGUI的错误代码是
Your AviSynth clip is is the wrong colorspace, 1610612740.
The colorspace should by YV12. Do you want me to add ConvertToYV12() to the end of your script?


我用DirectShowSource("D:\ng1.avi",fps=59.940,audio=true)
MeGUI的错误代码是
avis [error]: unsupported input format (YUY2)

不知道对各位判断我机器上面的解码和输出色彩空间有没有帮助?

各位大大能不能用我提供的素材文件压一次x264?
然后看看是否也会出现我碰到的问题?
然后把解码器的设置告诉我?

万分感谢
引用

minime@2008-06-08 03:18

引用
最初由 kzhou 发布
哦,没有矛盾。你说的那样直接一句ConvertToYV12(matrix="PC.709")就行。

关键楼主不知道用的啥解码。。。囧
但他自称看源时候色彩饱满,而且输出是YUY2。。
在那种情况下ConvertToRGB32 是有伸张的,
再ConvertToYV12(matrix="PC.709")
不对的


那怎样才是对的?
引用

kzhou@2008-06-08 04:00

不知道为啥你的AVISource是出YUY2的。。我这里是直接出YV12,qyq大是RGB?

那你这样吧,
改成FFD解码MJPG并限定YV12输出,即把ffd解码设置里解码选项的MJPEG开启
再到最下面输出页面里,其它钩钩去掉只留YV12
然后DirectShowSource("D:\ng1.avi")
就行了

压出来对不对,把FFD里输出只留下RGB32来看才准。。
引用

su_xinling@2008-06-08 06:29

觉得mjpeg有分pc/tv scale2种,所以解码器的设置就很重要。LZ的源用ffdhsow默认的应该是对的,但是压制的时候说是YUY2这个就说明了又用了别的解码器,ffdshow默认会是YV12输出,megui-x264不会提示颜色空间不对。试过M$或virtualdub内置mjpeg解码出来是带灰色。
另外,我用quicktime/picvideo也压制比对了一下,貌似是pc scale的,这时候ffdshow默认YUV输出就伸张过度,要换rgb输出才行。quicktime/M$/virtualdub的解码这个时候出来的颜色是正确的。
引用

minime@2008-06-08 08:09

引用
最初由 su_xinling 发布
觉得mjpeg有分pc/tv scale2种,所以解码器的设置就很重要。LZ的源用ffdhsow默认的应该是对的,但是压制的时候说是YUY2这个就说明了又用了别的解码器,ffdshow默认会是YV12输出,megui-x264不会提示颜色空间不对。试过M$或virtualdub内置mjpeg解码出来是带灰色。
另外,我用quicktime/picvideo也压制比对了一下,貌似是pc scale的,这时候ffdshow默认YUV输出就伸张过度,要换rgb输出才行。quicktime/M$/virtualdub的解码这个时候出来的颜色是正确的。


估计调用了捕捉卡自己的编码器/解码器

那要如何强制让ffdshow解码mjpeg?
引用

su_xinling@2008-06-08 09:09

avs里用directshowsource的话,就到ffdsshow的ds设置里,把merit值调最大,打开mjpeg解码,并开启显示任务栏图标,这样解码的时候看看右下角任务栏就知道是不是调用ffdshow。如果走avisource的话,到ffdshow的vfw设置里开启mjpeg解码,然后先用virtualdub打开avi看看文件信息里是不是用了ffdshow解码,不是的话可以用avi fourcc code changer修改avi,把description code改成ffds。再不听话的话,考虑卸载其他mjpeg解码器。
引用

minime@2008-06-08 10:29

引用
最初由 su_xinling 发布
avs里用directshowsource的话,就到ffdsshow的ds设置里,把merit值调最大,打开mjpeg解码,并开启显示任务栏图标,这样解码的时候看看右下角任务栏就知道是不是调用ffdshow。


下载了一个最新的稳定版ffdshow
ffdshow tryouts official beta4 generic build (stable) December 24, 2007

可以强制ffdshow来解码了,而且可以直接压制,不用在avs里面添加色彩转换代码。

但是也出现分辨率减半的问题,ffdshow的mjpeg解码器不能用。

引用
最初由 qyqgpower 发布
这是MJPEG格式

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

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

roozhou@2008-06-08 10:41

我下了楼主的avi,mjpeg是4:2:2的。422P->RGB->420P和422P->420P结果会不同。
引用

minime@2008-06-08 10:51

引用
最初由 roozhou 发布
我下了楼主的avi,mjpeg是4:2:2的。422P->RGB->420P和422P->420P结果会不同。


嗯,查了一下厂家的数据:

Video Sampling 4:2:2.
Color Precision 4:2:2.
Color Space YUV 4:2:2

那要怎么办?
引用

roozhou@2008-06-08 11:31

avs这么写
directshowsource("F:\ng1.avi",pixel_type="YV12")
或者
directshowsource("F:\ng1.avi",pixel_type="YUY2").ConvertToYV12()

我用ffdshow解码,这两种结果居然不同。通过手工比较发现,Y值都正确,C值第一种有少量像素有偏差,第二种大部分像素偏大。看来avs里的ConvertToYV12误差比较大。
引用

superkidx@2008-06-08 11:48

pixel_type 应该就是ffdshow里面的那个吧 都是输出方式

ConvertToYV12 应该是做变换吧
引用

kzhou@2008-06-08 12:00

楼上这两句我在AvsP下肉眼看没区别。。。手工比不会 囧
话说我的ffd为什么没分辩率减半的问题,我的是终极解码带的
Mar 31 2007版本
顺便问哪里可以把merit值调最大,设置里没找到。
手动指定RGB输出时用709还是601也没找到,版本太老吗?
引用

roozhou@2008-06-08 12:01

以前以为4:2:2->4:2:0不会有太大问题,现在发现各种工具出来的结果有很大差异。

这个MJPEG本身是4:2:2的(交错源没办法),解码器输出YV12也要进行downsample。根据和422P人工逐字节比较发现ffdshow内置的转换器比avisynth的converttoyv12误差小很多。
引用

«1234567»共11页

| TOP