FFmpeg颜色校正算法



我正在尝试同步CSS和FFmpeg颜色校正。目标是创建一个工具,将CSS bri sat con gam过滤器值转换为相应的ffmpeg vals,反之亦然。

例如

-vf "eq=brightness=0.3:saturation=1.3:contrast=1.1"

filter="brightness(30%) saturate(130%) contrast(110%)"

虽然W3C提供了CSS属性的算法,但我没有找到FFmpeg的算法。我试过挖GitHub。从这里开始,我展开了函数调用,但看起来";一位";20年内导航太难了,104k人提交了旧项目。:(

如果有人能帮我算出亮度、饱和度、对比度和伽玛的精确公式,我将不胜感激。任何提示。Thx。

这是核心功能:

static void create_lut(EQParameters *param)
{
int i;
double   g  = 1.0 / param->gamma;
double   lw = 1.0 - param->gamma_weight;
for (i = 0; i < 256; i++) {
double v = i / 255.0;
v = param->contrast * (v - 0.5) + 0.5 + param->brightness;
if (v <= 0.0) {
param->lut[i] = 0;
} else {
v = v * lw + pow(v, g) * param->gamma_weight;
if (v >= 1.0)
param->lut[i] = 255;
else
param->lut[i] = 256.0 * v;
}
}
param->lut_clean = 1;
}

滤波器仅对8位YUV输入进行操作。此函数创建一个查找表,将所有8位输入值0-255映射到输出值。然后将该表应用于输入像素。

名称形式为set_parameter的函数(如set_gamma(将用户提供的参数转换为上述函数中使用的最终值。CCD_ 2仅应用于亮度平面;饱和度到色度平面。

最新更新