求FFmpeg eq滤镜色彩校正参数精确公式 用于CSS滤镜双向转换
FFmpeg eq滤镜参数计算公式及CSS双向转换规则
一、FFmpeg eq滤镜核心参数精确算法
所有计算基于归一化RGB分量(输入输出分量取值范围均为[0, 1],超出范围会被截断):
- 伽马(gamma)
计算公式:out = pow(in, gamma_val)
参数范围:0.1~10,默认值1,数值越小画面整体越亮 - 对比度(contrast)
计算公式:out = (in - 0.5) * contrast_val + 0.5
参数范围:-2~2,默认值1,数值大于1提升对比度,小于1降低对比度 - 亮度(brightness)
计算公式:out = in + brightness_val
参数范围:-1~1,默认值0,数值为正提升亮度,为负降低亮度 - 饱和度(saturation)
先计算输入RGB对应的灰度值:gray = 0.3086 * R + 0.6094 * G + 0.0820 * B
分量输出公式:out = gray + (in - gray) * saturation_val
参数范围:0~3,默认值1,数值为0时画面完全灰度,大于1提升饱和度
二、与CSS滤镜的双向转换规则
其中对比度、饱和度、伽马的计算逻辑与W3C规范定义的CSS滤镜完全对齐,可直接转换:
- 对比度:
FFmpeg contrast_val = CSS contrast参数百分比 / 100,例如FFmpegcontrast=1.1对应CSScontrast(110%) - 饱和度:
FFmpeg saturation_val = CSS saturate参数百分比 / 100,例如FFmpegsaturation=1.3对应CSSsaturate(130%) - 伽马:
FFmpeg gamma_val = CSS gamma参数值,两者参数取值逻辑完全一致
亮度的计算逻辑两者存在差异:FFmpeg亮度为加法偏移,CSS brightness为线性乘法缩放,不存在完全1:1的映射关系,普通场景下可使用近似转换公式:
- FFmpeg转CSS:
CSS brightness百分比 = (1 + FFmpeg brightness_val) * 100% - CSS转FFmpeg:
FFmpeg brightness_val = (CSS brightness百分比数值 / 100) - 1
如果需要更高精度的对齐效果,可通过调整滤镜执行顺序、叠加辅助参数修正误差。
内容的提问来源于stack exchange,提问作者Corvus Corax
相关产品推荐
相关产品推荐

