『漫游』酷论坛>『影音数码技术学习交流』>[请教]愁死我了,做DVD ..

[请教]愁死我了,做DVDRip怎么保证色彩的准确呢?

techneek@2007-02-26 21:08

话说我很久没做DVDRip了,昨天看到一部好片,激起了我Rip的欲望~

而且最近X264有这么热门,于是心血来潮用Xvid和X264各自压了一遍~

Xvid用的就是VDM,我好久没压片了,似乎截至目前为止XVID不用VDM也没别的好用吧?

CQ2压了一遍,效果很不错,挺爽~

然后开始压X264,既然都说VFW不适合X264,那么好我也用MeGUI,可惜这个超级垃圾软件满是bug~闹心死~
于是乎:X264 --longhelp > x264help.txt
自己慢慢研究CLI~研究了一会得出下面的方案:

引用


x264 -b 3 --b-pyramid -r 5 -q 18 -A all -w --me umh -m 6 --b-rdo --mixed-refs --bime -8 --no-fast-pskip --no-dct-decimate --progress -o test.mkv loveavs.avs



按这个压完了之后,放在MPC Player里播放,VMR9渲染,总感觉X264压出来的东西颜色更浓重一些~饱和度偏大~

于是乎又开始闹心,因为我始终也没把这个颜色的问题搞清楚弄明白~

究竟YV12,YUY2这些颜色格式,还有BT601,BT709这些色域,还有PC Level/Studio Level这些东西是怎么个来龙去脉啊?

怎么样才能保证DVDRip的颜色跟DVD本身对应,放出来是准的呢?

我自己先把我知道的零零碎碎地说一说,算是跑两块砖吧,希望高手出来给系统的讲一讲。

对于Xvid,我听说在VDM里,如果选“Full Compression”就需要做YUV->RGB的转换,这样会造成误差,所以一般用“Fast Recompression”,这样AVS输出的YV12就能直接进到Xvid Encoder里,保证色彩格式在压缩过程中无转换,这样颜色就准了。

我一直是这么记着的,但是这其中有好多问题并不是很清楚,为什么全程YV12就好?YV12数据量小,处理快这个理解,但是YV12记录颜色是不是不太精确啊?另外DVD里的记录格式是什么?就是YV12吗?还有YV12,YUY2,I420,IYUV这些格式都是用在哪里的,有什么区别和联系?另外,Xvid用YV12把东西压完了,那么decode的时候输出选什么?是no force,还是YV12?有什么区别?

另外还有BT601,BT709这些色域跟YV12,YUY2之间有联系吗?什么需要考虑BT601与BT709之间转换的问题?不转换会怎样?怎样确定片源的色域?因为我发现有的贴子里说DGindex报告的不一定是准的?具体是怎么个不准法?

还有关于PC Level/Studio Level(TV Level)的问题,DGindex里生成的D2V,喂到AVS里,这时作了(16-235)->(0-255)的拓展了吗?是不是默认没有做啊?也就是说BTB,WTW信息也都一并传到AVS里去了?这样的话Codec压出来的东西就也是TV Level的吧?是不是就应该这样做啊?但是又有一个问题,如果片子压好了用overlay渲染器播放,会自动拓展;但是用VMR9就没有自动拓展了,那看起来岂不是挺别扭的?何况现在VMR9渲染还更流行一些,我还听说NV的显卡驱动,把VMR9也给做成会自动拓展到PC Level了,属实吗?

关于X264,X264CLI居然能直接读AVS,挺神奇的,这是不是说明X264CLI直接就是全程YV12处理?那么Xvid里面的色彩格式的经验也是适用的?

一时间就想到这么多,罗罗嗦嗦问了一大堆问题,其实有一部分问题相信也能自己找到答案,只不过一股脑提出来,哪位高手有闲心的话,一股脑地回答出来也是件挺过瘾的事情~
:p
引用

shinjico@2007-02-27 08:47

你那是VMR9渲染YUV范围不对吧~ 看起来会有点灰
决定DVD颜色正确与否无非就YC伸张和YUV矩阵解码两步,全程YV12的话,YUV矩阵解码这步也省了,没有很复杂吧。
引用

techneek@2007-02-27 11:05

引用
最初由 shinjico 发布
你那是VMR9渲染YUV范围不对吧~ 看起来会有点灰
决定DVD颜色正确与否无非就YC伸张和YUV矩阵解码两步,全程YV12的话,YUV矩阵解码这步也省了,没有很复杂吧。


不是的,同样的片源,同样的VMR9渲染器,XVID和X264同样都是全程YV12,要发灰也是一起发灰~

Xvid实用Xvid decoder解码
X264使用CoreAVC解码(没开Fix VMR9选项)

解出来的东西都发灰,但是同桢截图比对,发现颜色上也有少许的差异,Xvid淡一些,X264饱和度大一些,尤其是红色。

另外有关“YUV矩阵解码”能详细介绍一下吗?从来没用过~

EDIT:刚才又仔细比对了一下,发现差别不是那么明显,难道我昨天眼花了?:o
引用

badchris@2007-02-27 11:55

应该是主观问题吧……都全程YV12差别很小的
引用

真正的问题应该是这个:AVS的颜色与压出来的东西不同~

techneek@2007-02-27 12:50

我做了这样一个试验:

用AVS生成一个colorbar,代码如下:
引用

Colorbars(320,240)
trim(0, 150)
ConvertToYV12()


生成的colorbar虽然经过色彩格式转换(RGB32->YV12),但是我并不关心这个误差。
然后用X264,XVID全程YV12分别对这个视频进行编码,得到结果后,互相之间比较颜色。

比较颜色时用的是photoshop的吸管工具,photoshop里面的color manage关闭。


下面是AVS在MPC播放器下的截图,VMR9渲染器:

下面是AVS在VDM中的截图:


经过比较这两幅图的色彩是一模一样的

下面是X264压出来的图片,编码全程YV12,CoreAVC输出也是YV12,Fix VMR9选项关闭 ,VMR9渲染器:

下面是XVID压出来的图片,编码全程YV12,XVID解码器其他默认,输出Force YV12,VMR9渲染器:



经过比较,XVID和X264的这两个图的色彩也是一模一样的!

但是问题就出在,压出来的图跟AVS在MPC里放出来的图颜色就差远了!

大家可以按照我的方法自己比较一下,最明显就是纯黑色,avs的colorbar里的纯黑色RGB都是16,16,16,而压出来的东西纯黑色都变成了RGB 35,34,35
再比如,中间的绿条,正常的colorbar应该是16 180 16,AVS里是16 180 15,压出来之后就变成12 192 7了,这不就差远了吗?

还有啊,不用吸管工具,用眼睛也能看出来,压出来的红色比原始的红色明显饱和度要大很多!
这是怎么回事???:confused:
引用

realsweet@2007-02-27 13:04

饱和度不同是output colorspace的关系
XVID和CORE都指定同一colorspace输出(比如RGB32),看上去就一样了
你264难道用了YUY2吗,CORE是讲优先级的,另外VOBSUB挂字幕也会再渲染,影响到output colorspace
记得默认是YUY2?VOBSUB设置里改成RGB就是了
引用

techneek@2007-02-27 13:11

引用
最初由 realsweet 发布
饱和度不同是output colorspace的关系
XVID和CORE都指定同一colorspace输出(比如RGB32),看上去就一样了
你264难道用了YUY2吗,CORE是讲优先级的,另外VOBSUB挂字幕也会再渲染,影响到output colorspace
记得默认是YUY2?VOBSUB设置里改成RGB就是了


两个codec的编码输入和解码输出都是YV12,我在贴子里已经讲明了,请看截图:
Xvid decoder设置:

CoreAVC设置:


而且,编码过程中根本没有涉及到任何字幕等其他插件,
avs的代码也写在贴子里了~
引用

又做了一个试验:

techneek@2007-02-27 13:54

我把压好的xvid视频和x264视频,又用Directshowsource()读了回去,用avs来放,同样使用的也是mpc+VMR9渲染器。

结果经过比较,与压缩前的avs放在mpc+VMR9中播放是一模一样的~

这是不是就说明了,颜色差异还是播放过程中造成的,而并非编码造成的呢?

X264 directshowsource()

Xvid directshowsource()
引用

techneek@2007-02-27 18:34

已经确定了,肯定是VMR9的问题,把Xvid和CoreAVC的输出强制为RGB就能做到颜色准确了~

不过关于color matrix什么时候需要的问题还没解决
引用

wolfsoft@2007-02-27 21:21

color matrix,vob文件用gspot打开后右上角显示为"BT109"时使用,不显示或者显示为ITU601时无视即可

更简单的说,如果是压HDTV,用;压日本动画的DVD,不用
引用

techneek@2007-02-27 23:06

引用
最初由 wolfsoft 发布
color matrix,vob文件用gspot打开后右上角显示为"BT109"时使用,不显示或者显示为ITU601时无视即可

更简单的说,如果是压HDTV,用;压日本动画的DVD,不用


可是文档上不是说不显示的话,就是没有标志,没有标志就按默认BT709处理吗?

这个事情一直不明白,好多1区,应该说大部分1区的碟都没有这个标志,对待这种碟到底用是不用啊?

还有就是对film的片源,要在IVTC之后用。
对interlace的片源,在de-interlace之前用的话,要开interlace=true这个选项,对不?
引用

shinjico@2007-02-28 09:09

日本TV动画DVD大多没旗标吧,都当BT601处理,剧场版常常会有,OVA有时~BTW,DG148没旗标都当BT701,对动画DVD来说这个是错的,所以一般不用DG输出RGB,喜欢AU或者TMPG开d2v的话,需手动修改d2v文件的色空间信息,这个可以参考狼叔那贴。

好来物的电影没弄过,不知。

interlace和progressive对应的UV采样位置不同,YUV转换公式也不一样,interlace=true 这个对应的是全交错源,例如NTSC30i。要用colormatrix,源要么是没有交错的,要么是全交错的,否则会有问题~
引用

techneek@2007-02-28 12:24

多谢楼上的~

如果decoder直接输出YV12给VMR9渲染器的话,那么转RGB是由什么来做的?使用什么矩阵?601还是709?PCscale还是TVscale?
引用

techneek@2007-02-28 16:55

另外,关于colormatrix还有一个问题,colormatrix默认会做TV->PClevel的拉伸,你们觉得应该这么做嘛?
引用

qyqgpower@2007-02-28 20:28

推荐使用haali video renderer,色彩输出非常准确
还有就是YV12 in VMR9似乎会受到显卡驱动中的“调整视频颜色设置”(NV卡)的影响,设置不对的话颜色就会错的离谱

转RGB的中间滤镜不太清楚,不过用ffdshow的话有high quality YV12 to RGB的选项,这个质量很好。又要说回来,用了haali video renderer,无论什么色空间的输出都能给我一个满意的画面

至于TV->PClevel,这要看个人趣味了,有的人喜欢在PC显示器上看TV Level的画面,有人就喜欢000的黑和255255255的白,但个人认为既然rip主要用途是在PC显示器上观看,那么就应该用PC Level

BTW,vista的wmp11播放时周围的blackbar是16 16 16的,EVR处理YV12也与VMR9如出一辙,这是不是意味着官方、或者至少微软官方认定TV Scale才是播放视频节目的正确选择
引用

«1234»共4页

| TOP