使用 maskedmerge 叠加具有透明度的圆形视频
Overlay circular video with transparency with maskedmerge
我有一个来自 Snap Spectacles (1088x1088) 的方形视频,我想叠加在放大和模糊的自身上。
示例输入帧:
生成放大和模糊背景:
期望的输出:
我想我可以用 ffmpeg's maskedmerge 做到这一点,但我找不到示例。
有 an example of maskedmerge that merges two videos of the same size and dynamically removes a green screen, and another that merges videos with transparency.
这是我能得到的最接近的:
ffmpeg -i background.jpg -vf "movie=input.jpg[inner];[in][inner] overlay=#{offset}:0 [out]" -c:a copy output.jpg
tl;dr:给定前两帧,我如何生成第三帧(作为视频)?
知道了!
像@Mulvya 推荐的那样,我需要一个圆形面具:
给定蒙版 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]
)。
我有一个来自 Snap Spectacles (1088x1088) 的方形视频,我想叠加在放大和模糊的自身上。
示例输入帧:
生成放大和模糊背景:
期望的输出:
我想我可以用 ffmpeg's maskedmerge 做到这一点,但我找不到示例。
有 an example of maskedmerge that merges two videos of the same size and dynamically removes a green screen, and another that merges videos with transparency.
这是我能得到的最接近的:
ffmpeg -i background.jpg -vf "movie=input.jpg[inner];[in][inner] overlay=#{offset}:0 [out]" -c:a copy output.jpg
tl;dr:给定前两帧,我如何生成第三帧(作为视频)?
知道了!
像@Mulvya 推荐的那样,我需要一个圆形面具:
给定蒙版 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]
)。