如何在 FFMPEG 中的所有边缘叠加徽标

如何在 FFMPEG 中的所有边缘叠加徽标

正在使用此命令将徽标渲染到所有边缘,从左上边缘开始

ffmpeg -i film.mp4 -i logo_white.png -filter_complex   "[0:v][1:v]overlay=enable='between=(t,0,360)':x=0+t*60:y=t[out]" -map "[out]" output2.mp4

但 30 秒后,徽标超出了宽度。如何让它在所有边缘移动?我应该使用 if 语句并进行计算吗?或者有没有更简单的方法?

更新:

我想让徽标在视频播放时不停地从第一条边浮动到所有其他边

在此处输入图片描述

答案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"

相关内容