Quero modificar manualmente um gif animado. Então, estou tentando convertê-lo em frames individuais (editáveis), depois dos quais posso desenhar minha modificação e então remontar os frames.
Primeiro eu converto um mp4 de 31 segundos de duração em gif animado:
ffmpeg -i Daisies.mp4 -r 15 -vf scale=512:-1 -ss 00:00:03 -to 00:00:06 DaisiesOK.gif
Este gif animado está OK.
Então eu converto esse gif animado em quadros individuais:
convert DaisiesOK.gif Daisies.png
O primeiro quadro parece bom, exceto que está em 256 cores, mas os próximos são muito claros, cheios de pixels transparentes.
Esses quadros para gif animado:
convert -delay 20 -loop 0 *.png Daisies.gif
O vídeo é muito feio, as margaridas têm "sombras" brancas, o lugar de onde elas começaram (elas estão balançando) fica marcado com bordas brancas de margaridas.
Se eu tentar usar jpeg em vez de png, é ainda pior, a maior parte do vídeo fica preta.
Como posso extrair os frames preservando todas as informações de cor? O problema vem do imagemagick ou do ffmpeg?
Você provavelmente sabe disso, mas gif é um formato de imagem baseado em paleta com apenas 8 bits para entradas de paleta, ou seja, no máximo 256 cores diferentes. E a maneira como você gera o gif não usa "inteligentemente" as cores mais predominantes no seu vídeo de entrada, mas uma paleta padrão fixa.
É assim que a animação gif funciona. O quadro que você extrai contém todas as informações de cor. Elas simplesmente não são úteis sem o quadro anterior. Então, o problema não está em nenhum dos programas, é o que você pediu para eles fazerem: gerar um gif animado, que é uma sequência de quadros contendo pixels transparentes onde um quadro é idêntico ao anterior e pixels coloridos onde há mudança.
Certifique-se de que você realmente quer um gif animado. Os navegadores hoje em dia usam menos poder de CPU para reproduzir um MP4 do que para reproduzir um gif, e eles ficam melhores em todas as circunstâncias. Você também pode experimentar com PNG animado.
O ffmpeg também pode ser usado para extrair quadros de um gif; o desvio
convert
não é necessário:A questão aqui é por que você não converte simplesmente a entrada
Daisies.mp4
para um espaço de cores de 8 bits, gerando uma paleta ótima no caminho (com opalettegen
filtro de vídeo), e despeja os quadros diretamente em PNGs. O desvio pelo GIF parece contraproducente.Você está perdendo a
-coalesce
bandeiraMas observe também que o ImageMagick realmente gosta de carregar imagens processadas inteiras para a RAM em raw. Você precisará de memória suficiente para isso.