NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 12226|回复: 25

请问BDRIP是否需要做颜色校正?如何做?

[复制链接]
发表于 2009-10-12 04:03 | 显示全部楼层 |阅读模式
本帖最后由 hdfuck 于 2009-10-12 08:00 编辑

本人刚学压制,很多不懂,查了一些资料,越看越糊涂.
一、BD压成高清分辨率,比如720P,是不是直走ConvertToYV12()就可以了,其他不需要?
例如:
LoadPlugin("C:\Program Files\Final Codecs\AviSynth 2.5\plugins\DGAVCDecode.dll")
Load_Stdcall_Plugin("C:\Program Files\megui\tools\yadif\yadif.dll")
AVCSource("N:\Movie\south_pacific\disc1\BDMV\STREAM\00005.dga")
ConvertToYV12()
Yadif(order=1)
LanczosResize(1280,720)
这样处理是否有问题?

二、假如压成标清分辨率,比如480P,又该如何处理?如果按照上面做法,似乎有些偏白.
先谢了
发表于 2009-10-12 08:43 | 显示全部楼层
本帖最后由 diseac 于 2009-10-13 08:26 编辑

1# hdfuck

720P

  1. LoadPlugin("C:\Program Files\Final Codecs\AviSynth 2.5\plugins\DGAVCDecode.dll")
  2. Load_Stdcall_Plugin("C:\Program Files\megui\tools\yadif\yadif.dll")
  3. AVCSource("N:\Movie\south_pacific\disc1\BDMV\STREAM\00005.dga")
  4. Yadif(order=1)
  5. LanczosResize(1280,720)
复制代码
480P

  1. LoadPlugin("C:\Program Files\Final Codecs\AviSynth 2.5\plugins\DGAVCDecode.dll")
  2. AVCSource("N:\Movie\south_pacific\disc1\BDMV\STREAM\00005.dga")
  3. SeparateFields.SelectEven
  4. LanczosResize(704,480)
复制代码
然后在x264参数里加上 --transfer bt709 --colormatrix bt709 --colorprim bt709 --sar 40:33
 楼主| 发表于 2009-10-12 09:56 | 显示全部楼层
非常感谢D大。上面的参数在压720P和480P时都加上是吧?下班后再试了
发表于 2009-10-12 11:37 | 显示全部楼层
2楼编辑了一下,480p不用yadif了。
720P应该不用AVC旗标,COREAVC和FFDSHOW应该会默认认为1280x720为bt709(存疑)
发表于 2009-10-12 14:51 | 显示全部楼层
1.BD是1080,比720还高。你是想压1080呢,还是720呢……我觉得压720有点可惜了。BD从解码器出来本身就是YV12,不用ConvertToYV12()。

2.关于颜色校正问题:看到“颜色校正”这个词我本身就会心生反感。因为“校正”顾名思义就是把错的改对了。固然个别片源的颜色的确有问题,但绝大多数压制者都是缺乏专业知识和设备的。在缺乏必要环境的前提下,只能把错误的颜色越调越歪、正确的颜色搞成错的,不可能让颜色变得更好,半点可能都没有。DVD和BD在制作过程中都有专业的人员和设备进行把关,出现错误的几率是很少的。所以压制的时候大可不必画蛇添足去“校正”什么。

3.您提出来的第二个问题非常有意思,让我联想到了很多东西,所以第二点问题我打算稍微花一点篇幅来展开说一下。
相信很多人跟我和楼主一样想到过用BD压480标清分辨率的可能性。可能性当然是大大的有,可惜压制过程需要考虑周全。所谓周全,其一就是颜色的问题非常重要。
影片播放解码之后最终要被转换成RGB颜色,这个过程根据设置不同可能是在解码器,也可能是渲染器(存疑?有没有渲染器输出RGB了 囧),也可能是显卡中完成。以下为了避免混乱,我假设这个过程是在解码器中完成的(也就是我通常使用的输出方式,ffdshow直接输出RGB32),实际上在哪里完成个过程都差不多。
高清和标清虽然颜色空间都是YV12,但这两种YV12是不同的。即是说,同样需要转换成RGB,处理高清图像所需要的公式和处理标清图像所需要的公式实际上是不同的。高清的颜色变换标准叫ITU-R BT.709,标清叫做ITU-R BT.601。因此播放的时候解码器需要对这两种颜色进行区别对待。但遗憾的是很多解码器/渲染器/驱动并不能正确识别这两种颜色,而是简单依靠分辨率去区分。即高清一律走709,标清一律走601。
回到楼主的问题,如果您直接将高清片压成标清分辨率(颜色不变),到了解码器那里,解码器就会将您的709颜色按601颜色去进行处理。
所以,为了避免解码器判断错误,我们就需要“投其所好”,将709的颜色转换成601。这个转换很多环节都可以做,AVS有滤镜可以做,也可以像diseac说的在x264的参数中声明。
请不要将这个过程称作“校正”,因为无论是709还是601都是正确的,只是标准不同而已

4.关于分辨率。
Dちゃん在帖子里说把分辨率resize到704×480,却忘记告诉楼主在x264里面加上SAR参数了
发表于 2009-10-12 19:13 | 显示全部楼层
例如一些电视录制的ts流是否有必要校正颜色呢?
肉眼观察校正后的颜色更难看些..
发表于 2009-10-12 20:41 | 显示全部楼层
6# 蓝の回忆
所谓“校正”一定要有一个基准,需要定义了“正”,然后您再“校”。您用什么做基准呢……在没有基准的情况下,凭肉眼盲校容易出现一个结果,那就是在您的显示器上看起来很漂亮的图像,拿到另一台显示器上显示效果就会变得不一样,这个问题需要考虑。所以如果实在忍不住要动画面,稍稍动动对比度、亮度、色度也就差不多了,分通道调色我觉着调不出什么结果来。退一万步说,您的显示器上显示出来“不漂亮”的画面,就一定是真的不漂亮么……显示器亮度、对比度、色度、色温这些人人不同的设置姑且不论,CRT还是LCD,LCD的背光灯种类都对画面有所影响。再加上很多人根本不会调显示器,干脆用出厂设置。还有很多显示器那些脑残的“一键设定”功能根本就是“颠覆”了画面。所以……这实际上真的是个无解的问题,您调了半天只是白费力而已。

说道调色,突然想起来日2版《千与千寻》DVD了。很多收过那个版本DVD的人肯定都发现那个版本的图像异常地发红。虽然迪斯尼百般辩解说是“为了提供高品质的图像,故意进行的调色”,但无论他们怎么辩解,那个DVD很怎么看都是做母带的时候色温搞错了嘛……窃以为他们各种托词不过是为了逃避商品召回而已。后来在欧美等地上市的版本明显没有那么红。
所以,很多人就根据色温看起来正常的预告片、电视广告(同一张DVD里的特典)推出了各种各样的调色方案。我记得6、7年前好像香港那边一个论坛看过一个用AU进行的调色指导,调过之后看起来的确好了不少。这是少数DVD颜色错误(注意,这是“错误”!)的情况下,需要通过校色来进行补救的例子。
不过怎么说呢,我依旧不建议用DVD、BD这种素材来做调色的。压缩过的信号精度比起母带来说本来就有所下降(10bit -> 8bit),如果用这种精度的数据来做调色的话,必然带来数据的损失,直接结果就是画面细节的消失,搞不好还会出banding。所以如果不是特别离谱的话,能不调也就不调了。
 楼主| 发表于 2009-10-12 21:02 | 显示全部楼层
本帖最后由 hdfuck 于 2009-10-13 23:13 编辑

非常感谢管理员的指点,感觉这里的前辈们比较热心为新手解惑.
我自己倒是收藏BD原盘为主,偶尔压成720P或480P是为了分享.
既然如你所说,目前很多解码器/渲染器识别颜色还有些问题,标清分辨率一律走601,那压成480P,还是换成601保险一点.

如果在AVS中用滤镜处理又是该如何做?
我刚查了一些,是不是可以这样作:
LoadPlugin("C:\Program Files\Final Codecs\AviSynth 2.5\plugins\DGAVCDecode.dll" )
AVCSource("N:\Movie\south_pacific\disc1\BDMV\STREAM\00005.dga" )
ColorMatrix("Rec.709->Rec.601",opt=0,hints=false,interlaced=true)

SeparateFields.SelectEven

LanczosResize(704,480)

------------------------------
关于diseac 大用x264参数的 方法,我还有困惑
查到这几个参数:
--colorprim <字符串> 原始色度格式,默认"undef",可选项:undef/bt709/bt470m/bt470bg,smpte170m/smpte240m/film

--transfer <字符串> 转换方式,默认"undef",可选项:undef/bt709/bt470m/bt470bg/linear,log100/log316/smpte170m/smpte240m

--colormatrix <字符串> 色度矩阵设置,默认"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR/YCgCo
----------------------------------
不是应该转成601更好吗,但看到diseac大给出的参数都带709,很是困惑。
是不是应该把--colormatrix bt709改为--colormatrix smpte170m呢?

--sar参数基本会算会用:
发表于 2009-10-12 22:01 | 显示全部楼层
虾大说得挺有道理的...
以后就这样省点事了
 楼主| 发表于 2009-10-13 00:19 | 显示全部楼层
本帖最后由 hdfuck 于 2009-10-13 00:54 编辑

作了一下对比实验,可能我在8楼说的AVS方法是错的,用diseac大推荐的x264代码的方法压出的效果更接近片源一些,从目测和SSIM数据来看,都相对好一些,十分感谢大大门的指导
发表于 2009-10-13 03:18 | 显示全部楼层
本帖最后由 diseac 于 2009-10-13 03:28 编辑

8# hdfuck

--transfer bt709 --colormatrix bt709 --colorprim bt709
这3个参数的作用是“标记”,告诉解码器这个文件是bt709,而不会对你的片源做任何的调色处理。

如果在AVS里用ColorMatrix做转换,就不再需要上面的旗标,或者加上相应的旗标。
不过我个人觉得尽量还是不要动颜色,理由是:旗标是无损的,而且一旦出错,修改方便。

关于HD转SD的分辨率,其实我也想讨论一下这个问题。
如果让我按楼主的思路来做的话,我会做成864x486。或者resize后再上下切6变为864x480。
864x486虽然不是16mod,但这个分辨率是最接近480p的纯16:9,而且x264对16mod也不是那么严格,1080也不是16mod。
楼主一开始用了yadif,所以我推断楼主的片源是pulldown类型的30i,这种片源最简单的IVTC方法是IVTC(不要后处理)以后选出一场,再resize到960x540,这样做是最完美而且最省事的IVTC,但缺点是会有一些锯齿。不过如果resize得再小一些(比如864x486),锯齿现象就会变弱甚至消失。
 楼主| 发表于 2009-10-13 07:59 | 显示全部楼层
8# hdfuck

--transfer bt709 --colormatrix bt709 --colorprim bt709
这3个参数的作用是“标记”,告诉解码器这个文件是bt709,而不会对你的片源做任何的调色处理。

如果在AVS里用ColorMatrix做转换,就不再 ...
diseac 发表于 2009-10-13 03:18

谢谢关于参数的指点,明了了不少
这部片子是BBC的<南太平洋>,纪录片,蓝光盘,看样子是用高清DV拍的,BBC的很多节目也是用高清DV拍的,所以应该是30i了,应该没有pulldown了吧?这方面我倒也是不太懂。
发表于 2009-10-13 08:26 | 显示全部楼层
12# hdfuck

不好意思我脑残了,我一直认为yadif只会IVTC来着。
2楼的480P代码已经改了,抱歉
发表于 2009-10-13 08:29 | 显示全部楼层
dちゃん你湿态了……
 楼主| 发表于 2009-10-13 10:30 | 显示全部楼层
12# hdfuck

不好意思我脑残了,我一直认为yadif只会IVTC来着。
2楼的480P代码已经改了,抱歉
diseac 发表于 2009-10-13 08:26

电脑正在家里压整场了,不过没关系的,回去再整一下比较看。这次学了不少,以前多是压成1080P或720P,我都没去关注压成标清的颜色问题。
发表于 2009-11-22 14:56 | 显示全部楼层
本帖最后由 yntang66 于 2009-11-22 17:18 编辑

很受启发的一帖! 谢谢!

换而言之, 如果把标清的480p的DVD作UPSCALE到720p, 就需要反过来添加bt601的旗标吧?

--transfer bt601 --colormatrix bt601 --colorprim bt601
是这样吗?
发表于 2009-11-22 16:46 | 显示全部楼层
谢谢关于参数的指点,明了了不少
这部片子是BBC的,纪录片,蓝光盘,看样子是用高清DV拍的,BBC的很多节目也 ...
hdfuck 发表于 2009-10-13 07:59

BBC的BD除了24P的行星地球之外应该都有问题
BBC的设备应该是25i的摄像机,因为英国的电视网络是50hz的,但是BD却做成了30i
虽然我没有看过实际片源但是我觉得不可能是没问题的
发表于 2009-11-22 17:42 | 显示全部楼层
回复 17# a4840639
CCAV的DVD一样是30i的
发表于 2009-11-24 11:14 | 显示全部楼层
回复 16# yntang66
是的。不过窃以为upconv没啥意义就是了……呵呵、
发表于 2009-11-25 12:59 | 显示全部楼层
回复 19# dgwxx
  1. --colorprim <string>    Specify color primaries ["undef"]
  2.                             - undef, bt709, bt470m, bt470bg
  3.                               smpte170m, smpte240m, film
  4. --transfer <string>     Specify transfer characteristics ["undef"]
  5.                             - undef, bt709, bt470m, bt470bg, linear,
  6.                               log100, log316, smpte170m, smpte240m
  7. --colormatrix <string>  Specify color matrix setting ["undef"]
  8.                             - undef, bt709, fcc, bt470bg
  9.                               smpte170m, smpte240m, GBR, YCgCo
复制代码

沒有 bt601 這個值,看了 ColorMatrix 文件寫說 ITU-R BT.470-2 與 SMPTE 170M 相同於 Rec.601,但看上面的值 bt470 又有分 470m 和 470bg
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

小黑屋|手机版|NMM视频技术

GMT+8, 2024-4-25 17:25 , Processed in 0.366757 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表