10——FFmpeg实现多宫格

2020-04-10 15:01:27 浏览数 (1)

你好,欢迎回来,上一期我们学习了如何使用FFmpeg命令行实现画中画的效果!本期,酷炫升级,我们来使用FFmpeg命令行来实现一下画面多宫格的效果!一说到多宫格,相信我们的第一反应是九宫格,不过呢,由于使用FFmpeg命令行实现九宫格的参数实在太臃肿,我们案例中实现四宫格的效果,也足够酷炫哦!好了,接下来言归正传:

一、命令行参数

代码语言:javascript复制
ffmpeg  -re  -i  test.mp4 -re  -i test.mp4 -re  -i  test.mp4 -re  -i  test.mp4 -filter_complex "nullsrc=size=1920x1080 [base];[0:v] setpts=PTS-STARTPTS,scale=960x540 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=960x540 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=960x540 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=960x540 [lowerright];[base][upperleft] overlay=shortest=1[tmp1]; [tmp1][upperright] overlay=shortest=1:x=960 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=540 [tmp3];[tmp3][lowerright] overlay=shortest=1:x=960:y=540" -c:v libx264 out_1080p.mp4

二、参数解释

-re -i : 在实现多宫格的过程中,如此表示多个输入,其后写视频文件名即可

-filter_complex: 表示使用复合滤镜,其后引号中内容为滤镜的具体参数

nullsrc: 理解为画布,也就是我们要把所有的视频画到该画布上,参数中指定其大小

[n:v]: 表示第n个视频的参数, setpts表示pts的设置方式,scale表示该视频的缩放大小,[upperleft]指出第n个视频所对应的标签,此例中n为0,1,2,3

接下来,请仔细看喽:

首先在[base]上,加入[upperleft]的内容,使用overlay滤镜,滤镜叠加起始位置为(0,0)(不填默认为原点)后,产生新的标签tmp1;

基于[tmp1],与[upperright]使用overlay再次叠加,产生标签[tmp2];

基于[tmp2], 与[lowerleft]使用overlay再次叠加,产生标签[tmp3];

基于[tmp3], 与[lowerright]使用overlay再次叠加,所有4个标签构建完成。

-c:v 指出合成之后的视频使用何种编码方式

三、实战

由于参数臃肿,就不一一手敲了,大家看看命令执行的效果:

四、效果

好了,今天这一期就到这里了,欢迎小伙伴们下期光临,也别忘了多多练习哦!

0 人点赞