本文汇总了ffmpeg关于色彩处理和透明度处理的各种滤镜
所有颜色都可以通过3种基本颜色的组合来创建:红色,绿色和蓝色任何颜色表示为混合这三种颜色的各种强度的结果,通常以0到255(256 = 216)或十六进制 从x00到xff。
当彩电被发明出来的时候,彩色电视就必须在黑白电视机上播放。基于人眼对绿色的敏感程度,对红色的敏感度降低,对蓝色的敏感度更低,开发出了一种新的颜色空间YUV和后来的Y’CbCr。
RGB和YUV对比
|
RGB |
YUV (Y'CbCr) |
描述 |
添加红色、绿色和蓝色光的加色空间 |
图像被划分为1个亮度和2个色度分量 |
组件 |
R = 红色通道 |
Y' = luma (亮度) |
组件 |
G = 绿色通道 |
U = Y' - B = Cb (luma- 蓝色) |
组件 |
B = 蓝色通道 |
V = Y' - R = Cr (luma - 红色) |
用途 |
电脑、数码相机等 |
电视、视频等 |
要改变RGB输入格式的特定通道,我们使用lutrgb滤波器。 它通过将r,g和b参数的值设置为0到255(255以上的任何值被认为是255)来调整色彩平衡
使用lutrgb滤镜来修改三个颜色的值
例如:
ffplay scenery.mp4 -vf lutrgb=r=200 (rgb:0-255)
色彩均衡
要调整红色,绿色或蓝色通道的亮度,我们设置一个从0到255的数字,并将其输入为lutrgb滤镜的r,g或b参数。 我们还可以对输入值进行分(减)或乘(增),例如将蓝色强度加倍,我们可以使用表达式lutrgb = b = val * 2。
YUV像素格式的修改,使用lutrgb滤镜
要修改YUV格式的组件,我们使用lutyuv过滤器。 y参数调整亮度(亮度),u参数调整蓝色平衡,v参数调整红色平衡。
例如:
使用lutyuv滤镜实现黑白效果
ffmpeg -i 1.mpg -vf lutyuv=u=128:v=128 lutyuv.mpg (yuv 0-256)
亮度校正,使用lutyuv滤镜
在RGB颜色模型中,亮度由三种颜色组合而成,在YUV (Y'CbCr)模型中直接与Y (luma)参数设置。例如,要将亮度调整到90%的输入,我们可以使用lutyuv=y=val*0.9的表达式。
色调和饱和度设置
表示RGB色彩空间的另一种方法是HSB(HSV),色相饱和度 - 亮度(色调 - 饱和度值)色彩空间。 它使用圆柱坐标系统代替线性立方体,其中色相是围绕中心垂直轴的角度,饱和度是与该轴的距离。 对于色调和饱和度调整,使用hue滤镜
例如ffplay -i coconut.jpg -vf hue=60
色调s的取值范围为0-360
colorbalance滤镜,修改输入帧的原色强度(红、绿、蓝)。
该滤镜允许输入帧在阴影、中间色调或高亮区域进行调整,以达到红青色、绿品红或蓝黄的平衡。
包含如下参数:
调整红色、绿色和蓝色阴影(最暗的像素)。
rs
gs
bs
调整红色、绿色和蓝色中间色调(中等像素)。
rm
gm
bm
调整红色、绿色和蓝色高光(最亮的像素)。
rh
gh
bh
允许的选项值范围是[-1.0,1.0]。默认值是0。正数调整值将平衡移向原色,负数调整值移向补色。
下图为原图,对该图片进行调整
添加红色阴影/绿色阴影
ffplay test.jpg -vf colorbalance=rs=0.5
ffplay test.jpg -vf colorbalance=gs=0.5
对中间色调调整
ffplay test.jpg -vf colorbalance=rm=0.5
ffplay test.jpg -vf colorbalance=rm=-0.5
对亮色进行调整
ffplay test.jpg -vf colorbalance=gh=0.5
ffplay test.jpg -vf colorbalance=gh=-0.5
colorlevels滤镜,使用层来调整输入视频
例子:
让视频输出暗色调
ffplay scenery.mp4 -vf colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
增强对比度
ffplay scenery.mp4 -vf colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
使视频变亮
ffplay scenery.mp4 -vf colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
增加亮度
ffplay scenery.mp4 -vf colorlevels=romin=0.5:gomin=0.5:bomin=0.5
extractplanes滤镜,从输入视频流分离单独的颜色通道成为灰度视频流
参数值 planes:
yuv/rgb
例子:
提取亮度和U,V颜色分量到3个灰度输出
ffmpeg -i scenery.mp4 -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]’ v.avi
geq滤镜,可以使用各种函数实现各种效果具体参数参数官方文档
http://ffmpeg.org/ffmpeg-all.html#toc-geq
视频水平翻转
ffplay scenery.mp4 -vf "geq='p(W-X\,Y)'"
生成角度为PI/3,波长为100像素的二维正弦波:
ffplay scenery.mp4 -vf "geq=128 + 100*'sin(2*(PI/100)*(cos(PI/3)*(X-50*T)+ sin(PI/3)*Y))':128:128"
生成神秘花哨的光
ffplay scenery.mp4 -vf "geq='random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02)':128:128"
生成浮雕效果
ffplay scenery.mp4 -vf "format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'"
根据像素位置改变rgb分量
ffplay scenery.mp4 -vf "geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'"
创建一个与输入大小相同的径向梯度(也请参阅vignette过滤器):
ffplay scenery.mp4 -vf "geq=lum=255*'gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0)',format=gray”
curves滤镜,使用曲线进行颜色调整。
参数比较复杂这里就不列举了,直接参考官网
http://ffmpeg.org/ffmpeg-all.html#curves-1
实现复古效果
ffplay scenery.mp4 -vf curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
透明度处理
colorkey滤镜,RGB颜色键控
滤镜接受以下选项:
color
设置作为透明的颜色
similarity
与色键的相似度百分比。
0.01只匹配精确的键颜色,而1.0则匹配所有颜色(相当于直接透明了)
blend
混合百分比
0.0使像素完全透明或者完全不透明。
更高的值产生半透明像素,透明度越高,像素颜色越接近色键
例子:使图片半透明混合到视频上
ffmpeg -i scenery.mp4 -i tc.mp4 -filter_complex "[1:v]colorkey=#00FFFFFF:0.6:1.0[ckout];[0:v][ckout]overlay=x=W-w-10:y=0" colorkey.mp4
chromakey滤镜,效果和参数与colorkey类似
色键滤镜。色键合成技术是指将前景图像的背景设置为一种纯色(蓝色、绿色)的幕,其色调有极大的高饱和度彩色,与前景图像中的事务行程鲜明区别。后期的处理中利用这个差别抠出前景图中的事物,再将抠出的事物图像置于需要的背景图像上,得到完整的合成画面。该滤镜可以将图像中的指定颜色部分的像素替换为透明。其接受一下选项:
color
指定要被替换为透明的颜色
similarity
设置一个百分比,当像素的颜色与指定颜色的相似度达到该值时。被替换0.01为完全相同,为1时匹 配任何颜色
blend
融合程度(百分比)0.0时将像素替换为完全透明,或者完全不透明,值越高则透明度越高,透明度越高 那么像素的颜色与设定的color越像
yuv
标明传入的color选项已经是YUV格式而不是RGB。若使用了该选项,那么将“green”或者“red”作为color选项的值将没有意义。该选项可以用于输入准确的十六进制YUV值。
例如把一个绿色背景的人的视频抠出来合并到另外一个视频上
ffmpeg -i scenery.mp4 -i person.mp4 -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]” output.mp4
chromakey滤镜主要处理YUV数据,所以一般来说绿幕处理更有优势;而colorkey处理纯色均可以,因为colorkey主要以RGB数据为主
例如将女神的视频叠加到另外一个风景图上
ffmpeg -i scenery.mp4 -i shen.mov -filter_complex "[1:v]chromakey=0x00000000:0.01:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]” output.mp4
备注:shen.mov mov格式包含透明图层可以使用0x000000把透明色抠出来
颜色修改参考:https://www.jianshu.com/p/f2a94de1c26a