答案1
好吧,假设您希望 1 个完整的圆圈需要 20 秒,从一个角到另一个角需要 5 秒:
对于动画图像:
ffmpeg -t 20 -loop 1 -i "I love cats.png" -i logo.png -loop 0 -filter_complex ^
"[0][1]overlay=x='0+(t-0)*(W-w)/5':y=0:enable='between(t,0,5)'[img]; ^
[img][1]overlay=x=W-w:y='0+(t-5)*(H-h)/5':enable='between(t,5,10)'[img]; ^
[img][1]overlay=x=(W-w)-(t-10)*(W-w)/5:y=H-h:enable='between(t,10,15)'[img], ^
[img][1]overlay=x=0:y=(H-h)-(t-15)*(H-h)/5:enable='between(t,15,20)'" -c:v libwebp_anim -compression_level 5 "Output.webp"
一句话:
ffmpeg -t 20 -loop 1 -i "I love cats.png" -i logo.png -loop 0 -filter_complex "[0][1]overlay=x='0+(t-0)*(W-w)/5':y=0:enable='between(t,0,5)'[img];[img][1]overlay=x=W-w:y='0+(t-5)*(H-h)/5':enable='between(t,5,10)'[img];[img][1]overlay=x=(W-w)-(t-10)*(W-w)/5:y=H-h:enable='between(t,10,15)'[img],[img][1]overlay=x=0:y=(H-h)-(t-15)*(H-h)/5:enable='between(t,15,20)'" -c:v libwebp_anim -compression_level 5 "Output.webp"
我使用 webp 是因为它的输出比 gif 或动画 png 要小并且允许循环,但您也可以使用其他东西......
对于电影:
ffmpeg -i "input.mp4" -i "logo.png" -filter_complex ^
"[0][1]overlay=y=0:x='mod=(t*((W-w)/5),W-w)':enable='lt(mod(t,20),5)'[vid]; ^
[vid][1]overlay=x=W-w:y='mod=(t*((H-h)/5),H-h)':enable='lt(mod(t-5,20),5)'[vid]; ^
[vid][1]overlay=y=H-h:x='(W-w)-(mod(t*((W-w)/5),W-w))':enable='lt(mod(t-10,20),5)'[vid]; ^
[vid][1]overlay=x=0:y='(H-h)-(mod(t*((H-h)/5),H-h))':enable='lt(mod(t-15,20),5)'[vid]" -map [vid] -map 0:a:0 -vsync 0 -c:v libx264 "output.mp4"
一句话:
ffmpeg -i "input.mp4" -i logo.png -filter_complex "[0][1]overlay=y=0:x='mod=(t*((W-w)/5),W-w)':enable='lt(mod(t,20),5)'[vid];[vid][1]overlay=x=W-w:y='mod=(t*((H-h)/5),H-h)':enable='lt(mod(t-5,20),5)'[vid];[vid][1]overlay=y=H-h:x='(W-w)-(mod(t*((W-w)/5),W-w))':enable='lt(mod(t-10,20),5)'[vid];[vid][1]overlay=x=0:y='(H-h)-(mod(t*((H-h)/5),H-h))':enable='lt(mod(t-15,20),5)'[vid]" -map [vid] -map 0:a:0 -vsync 0 -c:v libx264 "output.mp4"