m2v里最让人费解的大概就是Default Matrix Confident和YUY2 color matrix这两个选项了.我也是反复做了多次试验才大致(说话要习惯留余地哦)搞明白这两个选项到底是怎么工作的.
试验过程比较烦琐,略过.这里就直接说结论.
Default Matrix Confident的作用就是,为m2v读入的YV12数据流标注其matrix格式.不过在我做的试验中发现,这新版的m2v已经改成flag无条件执行.也就是说,只有flag为空,这里的更改才会起作用;如果不为空,怎么改也没用.就算标错也废了.
不过倒不必那么紧张,因为这个选项的作用本来也相当于一个flag.这点后面要讲到.
而YUY2 color matrix,诚如其附注所写,是服务于m2v.aui的.如果是直接使用m2v的vfp模式,这个也不起作用.那么这个选项的作用,就是为aui选择输出YUY2的色彩空间.
下面就用例子来具体说明.底下流程中,()表示数据流,第一个[]表示Default Matrix Confident,第二个[]表示YUY2 color matrix.
如果输入的是CCIR601,使用vfp的话,直接把601的YV12转化成RGB,没问题.如果使用aui的话,则可以以下面流程来表示:
(YV12-601)==>[1]==(YUY2-601)==>[2]===>(YUY-result)
所以,经过[1]后,无论[1]的设置是什么,解出来的都是601的YUY2.
那么这个时候起作用的就是[2]了.试验结果表明,无论[1]是什么,[2]为"keep orignal data"时结果都是正确的.接下来就不一样了:
(1),如果[1]为601,[2]为709,结果错误,表现是绿色发亮,红色发暗
(2),如果[1]为709,[2]为601,结果错误,表现与上相反
可见,只有当[1]和[2]不一致时,[2]才会起作用.[2]是要参考[1]所设定的flag的.
并且通过分析可以得知,情况(1)中,m2v会启动601->709的转换;而情况(2)中,会启动709->601的转换.
那么,如果输入数据是709呢,流程如下:
(YV12-709)==>[1]==(YUY2-709)==>[2]===>(YUY-result)
经过试验,发现如果[1]为缺省,709,[2]为keep orignal data时,显示结果始终是错的;而[2]为601时,结果居然是对的.对这个结果,我思索了半天才反应过来:
通过上面我们可以知道,当[2]为keep时,m2v.aui输出的直接是[1]解码出来的,没有经过处理(而只加了个flag)的YUY2数据.那么这个时候这数据就是709色彩矩阵的.然而我们知道,我们的解码器几乎都是基于601的,所以AU显示时也是以601为基准----把709当601了.所以这个时候显示是错的.当然压出来也是错的.
因此,这个时候我们要把[2]设定成601,从而启动了709=>601的转换,才能得到正确的结果.这就是用m2v做HDTV所必须特别注意的地方.
综上所述,Default Matrix Confident只起到为数据流标注色彩矩阵的作用.如果使用vfp解码,vfp会根据这个标注直接把数据upsample成RGB;而以aui解码,它就只负责传送一个flag.而YUY2 color matrix的作用就是在aui中,根据Default Matrix Confident传来的flag及自身的设定,来决定是否启动601<=>709的转化程序.
文章来自: 本站原创
引用通告地址:
http://fansub.popgo.org/trackback.asp?tbID=150