我目前有一个水印在视频中跳来跳去,里面有一段可怕的代码filter_complex
overlay=x='if(gte(mod(t*100, (W-w)*2), W-w), (W-w)*2 - mod(t*100, (W-w)*2), mod(t*100, (W-w)*2))'
:y='if(gte(mod(t*100, (H-h)*2), H-h), (H-h)*2 - mod(t*100, (H-h)*2), mod(t*100, (H-h)*2))'
我也想让它随着时间旋转。
我发现当我定义覆盖元素时,我可以应用“rotate = 2”或其他任何方法将其旋转一次,并且它在弹跳时会保持原样。
如果我尝试rotate='PI*t'
它什么也不做(但令人惊讶的是它没有给我一个关于 的错误t
)。我想我并不惊讶它不起作用,但我很惊讶它没有抱怨我的t
。
如果我尝试在同一个部分中添加rotate='PI*t'
我告诉覆盖的内容x
和y
要具有的内容(我可能期望它工作的位置,因为t
在那里可以清楚地理解),它确实会出错 -Option 'rotate' not found
这是否可以在 ffmpeg 命令中执行,或者我是否需要制作动画 apng/avif 水印文件?
(我使用的是相对较旧的 ffmpeg 版本,5.1.6。如果迁移到较新版本比较容易,我很乐意这样做 - 我正在运行 CentOS Stream 9。)
编辑
这就是我现在正在尝试的@Gyan
ffmpeg
-y
-i input.mp4
-loop 1 -i logo.png
-filter_complex "
[0:v]
scale=960:540[video];
[1]
scale=100:-1,colorchannelmixer=aa=0.6,rotate=a='PI/50*t':fillcolor=none[logo];
[video][logo]
overlay=x='if(gte(mod(t*100, (W-w)*2), W-w), (W-w)*2 - mod(t*100, (W-w)*2), mod(t*100, (W-w)*2))'
:y='if(gte(mod(t*100, (H-h)*2), H-h), (H-h)*2 - mod(t*100, (H-h)*2), mod(t*100, (H-h)*2))'
"
-c:a aac
-c:v libx264
output.mp4
如果没有这个-loop 1
,这需要 1-2 秒。有了它,我厌倦了,并ctrl-C
在 30 秒后完成了它。
编辑二
好的,我删除了-loop 1
并将相关行更改为
[1]loop=100:1:0,scale=100:-1,colorchannelmixer=aa=0.6,rotate=a='PI/5*t':ow=iw*1.5:oh=ih*1.5:fillcolor=none[logo];
这似乎做得很好。但只适用于 100 帧。如果我把它放在-1
那里,它似乎会生成一个无限流,而不是匹配 input.mp4 的长度。我认为答案涉及关键字,但我不完全确定它应该放在哪里?之前shortest
将它作为选项添加没有用。-shortest
output.mp4
附加问题:图像旋转时,周围出现了白色圆形条纹,如何修复?
我做错什么了?
谢谢你!