Minha sobreposição de imagem não está sendo reproduzida no tempo esperado. Tenho esta lista de imagens chamada "Lista.txt" onde defino o tempo de 15 segundos para cada imagem:
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\couve_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\IMG_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\Kitkat_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\paracetamol_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\relogio2_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\relogio3_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\ruffles_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\Skittles_.png'
duration 15
Em seguida, uso este comando para concatenar e colocar as imagens como sobreposição no vídeo, mas todas as imagens duram menos de 1 segundo (1 quadro, eu acho), exceto a última imagem que é exibida até o final do vídeo
ffmpeg -r 23.98 -t 40 -i "input.mp4" -safe 0 -r 23.98 -f concat -i Lista.txt -filter_complex "[1]scale=(iw/4):-1,format=yuva420p[over];[main][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 "output.mp4"
Podemos usar o filtro fps para
Lista.txt
entrada em vez de-r 23.98
:ffmpeg -r 23.98 -i "input.mp4" -safe 0 -f concat -i Lista.txt -filter_complex "[1]fps=23.98,scale=(iw/4):-1,format=yuva420p[over];[0:v][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 -t 40 "output.mp4"
Testei o comando acima e parece funcionar como esperado.
Como você comentou, parece que as
-r 23.98
coisas atrapalham (não entendo o motivo).Atualizar:
A solução acima não está funcionando com a versão mais recente do FFmpeg.
Alternativa sugerida - use duas etapas:
Exemplo:
ffmpeg -y -f concat -safe 0 -i Lista.txt -vf "scale=(iw/4):-1,setsar=1" -c:v rawvideo -pix_fmt rgba images.avi
ffmpeg -r 23.98 -i input.mp4 -i images.avi -filter_complex "[1:v]fps=23.98[over];[0:v]format=rgba[main];[main][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 -crf 17 -t 40 output.mp4
Atualizar:
Encontrei a solução aqui :
Podemos adicionar
-reinit_filter 0
argumento.Parece que o motivo de não estar funcionando com suas imagens de entrada (mas funcionou com minhas imagens de teste) está relacionado ao fato de as imagens terem parâmetros diferentes.
O seguinte comando está funcionando (em um único estágio):
ffmpeg -r 23.98 -i "input.mp4" -safe 0 -f concat -reinit_filter 0 -i Lista.txt -filter_complex "[1]fps=23.98,scale=(iw/4):-1,format=rgba[over];[0:v]format=rgba[main];[main][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 -t 40 "output.mp4"