Atualmente, tenho uma marca d'água que salta dentro do vídeo com esse pedaço horrível de código dentro de umfilter_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))'
Eu gostaria que ele girasse em relação ao tempo também.
Descobri que quando defino o elemento de sobreposição, posso aplicar 'rotate=2' ou algo assim para girá-lo uma vez, e ele permanece assim enquanto salta.
Se eu tentar rotate='PI*t'
, não faz nada (mas surpreendentemente NÃO me dá um erro sobre t
). Acho que não estou surpreso que não funcione, mas estou surpreso que não reclame sobre meu t
.
Se eu tentar adicionar rotate='PI*t'
na mesma seção que estou dizendo à sobreposição o que x
e y
o que ter (onde eu poderia esperar que funcionasse, como t
está claramente entendido lá), ele DÁ erro -Option 'rotate' not found
É possível fazer isso em um comando ffmpeg ou preciso criar um arquivo de marca d'água apng/avif animado?
(Estou usando uma versão relativamente antiga do ffmpeg, 5.1.6. Ficarei feliz em migrar para uma versão mais recente se for relativamente fácil fazê-lo - estou executando o CentOS Stream 9.)
editar
É isso que estou tentando agora @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
Sem -loop 1
isso, demora de 1 a 2 segundos. Com isso, fiquei entediado e ctrl-C
fiz isso depois de 30 segundos.
editar dois
OK, removi -loop 1
e alterei a linha relevante para
[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];
E isso parece fazer o trabalho bem. Mas apenas para 100 quadros. Se eu colocar -1
lá, parece gerar um fluxo infinito, em vez de corresponder ao comprimento de input.mp4. Acho que a resposta envolve a palavra-chave shortest
, mas não tenho certeza de onde ela deve ficar? Adicioná-la -shortest
como uma opção logo antes output.mp4
não funcionou.
Pergunta bônus: aparece uma borda circular branca ao redor da imagem conforme ela gira. Como posso corrigir isso?
O que estou fazendo errado?
Obrigado!
Para encerrar a saída, adicione
shortest=1
à sobreposição.Para reduzir a franja circular, faça uma escamação na ponta.
[1]colorchannelmixer=aa=0.6,loop=-1:1:0,rotate=a='PI/5*t':ow=iw*1.5:oh=ih*1.5:fillcolor=none,scale=100:-1[logo];