引用
最初由 Galaxy001 发布
我记得对(16,235)的,加个(0,255)的头,放起来会变昏暗。
我记得对(0,255)的,加个(16,235)的头,放起来会变丢失两头,变得过亮。
一般YV12都是全程照原始的来,而转RGB用vfapi就必须在两种转换公式中做选择。至于最终输出,默认是overlay按(16,235)的,所以如果源文件不是(16,235)的,就需要处理。
Colormatrix是在没法换头时转图像数据的。
难道我理解的有问题?
这么说吧
源(例如DVD或者BD)中储存的YV12数据都是
TV Scale的,因为它们本来就是以在电视上播放为准,
这是大前提。所以如果你拿到了一片YV12数据是PC Scale的DVD,那么只能说是Mastering错误了。
但如果要在PC上播放,需要获得的是RGB,那怎么变换呢?这里就出现了不同的标准
Rec.709
FCC
Rec.601
SMPTE 240M
有的YUV数据是以某个标准储存的,有的则是其他的,但这些标准只和YUV<->RGB变换时颜色的计算方法有关,
和具体的颜色范围并没有直接联系。所以,如果你愿意,完全可以把YUV(TV Scale)以某种标准变换成RGB(TV Scale),或者RGB(PC Scale)变换成YUV(PC Scale)
但正常的,在PC上应用的情况下,YUV to RGB都是要扩张成PC Scale,而反之则是要缩小到TV Scale,这是不是造成你混乱的原因?
要走vfapi需要RGB24是不是?那么我给你个建议
以最终解码器或者渲染器Rec.601方式作YUV->RGB变换为前提
确定源YUV在
未作任何变换前的色彩范围,确定YUV变换标准
Interlaced的话两个函数中都需要增加interlaced=true,
源YUV为TV scale,Rec.601->加ConvertToRGB24()
源YUV为TV scale,Rec.709->加ColorMatrix(opt=0).ConvertToRGB24()
源YUV为PC scale,Rec.601->加ConvertToRGB24(matrix="PC.601")
源YUV为PC scale,Rec.709->加ColorMatrix(scaling=2,opt=0).ConvertToRGB24(matrix="PC.601")
正确添加之后就不用担心vfapi进行错误的RGB变换了