ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ffmpeg利用滤镜进行视频混合(命令行)

2021-12-17 23:05:23  阅读:264  来源: 互联网

标签:视频 ffmpeg overlay mp4 如下 滤镜 myname pad 命令行


ffmpeg的滤镜是极其强大的,可以进行混音和混流,对于初学者而言,需要了解滤镜的编写规则,滤镜的编写规则,直观上不是很好懂,本文用命令行的方式,对视频进行混合,并给予对应的说明,后面会用代码的方式进行混合。

关于滤镜的说明,下面的这个文章写的不错,读者不妨先看看
https://www.cnblogs.com/vikings-blog/p/11512530.html

准备4个视频文件,每个视频文件1分钟时长,本人直接用自己写的程序抓取本地桌面,生成四个视频文件,相关的抓取可以参考我的博客ffmpeg录制桌面(自己用gdi抓图)
如下图所示,四个文件的背景分别是资源浏览器,桌面,e盘,vs2017。
在这里插入图片描述
现在分别打开给读者看看,本人是在qq影音里面打开的,分辨率为1920*1080
in-computer.mp4对应的视频如下:
在这里插入图片描述
in-desktop.mp4对应的视频如下:
在这里插入图片描述
in-e.mp4对应的视频如下:
在这里插入图片描述
in-vs.mp4对应的视频如下:
在这里插入图片描述
大家其实可以发现,四个文件的大小不一样,这跟图片背景的复杂度有关,图片越复杂,mp4文件越大。

下面开始进行图片混合,首先是两张图片的混合,一左一右,如下所示:
在这里插入图片描述
对应的命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[myname];[myname][1:v]overlay=w" out1.mp4

现在做下简要说明,filter_complex表示的是复杂方式的混合,即两个文件以上(包含两个文件)的混合,pad和overlay分别代表两个过滤器,其中pad代表的是创建一个背景,前面的 [0:v]表示的是第一个视频文件,即in-desktop.mp4,iw,ih表示视频中的宽和高,[0:v]pad=iw2:ih1[myname]表示以第一个视频文件为基,创建一个宽度为其二倍,高度与视频文件一致的pad,并命名为myname,这个名字可以定义成其他字符串;
接着看下面的[myname][1:v]overlay=w,这个过滤器是overlay,代表的是视频混合功能,其前面有两个中括号代表两个源头,其中第一个源头为基,第二个源头往第一个源头里面混。overlay=w,代表的是第二个视频文件[1:v]在整个pad中的坐标,其中横坐标为w,纵坐标没写,为0。
混合的效果如下:
在这里插入图片描述
分辨率为3840*1080。

上面的滤镜写法直接是在第一个视频的基础上创建的pad,也可以独立创建pad,再依次混合两个视频文件,命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "pad=3840:1080[x0];[x0][0:v]overlay=0[x1];[x1][1:v]overlay=w" out1.mp4

其中滤镜分为三段,如下所示,第一段创建pad(图片基),命名为x0,第二段是第一路视频[0:v]向x0混,混合后产生x1,第三段是第二路视频[1:v]向x1混合,并且[1:v]在x1中的位置是w:0。
在这里插入图片描述

我们再看下如下命令产生的效果:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[myname];[myname][1:v]overlay=w/2" out2.mp4

这个跟上面的相比,只修改了一个地方,overlay=w/2,位置变了,代表第二张图片会覆盖第一张图的一半,同时由于pad的总宽度是2w,所以最终的图像,右边会有w/2个宽度没图像,背景呈现黑色,分辨率为3840*1080。
如下所示:
在这里插入图片描述

我们再看下如下命令产生的效果:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "[0:v]pad=iw*3/2:ih*1[myname];[myname][1:v]overlay=w/2" out3.mp4

这个滤镜对应的宽度是3w/2,分辨率为2880*1080:效果如下:
在这里插入图片描述

上面的三个例子是两个视频的横排,我们再看下两视频的竖排:
在这里插入图片描述
输入如下命令:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "[0:v]pad=iw*1:ih*2[myname];[myname][1:v]overlay=0:h" out4.mp4

产生的效果如下,分辨率为1920*2160:
在这里插入图片描述

再次输入命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "[0:v]pad=iw*1:ih*2[myname];[myname][1:v]overlay=0:h/2" out5.mp4

产生的效果如下,分辨率为1920*2160:
在这里插入图片描述
可以看到,最下面有一块没有显示

再次输入命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -filter_complex "[0:v]pad=iw*1:ih*3/2[myname];[myname][1:v]overlay=0:h/2" out6.mp4

产生的效果如下,分辨率为1920*1620:
在这里插入图片描述

接着我们来看下四个视频的混合,界面布局如下:
在这里插入图片描述
首先看没有V4,只有三个视频的混合,命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -i in-e.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[x0];[x0][1:v]overlay=w[x1];[x1][2:v]overlay=0:h" out7.mp4

产生的效果如下,分辨率为3840*2160:
在这里插入图片描述
再次看四个视频齐全的情况,命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -i in-e.mp4 -i in-vs.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[x0];[x0][1:v]overlay=w[x1];[x1][2:v]overlay=0:h[x2];[x2][3:v]overlay=w:h" out8.mp4

产生的效果如下,分辨率为38402160:
在这里插入图片描述
上面的四个视频的混合,分辨率也随之增加,很明显不现实,正常而言,我们想要的效果是,四个视频混合后,最终生成的混合视频的分辨率为1920
1080。

输入命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -i in-e.mp4 -i in-vs.mp4 -filter_complex "[0:v]pad=iw:ih[x0];[x0][1:v]overlay=w/2[x1];[x1][2:v]overlay=0:h/2[x2];[x2][3:v]overlay=w/2:h/2" out9.mp4

产生的效果如下所示,混合视频分辨率为19201080:
在这里插入图片描述
很明显这里面有一个问题,第一块视频的右半部分和下部分被遮挡了。
这个是原有视频的尺寸依然没变有关,需要进行scale操作,即将1920
1080改变为960*540。
此时就需要新增加一个过滤器scale,命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -i in-e.mp4 -i in-vs.mp4 -filter_complex "pad=1920:1080[x0];[0:v]scale=w=960:h=540[scale0];[x0][scale0]overlay=0[x1];[1:v]scale=w=960:h=540[scale1];[x1][scale1]overlay=960[x2];[2:v]scale=w=960:h=540[scale2];[x2][scale2]overlay=0:540[x3];[3:v]scale=w=960:h=540[scale3];[x3][scale3]overlay=960:540" out11.mp4

产生的效果如下所示,混合视频分辨率为1920*1080:
在这里插入图片描述
这次效果是正常的。

我们再看下四个视频的如下组合方式,左边一个,右边三个,左边视频的尺寸为19201080,右边三个视频的尺寸都是640360,注意批注缩写的V2,V3,V4相对于整个图形的坐标位置。
在这里插入图片描述
合成命令如下:

ffmpeg -i in-desktop.mp4 -i in-computer.mp4 -i in-e.mp4 -i in-vs.mp4 -filter_complex "pad=2560:1080[x0];[0:v]scale=w=1920:h=1080[scale0];[x0][scale0]overlay=0[x1];[1:v]scale=w=640:h=360[scale1];[x1][scale1]overlay=1920[x2];[2:v]scale=w=640:h=360[scale2];[x2][scale2]overlay=1920:360[x3];[3:v]scale=w=640:h=360[scale3];[x3][scale3]overlay=1920:720" out12.mp4

效果如下,分辨率为2560*1080:
在这里插入图片描述

最后,本人给出下载地址:
链接:https://pan.baidu.com/s/1UW0meYoi7rIvBPpiFxHo8w
提取码:1234
二维码如下:
在这里插入图片描述
读者如果遇到下载困难,可以联系我。

标签:视频,ffmpeg,overlay,mp4,如下,滤镜,myname,pad,命令行
来源: https://blog.csdn.net/tusong86/article/details/122005161

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有