我正在尝试通过调整颜色、对比度、亮度等对视频应用一些效果。这里这是我尝试的一些效果。以下是我用来应用“开尔文”效果的命令。
ffmpeg -i 3.mp4 -c:v libx264 -c:a libfaac -filter_complex "[0:v]eq=1.0:0:1.3:2.4:0.175686275:0.103529412:0.031372549:0.4[outv]" -map [outv] out.mp4
FFmpeg 文档帮助我找出eq
过滤器每个值的边界。但我仍然没有得到上面链接中“开尔文”效果的预期输出。我根据 csssepia
中使用的值计算了 rg、gg、bg 值。(r=112、g=66、b=20 是我用于将棕褐色转换为 rgb 的值)以下是我用来获取 rg、gg、bg 值的简单数学运算。
rg = (112 / 255) * (gamma_r 最大值 - gamma_r 最小值) * 棕褐色值
根据文档,这里 gamma_r max 为 10,gamma_r min 为 0.1。
我在这里做错了什么?还有其他方法可以完成此操作吗?
答案1
滤镜eq
会根据颜色通道的当前状态对其进行调整,即增加或减少其强度(就像声音中的“音量”旋钮一样)。要达到目标色温,eq
您必须计算照片中每个区域的当前色温,然后对其进行修改 - 为此,您需要一个帧服务器,例如 AviSynth。但实际上并不需要所有这些,因为您并不想完全控制白平衡,您只想应用一个固定的滤镜,该滤镜将产生特定的色调 - 在本例中为棕褐色。为此,您应该使用色彩通道混合器过滤器提供了一种管理像素白平衡的方法相对而言。过滤器文档有一个针对棕褐色的具体示例:
colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
工作原理(非常简单的解释)
滤镜colorchannelmixer
将图像描述为具有 4 个颜色通道 - 称为红色、绿色、蓝色和 Alpha(“蒙版”通道)。默认情况下,每个通道都表示颜色的强度,并以 1.0 命名。因此,“红色”通道表示图像中红色部分乘以 1.0、绿色部分乘以 0.0、蓝色部分乘以 0.0,以及 Alpha 部分乘以 0.0。同样,每个其他通道的“其”颜色值为 1.0,其他所有通道的值为 0.0。现在,滤镜可让您从其通道“窃取”颜色并将其“能量”注入另一个通道。例如,您可以将“绿色”通道中的红色值增加到 1.0,并将“红色”通道中的红色值更改为 0.0,因此现在每个像素的绿色强度将增加原始红色强度,而不会在图像中留下任何红色,也不会改变蓝色和 Alpha 的相对强度。当将此概念应用于所有 16 种颜色组合时,您将获得一个矩阵,该矩阵将每个像素的最终颜色强度定义为所有原始颜色强度的乘积。然后将结果标准化,您将获得一种表达颜色变换曲线的简单方法。
上面的内容有些简单,要了解它如何适用于您的具体问题,您可以阅读更多内容色温理论。但请注意,使用此colorchannelmixer
滤镜您还可以执行其他操作,例如生成彩色负片、降低色彩深度以实现类似漫画的效果等等。
希望这对你有用!
答案2
最后通过链接创建效果colorchannelmixer
和eq
过滤器。根据提到的效果这里,我sepia
使用过滤器应用了效果colorchannelmixer
并使用过滤器调整了其余的属性eq
。
对于棕褐色效果,您可以使用棕褐色矩阵用 代替amount
。sepia value
除亮度值外,所有其他属性都可以直接应用,无需进行任何计算。我用 代替了亮度值,
(亮度 - 对比度)/ 20
这产生了更可能的输出。有人可以纠正这个问题,因为这不是精确的计算。以下是进行这些计算后“Willow”效果的 FFmpeg 命令。
ffmpeg -i input_image -filter_complex "
[0:v]colorchannelmixer=0.98786:0.01538:0.00378:0.0:0.00698:0.99372:0.00336:0.0:0.00544:0.01068:0.98262:0.0[colorchannelmixed];
[colorchannelmixed]eq=0.85:0.0175:0.02:1.0:1.0:1.0:1.0:1.0[color_effect]" -map [color_effect] -c:v png output_image
希望这能帮助到其他人。干杯!