使用maskedmerge覆盖带透明度的圆形视频

时间:2017-07-11 11:13:12

标签: ffmpeg snapchat

我有一个来自Snap Spectacles(1088x1088)的方形视频,我想要叠加在其上并放大并模糊。

示例输入框:

original snap spectacles video frame

生成放大和模糊背景:

generated zoomed in and blurred background

期望的输出:

desired output

我想我可以使用ffmpeg's maskedmerge执行此操作,但我无法找到示例。

an example of maskedmerge that merges two videos of the same size and dynamically removes a green screen,另有merges videos with transparency

这是我能找到的最接近的地方:

ffmpeg -i background.jpg -vf "movie=input.jpg[inner];[in][inner] overlay=#{offset}:0 [out]" -c:a copy output.jpg

enter image description here

tl; dr:给出前两帧,我怎样才能生成第三帧(作为视频)?

1 个答案:

答案 0 :(得分:2)

知道了!

像@Mulvya推荐的那样,我需要一个圆形面具:

ffmpeg circular mask

鉴于掩码snapmask.png,模糊的方形背景视频background.mov和原始视频65B6354F61B4AF02_HD.MOV,它们可以合并为:

ffmpeg -i background.mov -loop 1 -i snapmask.png -filter_complex " \
[1:v]alphaextract, scale=1080:1080 [mask];\
movie=65B6354F61B4AF02_HD.MOV, scale=1080:1080 [original];\
[original][mask] alphamerge [masked];\
[0:v][masked] overlay=420:0;"\
-c:a copy output.mov

但是,你可以做得更好,它可以在同一个命令中动态生成模糊的背景视频。现在唯一的输入是原始眼镜圆形视频和圆形面具:

ffmpeg -i 65B6354F61B4AF02_HD.MOV -loop 1 -i snapmask.png -filter_complex "\
[0:v]split[a][b];\
[1:v]alphaextract, scale=1080:1080[mask];\
[a]scale=1080:1080 [ascaled];\
[ascaled][mask]alphamerge[masked];\
[b]crop=946.56:532:70.72:278, boxblur=10:5,scale=1920:1080[background];\
[background][masked]overlay=420:0"\
-c:a copy 65B6354F61B4AF02_HD_sq.MOV

我发现crop=946.56:532:70.72:278位最适合裁剪圆形视频的矩形部分以进行放大。

我花了一些时间围绕ffmpeg过滤系统来探讨如何做到这一点,但它并不像我最初想的那样可怕。基本语法为[input]command args[output],命令可以链接而无需明确命名其输出(如[1:v]alphaextract, scale=1080:1080[mask])。