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

DVDRIP过程中YC伸张与YC压缩的实验(发布离线pdf版)

楼层直达
级别: 工作组
注册时间:
2002-10-27
在线时间:
0小时
发帖:
1165
PS.更多的图请看http://www.dgwxx.net/nmmbbs/viewthread.php?tid=622,全折腾过来太慢了……
4月17日更新,发布PDF版,方便离线浏览:
http://www.vempx.net/vempx/download/NMM_YC_Test_v1.1.rar

4月16日中午12:00更新:
mpeg2source不会进行YV伸张,而是直接输出原始数据。谢谢qyqgpower 指出。

4月16日早7:00更新:
添加了测试用影片,测试您播放时的YC伸张是否准确。只有上面的白色是235、下面的白色是255时才是正确播放。
http://www.dgwxx.net/files/colorbar_for_yc_test.m2v
此外请大家注意到,本文不是我一个人所写,有两部分是VempX所写的哦~大家不要忘记他。
============================================
正文:
YC伸张与YC压缩是一个从Silky大人时代就留下来的古老问题。包括我在内的很多人都没搞明白,制作和播放的时候提心吊胆,生怕弄错了颜色。最近正好没事,进行了一系列的实验,看看YC伸张和YC压缩到底是真么回事。本文的阅读对象是已经知道YC问题的由来,但不知道如何处理的读者,如果您还不知道什么是YC伸张和压缩,推荐您先去复习一下Silky的文章。
本次实验分为四个部分,分别是准备篇、AVS篇,AU篇和播放篇,由我和VempX分别进行自己熟悉的部分。
限于作者水平,或许会有疏漏错误,请多指教。

准备篇
By Dgwxx.
为了正确判断出软件是否进行了YC伸张和压缩,就需要一把标准的尺子,因此彩条Colorbar成了最合适的尺子。因为普通的彩条难以判断黑、白、红、绿、蓝的范围,所以我们用Photoshop制作一张专门用来判断颜色、亮度范围的640*480的彩条图片,保存为24bit bmp格式。彩条上半部分的颜色范围为16~240,黑白部分为16~235(601 Range)。下半部分全部为0~255(Full range),用于进行对比。
之后,使用使用以下AVS代码将bmp图片生成一个5秒钟的短片。
  1. #AVS代码1:
  2. ImageSource ("colorbar.bmp",end=149)
  3. AssumeFPS("ntsc_video")
将这个短片送入TMPGEnc压缩成MPEG2格式。压缩时,打开TMPGEnc的YC压缩选项,此时图像上部为30~217,下部为16~235。
观察时:

    [*]图像上部为30~217、下部为16~235,则没有进行YC伸张。
    [*]图像上部正常回复为601 Range、下部为Full range则判断为进行了一次YC伸张。
    [*]如果上下全都变成了0~255的Full range,则是进行了两次YC伸张。

只有中间的结果是正确的。
观察AVS时使用下面代码
  1. #AVS代码2,部分实验upconv参数有改动:
  2. loadplugin("e:\gk\dgmpgdec\DGDecode.dll")
  3. mpeg2source("colorbar_with_yc_compress.d2v",upconv=[b]0[/b])
AVS篇
By VempX.
AVS压DVDRIP主要来源于DGMPGDec。
通过对彩条的观察得知,通过VDM打开AVS,会发现无论YUV-> RGB选项如何选择,画面都会是Full Range,也就是0-255,这是为什么呢?因为YUV是无法直接在PC上显示的,必须转成RGB才能显示出来。VDM会自动调用系统的ColorSpace转换滤镜进行转换,这个转换过程会做一次YC伸张,所以在VDM里显示出来的色彩会是Full Range。DGMPGDec解码出来的仍然是没有进行YC伸张的原YV12数据。而vfapi插件、预览图像、保存BMP选项受菜单中YUV -> RGB的影响,PC Scale会进行YC伸张,而TV Scale不会进行YC伸张(注意,是“不伸张”,而不是“压缩”!)。
所以AVS里的是原始的YV12数据,再次强调一下,除了全程YV12之外,不要在AVS里动颜色!

正确的图:


Aviutl篇
By Dgwxx.
首先我们拿到DVD之后需要进行的是解码。对于AU来说,解码主要分为两个解码器、三条途径。两个解码器分别是M2V和DGMPGDec。M2V与AU结合有两条途径,分别是aui与vfapi。而DGMPGDec与AU结合只有vfapi一条途径。
我们先看相对简单的DGMPGDec
DGMPGDec的vfapi插件是DGVfapi.vfp,正式名称叫做DGMPGDec D2V/AVS Reader。不同版本在AU中出现的名称会加上版本号,但基本的名字是这个。如果你注册了DVD2AVI(现在可能很少有人记得这个软件了)的vfapi插件,那么就需要在输入插件的优先顺序调节中将DGMPGDec的优先度调高,避免DVD2AVI的vfapi插件误食引起麻烦。
我们将DGIndex生成的索引文件d2v拖拽到au界面之后,au会通过DGMPGDec的vfapi插件打开这个d2v文件。这一点通过「その他」中「ファイル情報」对话框的「ファイル制御」一项确认。
DGIndex及DGMPGDec控制是否进行YC伸张的秘密在于DGIndex中Video菜单下YUV -》 RGB选项。这个选项对于DGIndex的预览图像、File菜单下的Save BMP选项、vfapi解码得到的图像起作用,对于其avs解码插件mpeg2source不起作用,mpeg2source不会进行YC伸张,回直接输出原始数据。
用文本编辑器打开.d2v文件之后就会发现有一个项目叫做YUVRGB_Scale,对应YUV -》 RGB的选项,当值为1的时候,vfapi解码器会做YC拉伸,否则不会。这个选项在avs中使用mpeg2source载入d2v的时候会被忽视,不做YC拉伸。

再来看M2V
M2V可以通过vfapi方式与AU结合(m2v.vfp),同时也具备专供AU的输入插件(m2v.aui)。前者经注册后在AU中的名字是MPEG-2 VIDEO Plug-In,后者的名字是MPEG-2 VIDEO File Reader。前者向AU输出RGB颜色空间,后者则是YUY2。使用的时候一定要注意想要把解码任务交给谁,调整好插件的优先级。
M2V调节是否做YC拉伸的选项在于m2vconf.exe中YUV Range一项。这里调节的是片源的属性,而不是输出的属性。
当选择ITU-R BT.6011 Range的时候,MPEG-2 VIDEO Plug-In会进行YC拉伸。
当选择Full Range的时候,MPEG-2 VIDEO Plug-In不会进行YC拉伸。
也就是说YUV Range只对MPEG-2 VIDEO Plug-In起作用,而MPEG-2 VIDEO File Reader则始终会进行YC拉伸。
YUY2 Matrix选项与YC压缩拉伸无关,是选择MPEG-2 VIDEO File Reader颜色转换公式用的。

播放篇
By VempX.
我们用一个色彩正确的ColorBar方案用AVS脚本,并直接送给x264压制,得到了一个mp4,现在我们知道这个mp4的颜色是正确的。

播放器:Media Player Classic Home Cinema
解码器:ffdshow
分离器:Haali
显卡: GeForce 8600GT

我会试图用几种组合告诉大家如何得到正确的播放结果。

1. VRM9无渲染+ffdshow YV12输出 颜色错误

2. VRM9无渲染+ffdshow RGB32输出 颜色正确

3. Haali渲染器+ffdshow YV12输出颜色正确

4. 覆盖合成器+ffdshow YV12输出颜色错误(存疑)

5. 覆盖合成器+ffdshow RGB32输出颜色正确


首先来说RGB,当YUV转换到RGB时,就已经做了一次YC伸张,所以颜色已经是正确的,VRM9渲染器是无法对RGB色彩数据做处理的,所以最后会得到正确的结果。
而Haali的渲染器,功能可谓十分强大。它可以自动判断601或709,并且可选是否做YC伸张。当使用Haali的渲染器时,他会根据视频窗口大小和视频源分辨率来自动做不同的高品质Resize,品质要远远高于播放器自带Resize。
这两个方案都有各自的弊端。Haali的渲染器现在还不能用它打开硬解。ATI的显卡貌似也是同样的问题(感谢冰冷的心提供资料),而且ATI的显卡还可能存在Resize的瑕疵。覆盖合成器无法保存图像和使用QQ截图,十分不方便。RGB输出对系统资源消耗太大。
这时我们就要用到VRM9无渲染的厉害功能了。我们使用VRM9无渲染,在播放时单击右键,可以找到渲染菜单,里面默认会有一个16-235 -> 0-255,我们勾上这个,就会得到YC伸张的画面了,也就是正确的颜色。
所以,我推荐的组合是,VRM9无渲染+ffdshow YV12输出+shader着色器YC伸张。当然如果你的机器足够强,你还可以用Haali渲染器+ffdshow YV12输出的组合,除了不能开硬解,其他都近乎完美,缺点是系统资源消耗较大。

话说帖一张有意思的图:

我怀疑是不是我弄错了,AU的误差怎么这么大了,连他自家的m2v都这样。

dgwxx.com
shanque.net
nmm-hd.org
级别: 工作组
注册时间:
2005-05-03
在线时间:
0小时
发帖:
2914
只看该作者 1楼 发表于: 2008-04-15
好帖。进来一拜
级别: 精灵王
注册时间:
2005-12-13
在线时间:
0小时
发帖:
3859
只看该作者 2楼 发表于: 2008-04-15
图X
噢讨论

= =
级别: 工作组
注册时间:
2002-10-27
在线时间:
0小时
发帖:
1165
只看该作者 3楼 发表于: 2008-04-15
引用
最初由 GOD_HIKARU MK2 发布
图X
噢讨论

服务器在美国……

dgwxx.com
shanque.net
nmm-hd.org
级别: 风云使者
注册时间:
2006-03-12
在线时间:
54小时
发帖:
6604
只看该作者 4楼 发表于: 2008-04-15
好~好专业
完全不懂


LZ的意思我看的片的色彩都是错误的?

级别: 工作组
注册时间:
2002-10-27
在线时间:
0小时
发帖:
1165
只看该作者 5楼 发表于: 2008-04-15
引用
最初由 superkidx 发布
好~好专业
完全不懂
LZ的意思我看的片的色彩都是错误的?


大家都很幸运,我们看到的绝大多数都是正确的。

dgwxx.com
shanque.net
nmm-hd.org
级别: 风云使者
注册时间:
2006-03-12
在线时间:
54小时
发帖:
6604
只看该作者 6楼 发表于: 2008-04-15
引用
最初由 大虾 发布


大家都很幸运,我们看到的绝大多数都是正确的。


你不是说只有
3、Haali渲染器+ffdshow YV12输出
5、覆盖合成器+ffdshow RGB32输出
才是正确的么

级别: 工作组
注册时间:
2005-10-19
在线时间:
31小时
发帖:
3613
只看该作者 7楼 发表于: 2008-04-15
嗯,就算错了,播放的时候再拉伸一次就好了……

凡是未完全安装Office字体的,以下英语短语请无视~~

Knowledge is infinite.


级别: 工作组
注册时间:
2005-07-15
在线时间:
7小时
发帖:
705
只看该作者 8楼 发表于: 2008-04-15
引用
最初由 绿叶之砚 发布
嗯,就算错了,播放的时候再拉伸一次就好了……


新的EVR(Vista/.Net 3)很美 自动识别 而且正确率很高(飘)



蒼き清浄なる世界の為に

引用
绿叶之砚 21:55:35
切,那些个腐女怎么能和我比

:o
级别: 工作组
注册时间:
2003-05-11
在线时间:
201小时
发帖:
36355
只看该作者 9楼 发表于: 2008-04-15
为什么最后一张图的数据 这么神奇

-_,-

大虾果然是好人啊 每次都会做好东西给我们做参考......


忘了这帖还有Vempx的功劳

编辑,一并感谢上

最后那数据我越看越傻眼...

傻笑

  
级别: 骑士
注册时间:
2005-01-04
在线时间:
0小时
发帖:
1138
只看该作者 10楼 发表于: 2008-04-15
引用
最初由 superkidx 发布


你不是说只有
3、Haali渲染器+ffdshow YV12输出
5、覆盖合成器+ffdshow RGB32输出
才是正确的么


这是播放时的,不是编码压制时的。

I've Sound音樂聯盟(点击进入)

[CHN][IFS][eDtoon][TLF][VeryCD]VempX <= eMule的ID,欢迎查看共享文件
~My Blog~
级别: 骑士
注册时间:
2005-01-04
在线时间:
0小时
发帖:
1138
只看该作者 11楼 发表于: 2008-04-15
pdf版暂停下载,修正文章中…………

I've Sound音樂聯盟(点击进入)

[CHN][IFS][eDtoon][TLF][VeryCD]VempX <= eMule的ID,欢迎查看共享文件
~My Blog~
级别: 侠客
注册时间:
2006-10-07
在线时间:
0小时
发帖:
587
只看该作者 12楼 发表于: 2008-04-15
进来拜好帖

...原来我延续了错误这么久啊...
级别: 侠客
注册时间:
2005-02-09
在线时间:
0小时
发帖:
512
只看该作者 13楼 发表于: 2008-04-15
VMR9Renderless渲染RGB32怎么可能会颜色错误,除非你在显卡驱动里动过视频颜色设置了

对用NV卡的用户来说,Haali渲染器是质量最好的渲染器之一,优秀的缩放算法,完美的vsync,601和709的自动判断切换,TV/PC Scale的可选切换,除了不能硬解之外简直是完美的

ATI卡据说放大时的bicubic shader有画面瑕疵,不过我也没试过
级别: 骑士
注册时间:
2005-01-04
在线时间:
0小时
发帖:
1138
只看该作者 14楼 发表于: 2008-04-15
引用
最初由 qyqgpower 发布
VMR9Renderless渲染RGB32怎么可能会颜色错误,除非你在显卡驱动里动过视频颜色设置了

我用VRM9无渲染,并且ffdshow用RGB32输出,颜色确实是错误的,我也没有动显卡驱动里的任何选项~

I've Sound音樂聯盟(点击进入)

[CHN][IFS][eDtoon][TLF][VeryCD]VempX <= eMule的ID,欢迎查看共享文件
~My Blog~
快速回复

限150 字节
上一个 下一个