FFmpeg添加GIF水印:循环播放失效问题解决求助
解决FFmpeg中GIF水印仅播放一次的问题
这个问题很常见——当你的GIF时长比目标视频短的时候,FFmpeg默认只会播放一遍GIF的帧序列,之后水印就停留在最后一帧,看起来像是"停止了"。下面给你两种简单有效的解决方案:
方法1:用-stream_loop参数让GIF无限循环
在GIF的输入参数前添加-stream_loop -1,这个参数会让GIF的视频流无限重复播放,直到视频结束。修改后的完整命令如下:
ffmpeg.exe -i "video.mp4" -stream_loop -1 -i "ani.gif" -filter_complex "[1:v]format=yuva444p,setsar=1,scale=80:80,rotate=PI/6:c=black@0:ow=rotw(PI/6):oh=roth(PI/6) [rotate];[0:v][rotate] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy -y output.mp4
说明:-stream_loop -1中的-1代表无限循环,你也可以换成具体数字(比如3就是循环3次),但一般做水印用无限循环更合适。
方法2:用loop滤镜在处理链中实现循环
如果你更倾向于在滤镜链里控制循环,可以给GIF的视频流添加loop滤镜,设置无限循环。修改后的命令:
ffmpeg.exe -i "video.mp4" -i "ani.gif" -filter_complex "[1:v]loop=loop=-1:size=0,format=yuva444p,setsar=1,scale=80:80,rotate=PI/6:c=black@0:ow=rotw(PI/6):oh=roth(PI/6) [rotate];[0:v][rotate] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy -y output.mp4
说明:loop=loop=-1表示无限循环,size=0表示使用输入GIF的所有帧来循环,这样GIF会持续重复播放直到视频结束。
额外注意事项
- 保留
format=yuva444p确保GIF的透明通道正常生效,避免水印出现黑边或背景色; setsar=1是为了保证缩放、旋转后的水印不会出现拉伸变形;- 你的旋转参数
rotate=PI/6:c=black@0...设置没问题,保持即可,c=black@0确保旋转后的空白区域完全透明。
内容的提问来源于stack exchange,提问作者Muhammad Sanaullah
相关产品推荐
相关产品推荐

