Converta várias imagens para um gif com dissolução cruzada

0

Encontrei essas duas respostas incríveis no Superusuário: uma para converter uma série de imagens em um vídeo com dissolução cruzada entre elas e outra para converter um vídeo em um gif de alta qualidade. Minha pergunta de acompanhamento para ambos é, como posso fazer isso em um comando, para várias imagens (pode ser 3 imagens ou 20).

@LordNeckbeard e outros superusuários do ffmpeg, você pode me ajudar?

Aqui estão as respostas que ajudaram até agora:

Imagens para vídeo com dissolução cruzada: link

Vídeo para Gif: link

    
por Daniel Jacob Archer 19.11.2015 / 04:22

1 resposta

1

Isso é certamente possível, mas os comandos não serão curtos. Adaptado do exemplo de crossfade de Crie um vídeo com 5 imagens com efeito de aumentar / diminuir em ffmpeg .

1. Gerar paleta

Usar o filtro palettegen criará uma paleta personalizada e representacional que será usada por < um href="https://www.ffmpeg.org/ffmpeg-filters.html#paletteuse-1"> paletteuse para criar o GIF.

Exemplodepaletaaprimoradadepalettegen.

ffmpeg\-loop1-t1-i001.png\-loop1-t1-i002.png\-loop1-t1-i003.png\-loop1-t1-i004.png\-loop1-t1-i005.png\-filter_complex\"[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \
 [2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \
 [3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \
 [4:v][3:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b4v]; \
 [0:v][b1v][1:v][b2v][2:v][b3v][3:v][b4v][4:v]concat=n=9:v=1:a=0,fps=10,scale=320:-1:flags=lanczos,palettegen[v]" \
-map "[v]" palette.png

2. Criar GIF

ffmpeg-loop1-t1-i001.png-loop1-t1-i002.png-loop1-t1-i003.png-loop1-t1-i004.png-loop1-t1-i005.png-ipalette.png\-filter_complex\"[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \
 [2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \
 [3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \
 [4:v][3:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b4v]; \
 [0:v][b1v][1:v][b2v][2:v][b3v][3:v][b4v][4:v]concat=n=9:v=1:a=0,fps=10,scale=320:-1:flags=lanczos[c];[c][5:v]paletteuse[v]" \
-map "[v]" out.gif

O que modificar

  • -t para controlar a duração de cada imagem.
  • mistura os valores do filtro para controlar a duração do crossfade.
  • fps filtrar para controlar a taxa de quadros do GIF (menor taxa será menor, mas mais brusca; maior parecerá melhor).
  • dimensionar para alterar o tamanho do quadro do GIF.
por 19.11.2015 / 21:11