如何使用 ffmpeg 在视频上叠加多个动画图像

How to overlay multiple animated images on a video using ffmpeg

在使用 "rotate" 滤镜制作动画后,我试图在视频上叠加多个图像。我在旋转过滤器中使用 t 参数使动画有点随意,所以我不得不将输入视频标记为循环(使用 -loop 标志)。 问题是当我只执行一个覆盖时,结果是预期的,但是当命令中出现第二个覆盖时,它突然结束并生成一个空的输出视频。 以下是我正在使用的命令:

ffmpeg -y -i template.mp4 -loop 1 -i Image_1.jpg -i Image_2.jpg -filter_complex " \
[1:v]scale=186:136[scaled1]; \
[scaled1]format=rgba,colorchannelmixer=aa=0.7[transp1]; \
[transp1]rotate=20*sin(2*PI/(t-9)):c=0xFFFFFF00:ow=250:oh=250,fade=in:st=1:d=5[ANIM_F1]; \
[2:v]scale=136:186[scaled2]; \
[scaled2]format=rgba,colorchannelmixer=aa=0.7[transp2]; \
[transp2]rotate=20*cos(2*PI/(t-9)):c=0xFFFFFF00:ow=250:oh=250,fade=in:st=1:d=5[ANIM_F2]; \
[0][ANIM_F1] overlay=x=1:y=190:shortest=1:enable='between(t,5,15)'[PHASE1]; \
[PHASE1][ANIM_F2] overlay=x=480:y=380:shortest=1:enable='between(t,10,20)'[out]" \
-map [out] output.mp4

在这个部分,

-i template.mp4 -loop 1 -i Image_1.jpg -i Image_2.jpg

视频没有循环播放,第一张图片是,第二张图片不是。由于第二张图片没有循环播放,因此旋转或叠加滤镜只有一帧可以使用。假设您的视频超过 20 秒,您只需循环播放第二张图片。

-i template.mp4 -loop 1 -i Image_1.jpg -loop 1 -i Image_2.jpg