RGB和YUV颜色对比,使用ffmpeg颜色处理,视频混合,透明度处理

本文汇总了ffmpeg关于色彩处理和透明度处理的各种滤镜

所有颜色都可以通过3种基本颜色的组合来创建:红色,绿色和蓝色任何颜色表示为混合这三种颜色的各种强度的结果,通常以0到255(256 = 216)或十六进制 从x00xff

当彩电被发明出来的时候,彩色电视就必须在黑白电视机上播放。基于人眼对绿色的敏感程度,对红色的敏感度降低,对蓝色的敏感度更低,开发出了一种新的颜色空间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滤镜

要改变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

 

 

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值