Image processing FFMPEG:用于图像/视频的色度键/绿色屏幕过滤器

Image processing FFMPEG:用于图像/视频的色度键/绿色屏幕过滤器,image-processing,filter,ffmpeg,video-processing,chromakey,Image Processing,Filter,Ffmpeg,Video Processing,Chromakey,我需要一个视频使用色度键过滤器/绿屏过滤器,覆盖在另一个视频上,并作为新视频输出 是否有用于此目的的现有库、脚本、筛选器或解决方案?我所知不明确 包含读取视频、转换为RGB、拆分颜色平面、替换基于颜色的像素、合并帧和写入视频所需的所有功能 这是一个很好的研究方法,但它不会创建一个插件directshow过滤器来自动完成这项工作Mathematica中的ChanVeseBinarize函数可能会有所帮助,请参见此处的第一个“应用程序”: 对于脱机处理,您将按顺序导入每个图像,对其进行处理,然后导

我需要一个视频使用色度键过滤器/绿屏过滤器,覆盖在另一个视频上,并作为新视频输出


是否有用于此目的的现有库、脚本、筛选器或解决方案?

我所知不明确

包含读取视频、转换为RGB、拆分颜色平面、替换基于颜色的像素、合并帧和写入视频所需的所有功能


这是一个很好的研究方法,但它不会创建一个插件directshow过滤器来自动完成这项工作

Mathematica中的ChanVeseBinarize函数可能会有所帮助,请参见此处的第一个“应用程序”:

对于脱机处理,您将按顺序导入每个图像,对其进行处理,然后导出覆盖。最终,您将从所有覆盖图像创建新视频。

超级用户建议使用的一个类似问题

从MLT网站:

MLT是一个开源的多媒体框架,为电视广播设计和开发。它为广播公司、视频编辑器、媒体播放器、转码器、网络流媒体和更多类型的应用程序提供了工具包。该系统的功能是通过各种现成的工具、XML编写组件和基于可扩展插件的API提供的。 尝试和学习MLT最简单的方法是下载

答案(现在)是肯定的,有一个过滤器用于生成色度键并覆盖它们。筛选器名称为“”。网站上有一些示例,下面是命令:

ffmpeg -i <base-video> -i <overlay-video> -filter_complex '[1:v]colorkey=0x<color>:<similarity>:<blend>[ckout];[0:v][ckout]overlay[out]' -map '[out]' <output-file>
ffmpeg-i-i-filter_complex'[1:v]colorkey=0x::[ckout];[0:v][ckout]覆盖[out]'-map'[out]'

其中,
是要以十六进制匹配的rgb颜色(黑色为ex:0x000000),
是颜色匹配的公差(ex:0.3),
(ex:0.2)控制不透明度是开-关还是渐变。(有关更多信息,请参阅文档)。

带有测试数据的最小可运行示例

当时的答案是正确的,这里只是一个简单的具体例子

下载输入媒体:

wget https://github.com/cirosantilli/media/raw/master/Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg
wget https://github.com/cirosantilli/media/raw/master/opengl-rotating-triangle.mp4
使图像大小与1024x1024的视频大小匹配。视频大小可以:

进行实际转换:

ffmpeg -i background.jpg -i opengl-rotating-triangle.mp4 \
  -filter_complex '[1:v]colorkey=0x000000:0.1:[ckout];[0:v][ckout]overlay[out]' \
  -map '[out]' out.mp4
转换为gif仅用于预览此答案:

ffmpeg -i out.mp4 -r 5 -vf "scale=300:-1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" out.gif
所以在我的例子中,我有一个黑色的背景,它被转换成一个固定的图像

结果预览(可怕的FPS适合2MB的GIF上传到此处):

实际视频输出:

原始输入文件供参考:

opengl-rotating-triangle.mp4

2012年,在杭州灵隐寺附近的飞来峰岩洞中雕刻有石刻布袋的西罗山提利

它也只适用于视频背景

wget https://upload.wikimedia.org/wikipedia/commons/f/f9/STS-132_Liftoff_Space_Shuttle_Atlantis.ogv
ffmpeg -i STS-132_Liftoff_Space_Shuttle_Atlantis.ogv -i opengl-rotating-triangle.mp4 -filter_complex '[1:v]colorkey=0x000000:0.1:[ckout];[0:v]trim=start=0:end=8[cut0];[cut0][ckout]overlay[out]' -map '[out]' out.mp4
在这里,我将另一个参数
shortest=1
添加到
overlay
过滤器中:

overlay=shortest=1
要使叠加在三角形视频停止时立即停止,否则它默认在更长的亚特兰蒂斯视频结束时停止

您可能还希望使用
trim
过滤器来选择任意段

亚特兰蒂斯号的视频是1920x1080,最终的输出也是这个尺寸。预览:

实际视频:


在Ubuntu 20.10、FFmpeg 4.3.1上测试。

可能比Opencv容易得多?我不能对此发表评论,可能你可以单独问这个问题,这样对这两种框架都有经验的人可以回答。非常感谢。现在我们有了一个使用ffmpeg的直接解决方案。既然mmpeg的哪个版本可用?它于6月13日添加到主分支中,但尚未成为实际版本(当前版本为2.7.2)。人们需要从源代码构建ffmpeg。我从github下载了ffmpeg的主分支并编译了它,但它仍然告诉我“无法识别的选项”-filter_complex'”我知道,它是“-filter_complex”,而不是“-filter_complex”(只有一个破折号),这很有帮助,但新版本使用的是chromakey过滤器,而不是colorkey。
overlay=shortest=1