我正在尝试同步CSS和FFmpeg颜色校正。目标是创建工具,将CSS bri-sat-con过滤器值转换为相应的ffmpeg值,反之亦然。
例如:
-vf "eq=brightness=0.3:saturation=1.3:contrast=1.1“
→
Filter=亮度(30%)饱和(130%)对比度(110%)
虽然CSS属性的算法在W3C中可用,但我未能找到适用于FFmpeg的算法。我试过挖掘GitHub。从这里开始,我已经展开了函数调用,但它看起来“有点”难以在20年内导航,104 k提交了旧项目。:)
如果有人能帮我找出亮度、饱和度、对比度和伽玛的精确公式,我将非常感激。任何暗示。谢谢。
发布于 2021-11-29 04:41:32
这是核心职能:
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
)将用户提供的参数转换为上述函数中使用的最终值。contrast
只应用于卢马平面,饱和度应用于色度平面。
https://stackoverflow.com/questions/70139425
复制相似问题