我使用此命令将带有 alpha 通道的 .mov 视频插入背景视频。但 alpha 通道视频只播放 1 次。我应该如何使用 -loop 命令,我可以每 30 秒循环一次吗?
ffmpeg -i "output_all.mp4" -i "logo\logovid.mov" -filter_complex "[1:v]scale=in_w/2:-2[over];[0:v][over]overlay=main_w-overlay_w-5:50" -codec:v:0 libx264 -b:v 3M "final\gotovo.mp4"
我们可以将logovid的时间缩短到30秒,然后使用循环过滤器将其循环播放,并将循环视频用作
[over]
:ffmpeg -y -i "input.mp4" -i "logo\logovid.mov" -filter_complex "[1:v]scale=in_w/2:-2,format=rgba[logo];color=black@0:100x100:r=30:d=30,format=rgba[c];[c][logo]scale2ref[c0][logo0];[c0][logo0]overlay=repeatlast=0[logo1];[logo1]loop=-1:30000[over];[0:v][over]overlay=main_w-overlay_w-5:50:shortest=1" -codec:v libx264 -b:v 3M "final\gotovo.mp4"
为了测试,请从这里下载 vecteezy_countdown-leader-movie-intro-graphic-saber-fire-transparent_16911493.mov ,并重命名为 logovid.mov。
我们还可以使用以下input.mp4进行测试:
ffmpeg -y -f lavfi -i testsrc=s=1920x1080:r=30:d=250 input.mp4
解释各个阶段:
第一阶段:覆盖
logovid
透明背景(设置透明背景的持续时间为30秒):ffmpeg -y -i logo\logovid.mov -filter_complex "[0:v]format=rgba[logo];color=black@0:100x100:r=30:d=30,format=rgba[c];[c][logo]scale2ref[c0][logo0];[c0][logo0]overlay=repeatlast=0" -c:v prores -pix_fmt yuva444p10le test30sec.mov
结果是10秒
logovid
,然后是20秒的透明视频。第二阶段:使用过滤器多次循环第一阶段的输出
loop
:ffmpeg -y -i logo\logovid.mov -filter_complex "[0:v]format=rgba[logo];color=black@0:100x100:r=30:d=30,format=rgba[c];[c][logo]scale2ref[c0][logo0];[c0][logo0]overlay=repeatlast=0[logo1];[logo1]loop=-1:30000" -t 250 -c:v prores -pix_fmt yuva444p10le test250sec.mov
結果為:
10sec,20sec
,,...10sec,20sec
10sec,20sec
第三阶段:使用第二阶段的输出作为
[over]
(也应用原始比例滤波器):ffmpeg -y -i "input.mp4" -i "logo\logovid.mov" -filter_complex "[1:v]scale=in_w/2:-2,format=rgba[logo];color=black@0:100x100:r=30:d=30,format=rgba[c];[c][logo]scale2ref[c0][logo0];[c0][logo0]overlay=repeatlast=0[logo1];[logo1]loop=-1:30000[over];[0:v][over]overlay=main_w-overlay_w-5:50:shortest=1" -codec:v libx264 -b:v 3M "final\gotovo.mp4"