在虾虾的提醒下,我昨天又回去做了点测试.如果在YV12下已经做完了IVTC,那么再转色彩时要不要加interlace?测试的结果如下(图省事,这次就不帖图了,反正肉眼也看不太出来)
1,如果IVTC后仍存在交错,那么不加interlace=true,交错部分结果仍旧是错的.
2,通过与conv=1(先转为YUY)所得结果相比较,在无交错的部分,interlace=false与之结果相同(同一象素RGB值一样,我没有别的办法验证,只好在画图里取RGB值来判断了:p),而interlace=true与之有一些出入.当然这种出入不是很大
这就说明,如果IVTC后消除了交错,那么这样的画面已经变成progress型的了--尽管它仍是YV12.而如果仍存在交错,那它就仍属于interlace型
这样听着挺诡异的,但事实就是这么回事.
在avs2.5.6的文档中新增了一批advancedtopic.在这里的interlaced_fieldbased中有对此问题的描述,并提出对这种情况做色彩空间应采取的措施
引用
function ConvertHybridToYUY2(clip a, int "threshold", bool "debug")
{
debug = default(debug, false)
global threshold = default(threshold, 20)
b = ConvertToYUY2(a, interlaced=false)
c = ConvertToYUY2(a, interlaced=true)
ConditionalFilter(a, b, c, "IsCombed(threshold)", "equals", "true", show=debug)
}
function ConvertHybridToRGB(clip a, int "threshold", bool "debug")
{
debug = default(debug, false)
global threshold = default(threshold, 20)
b = ConvertToYUY2(a, interlaced=false)
c = ConvertToYUY2(a, interlaced=true)
ConditionalFilter(a, b, c, "IsCombed(threshold)", "equals", "true", show=debug)
}
AviSource("D:\captures\interlaced-clip.avi") # interlaced YV12
#ConvertHybridToYUY2(debug=true)
ConvertHybridToYUY2()
可见他们这里也是,判断出无交错时使用false,有交错时使用true.我想avs的开发者大概自己也搞不清楚这到底是怎么回事,所以并没能给出一个明确的说法.那么我们也只需要按实验出来的方法去做就是了.
3,在使用了FieldDeinterlace反交错以后,interlace为false还是为true,差别便不大了--只有RGB中某个信道上个位数上的差异.而很有趣的是,它们和conv=1却产生了稍大的差异--比它们之间的差异要大一点.这应该是,两种情况下FieldDeinterlace获取的象素值是不一样的,一个为YV12平面里的而另一个为YUY平面的,而它又是采用的blur方式来反交错的.所以会出现一点点区别
而使用了TDeint之后,这三者之间的区别,就属于"可以忽略不计"的范围了.
所以,在这里给将avs喂进AU的朋友提出以下建议:
如果想在AU中做deinterlace,那么请使用conv=1参数,先把色彩空间升成YUY,再做IVTC,然后喂进AU
如果不打算在AU中做deinterlace,那么可以在avs中作完IVTC和deinterlace后,直接使用conventtoYUY()来upsample,再喂给AU
最后再说点闲话.avs2.5.6的这几篇advancedtopic真是不错.原来我们在这里讨论的问题,它早有论述:sampling这篇里就直截了当地说了
引用
When VDub previews your video, it will need to convert it to RGB. Since !AviSynth delivers YV12, it asks the codec (for example XviD or DivX) to convert YV12 to RGB. The codec however ALWAYS upsamples progressively. Hence you will get artifacts in VDub preview on interlaced YV12 material. This is however not present in the YV12 video (or in the resulting encoding). To confirm this, let !AviSynth do the conversion by adding ConvertToRGB(interlaced=true) at the end of your script.
真让人惭愧,我还费劲地测了那么多图(已经把这帖搞成杀猫帖了[/KH]).正如置顶中"提问的智慧"里所说的,计算机世界里,english是通用语言.大家还是努力学好英语,尽量多看看原始文档吧,比如这批advancedtopic.说不定会有什么意外收获.