举报
Originally posted by 焦阳 at 2005-5-17 15:33: 我的片源是mpeg1的vcd,经过了TMPGEnc--->VFAPIConv,再用AviSynth2.5时出现的问题,所以要ConvertToYUY2()。我可不可以在avs里直接转换成YV12呢?这样效果会好一些吗?
DVD2AVI 的 Color Space 选 RGB/YUV 和 PC Scale/TV Scale 的差异: RGB 模式是输出 RGB24,YV12 (YUV 4:2:0) --> YUY2 (YUV 4:2:2) --> RGB24,由 dvd2avi 做内插展开(4:2:0 -> 4:2:2)和转换的工作(YUV -> RGB)。内插展开的算式作者的网站有写,相当于 6-tap 的 FIR Filter。 YUV 模式是输出 YUV 4:2:2(YUY2)。 输出 RGB 时,preview 显示会走传统的 GDI 图形显示接口,送 RGB24 的资料给显示卡,此时计算机屏幕上看到的颜色正不正确,由 YUV -> RGB 这个选项决定。(要选 PC Scale 看到的颜色才会正确) 输出 YUV 时,preview 显示会走 DirectDraw YUY2 Overlay,直接送 YUY2 的数据给显示卡,由显示卡去做展开和色空间转换。显示卡用的都是 PC Scale(会做 Y/C 伸张,扩展原来的 16~235 的数据为 0~255),所以您可以在屏幕上 看到正确的颜色。 (同理,DVD/VCD 播放时,播放软件会走 DirectDraw Overlay 丢 YUY2 或 YV12的资料给显示卡,由显示卡来做展开、色空间转换、和放大(scaling filter)的工作。由于显示卡用的是 PC Scale,会做 Y/C 伸张,所以您才可以在计算机屏幕上看到正确的DVD/VCD 的颜色) (前提是,做好的 DVD/VCD,其 YUV 4:2:0 的数据范围必须是 16~235,经过显示卡 PC Scale 16~235 -> 0~255 才会正确。如果 DVD/VCD 做错,压缩前没有先做 Y/C 压缩,储存的是 0~255 的 YUV 数据,则显示时再经过显示卡的 Y/C 伸张,会发生 clipping(资料超过范围被削掉)) (而 16~235 的数据拿到电视上放,电视本来就吃 16~235 的资料,所以显示也是正常的) (所以结论,DVD/VCD 上的数据,必须遵照 CCIR601 的规范,维持 16~235 的范围) 至于输出,也是按照 YUV/RGB 的设定,分别输出 YUY2 和 RGB24。 但是如果您有用 vfapi,因为 vfapi 内部完全以 RGB24 传送数据,所以如果你把 .d2v 转成 vfapi-ref-avi,即使 color space 选 YUV,dvd2avi 也会做展开转换成 RGB24 输出。如果要用 dvd2avi 直接做 Y/C 伸张,dvd2avi 的 YUV -> RGB 选项勾选 PC Scale 即可。 另外,如果用 TMPGEnc/AviUtl 直接开启 .d2v,因为这些软件还是以 RGB24读取,所以 dvd2avi 也还是以 RGB24 输出。 那.... 倒底什么时候会用 YUY2 输出? 直接存 AVI 的时候... ^^; 所以如果您是用 vfapi 或用 TMPGEnc/AviUtl 读取,选 YUV 或 RGB 都没有差异。 附带一提 ^^; 如果 dvd2avi 输出时已经选了 PC Scale(有做 Y/C 伸张),就不可以再用 TMPGEnc 的 Descale CCIR601 这个滤镜,也不可以用AviUtl 的 "ITU-R BT.601 补正",这两个作的事情是一样的,都是做 Y/C 伸张。已经伸张过再做伸张,会有许多资料 clipping。
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|NMM视频技术
GMT+8, 2025-5-6 00:58 , Processed in 0.091144 second(s), 14 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.