使用FFmpeg实现抠图合并功能(chroma key)

自己以前实现抠图算法好久了,没想到ffmpeg里面早有这个功能了

在很多视频中可以看到图像是合成的,例如有些神剧里面某大侠跳下万丈深渊的场景,某人在三昧真火中被烧的场景,还有些游戏主播,体育主播在主场景前面有个人解说的场景,都是chroma key的技术实现的,具体的链接可以参考:

http://www.cs.utah.edu/~michael/chroma/

效果图如下:

在最新版本的ffmpeg中,已经增加了chroma key功能的filter,只需要一条命令即可搞定

点击(此处)折叠或打开

  1. ./ffmpeg -i ~/fuck.mp4 -i ~/1.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4

将1.mp4中的人物抠出来,合并到fuck.mp4中,就可以搞定了

合并之前的1.mp4的效果

执行命令行如下:

与fuck合并后的效果

时间: 2024-07-31 01:19:22

使用FFmpeg实现抠图合并功能(chroma key)的相关文章

ffmpeg 文件切片合并

最近再做m3u8切片合并下载的小功能,因为要合并成mp4,所以考虑用ffmpeg来搞,mp4格式忒复杂了. 查了下文档ffmpeg支持concat demux和concat protocol. 用法如下: ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg //这个是concat protocal,这个命令只支持一部分视频格式 如mpeg1,2 mpegts,不支持flv,mp4mylist.tx

ffmpeg流文件合并concat

使用ffmpeg的concat可以实现简单的流文件合并功能. 例如: ./ffmpeg -i concat:"out002.ts|out003.ts|out004.ts" -acodec copy -vcodec copy -f mp4 cat.mp4 注意: 输入的各个流需要编码参数一致,否则输出的文件会跟预期不同. 资料引用: Physical concatenation protocol. Allow to read and seek from many resource in

PyQt5实现邮件合并功能(GUI)

1. 实战Word批量 需要处理批量替换word的一些数据,数据源从Excel中来. Excel的百分数会变为数字,以及浮点数会多好多精度,为了原汁原味的数据,直接复制数据到文本文件.通过\t来分隔即可,最后一个值多\n得注意. 然后在Word中加变量用{XXXX}格式的得转一下{},时间关系,用了 TEMP_XXX之类的,str.replace()去替换模板数据即可.女朋友发现Word有邮件合并功能,类似模板替换. 2. 进阶-GUI工具 2.1 预备,查漏补缺 1)界面 看<PyQt快速开发

PHP二维数组合并,根据某个key合并

/** *PHP二维数组合并,根据某个key合并 * @param type $v 要传入的组合阵列 * @param type $keyname 对应的KEY名称. * @param type $valname 要写入的值KEY名称 * @param type $s 重组译的阵例.预设空值. */ function test($v,$keyname,$valname,$s=Array()){ foreach($v AS $_k => $d){ $s[$d[$keyname]][$valname

PHP合并数组保留key值

PHP合并数组,键值不变 尝试了好几个合并数组的函数, 但是都是把key值重置, 导致key值丢失(因为key值是要用到的) 大大说, 最好用数组的相关函数, 网上随意找了下, 还是没找到. 因为自己使用的是+, 但是要注意, 前后都必须是数组, 如果是空值的时候, 需要初始化为array(), 不然就会报错 找到一篇文章, 就复制过来保留着了. PHP中有合并数组的函数 array_merge(),但是这个函数有一个缺点,就是在使用的时候,会使数组为数字的键值重置,丢失原来的键值: 后来,找了

Mac下用C语言实现代码合并功能

程序功能: 将一个文件夹下包括所有子文件夹中的所有指定类型文件内容合并到一个文件中. 操作方法: 用Xcode编译成功后将生成的可执行文件拖到桌面再双击打开,这样做可以直接将文件夹路径拖入,方便省事. 完整代码如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 /**要执行的find命令*/ 7 char command[5000]; 8 /**需要合并

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

PHP中合并数组且key值不变

一般PHP中合并两个数组都会使用array_merge()例如: $data1 = ['111' => 'aaa', '222' => 'bbb', '333' => 'ccc']; $data2 = ['444' => 'ddd', '555' => 'eee', '666' => 'fff']; $data = array_merge($data1, $data2); var_dump($data); 得到结果: array(6) { [0]=> string

jQuery实现HTML表格单元格的合并功能

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <sc