色彩空间:
色彩空间是一个设备所能表现的所有颜色的集合,
色域是色彩空间这个集合的范围,不同的色彩空间有着不同的色域。
一个色彩空间的一个演示图如下:
外形空间为人眼的认知范围,
三角等形状内部为各个色彩空间的范围。
一般不加指向,默认指的是sRGB色彩空间。
而空间不同则颜色色相其实有差异的,
比如 #FF00FF这个,在sRGB指的就应该是紫色,而如果色彩空间是Adobe RGB则是品红。
在过来:
在 FFmpeg 中会有 color_space,color_transfer,color_primaries 等一系列的颜色属性。
首先明白,视频的颜色存储和转换步骤:
1) 光信息,
2)线性RGB信息, ;
3)非线性RGB信息,
4)YUV信息,
5)视频编码数据。
光信息将用三原色等形式存储到RGB中,这个时候RGB是线性的,
但是,人类视觉系统是以对数函数的方式来感知光亮度。这意味着,人眼会提高暗部的敏感度,降低高光部分的敏感度。因此必须处理信息这样才能符合人眼感知。
因此用 伽马校正 的方法进行进行 非线性RGB信息的转换。
然后需要将 RGB转换为YUV,但是RGB->YUV,不同标准有不同要求,即视频的颜色转换系数。
将 RGB颜色模型,转换成 YUV 模型后,接下来会采用某种视频编解码算法(例如,H265, VP9)对获取的数据进行视频编码,最终得到视频文件。
;;
在 FFmpeg 中,BT. 601->BT. 709 的转换过程如下所示
在如上的变换中,涉及到 3 个颜色空间的转换,分别是:
color_space 字段对应 YUV/RGB 的转换矩阵
color_transfer 字段对应线性 RGB 和非线性 RGB 之间的转换函数
color_primaries 字段对应 RGB/XYZ 的转换矩阵
而 XYZ(CIE 1931 XYZ color space) 具备设备无关、线性操作的特性。