FFmpeg滤镜:使用colorkey抠图

介绍如何使用FFmpeg的colorkey滤镜实现视频和图片的背景抠图,包括参数设置及应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天介绍一下colorkey滤镜。通过使用这个滤镜,可以把图像中指定的颜色(或者在一定相似度范围内)的像素替换成透明色——说白了,就是把符合条件的像素抠掉。

官网说明:http://ffmpeg.org/ffmpeg-filters.html#colorkey

这个滤镜有三个参数。第一个(color)用于指定要抠掉的颜色;第二个(similarity)是相似度,意思是“差不多”的像素也会被抠掉,取值范围 [0.01 - 1],数值越小,颜色匹配时越严格,极端情况下比如取值为0.01就是只抠除第一个参数指定颜色的像素;第三个(blend)是混合比例,取值范围 [0 - 1],实际测下来效果不明显。

假如我们有这样一个纯绿背景色的logo,想要把它叠加在视频上,并且叠加时去除背景色。使用FFmpeg可以这么来做:

ffmpeg -i D:\MTest\bear_short.mp4 -i D:\MTest\slogan.png -filter_complex "[1:v]colorkey=0x00FF00:0.01:1[ckout];[0:v][ckout]overlay[out]" -map "[out]" -map 0:a D:\MTest\cktest1.mp4

意思是:在bear_short.mp4这个视频上叠加一张图片slogan.png(注:overlay后面没有带x/y参数时,默认叠加在视频的左上角)。colorkey的三个参数:0x00FF00表示绿色,0.01是相似度,表示只抠除RGB值严格等于0x00FF00的像素,混合比例是1。最后把合成的音视频数据写入cktest1.mp4。

使用ffplay播放cktest1.mp4,效果如下:

为了加深对“相似度”这个参数的理解,我们对logo的背景色做一下处理,让它不那么纯。然后重复执行上述FFmpeg命令行,得到的效果如下:

怎么解决这个问题呢?其实很简单,只要将相似度参数改成0.5即可,如下:

ffmpeg -i D:\MTest\bear_short.mp4 -i D:\MTest\slogan2.png -filter_complex "[1:v]colorkey=0x00FF00:0.5:1[ckout];[0:v][ckout]overlay=x=W-w:y=H-h[out]" -map "[out]" -map 0:a D:\MTest\cktest2.mp4

我们顺便练习一下,在overlay后面指定x和y参数,让logo出现在右下角:

上面演示的是在视频上叠加图片的例子。那么,能不能反过来呢,在一张大的背景图片上叠加视频,并且对视频进行抠图处理?当然也是可行的!

假设我们的源视频是这样的:

事先提取视频的背景色大致是0x646464,相似度指定为0.3,执行的命令行如下:

ffmpeg -i D:\MTest\BKG.JPG -i D:\MTest\Src.mp4 -filter_complex "[1:v]colorkey=0x646464:0.3:0.1[ckout];[0:v][ckout]overlay[out]" -map "[out]" D:\MTest\cktest3.mp4

混合后的实际效果:

本文完。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值