Quero fazer uma .gif
imagem animada a partir de um determinado conjunto de .jpg
fotos.
Eu preferiria fazê-lo na linha de comando, portanto, as ferramentas de linha de comando seriam muito bem-vindas.
command-line
image-processing
gif
Maythux
fonte
fonte
Respostas:
Você pode usar o pacote ImageMagick . Instale-o usando o comando:
Agora você pode criar um
gif
número de imagens (jpg
) usando:fonte
-resize 50%
.-deconstruct
. Eu também descobri que ImageMagick é muito memória com fome, ver benchmarks: askubuntu.com/a/1102183/52975convert -delay 0 -loop 0 *.tif myanimated.gif
funcionou bem, em 720 arquivos tifPara concluir a resposta do @Maythux:
Para evitar gerar um arquivo muito grande, você pode usar a
-resize
opção:No meu caso, tenho imagens de 4608x3456 e o gif gerado foi superior a 300M para 32 imagens
ou
Cuide de * .jpg
*.jpg
é um pouco ruim ao lidar com valores numéricos, você pode gerar um gif com fotos não classificadas.Como as fotos foram tiradas muito rapidamente (10 / s), todas têm o mesmo tempo de modificação e você não pode enganar usando,
ls -t
por exemplo. No ubuntu, você pode usarls -v
algo como:Classificar numericamente é bastante complicado no Mac OS X, acho que você precisará criar um script personalizado.
fonte
find
,sort
, a expansão cinta, e assim por diante. Als
ferramenta é notoriamente inadequada para esse tipo de coisa. Usefind
. Há um pouco de uma curva de aprendizado, mas vale a pena.Não tenho reputação suficiente para comentar, mas em vez de modificar os nomes dos arquivos, você pode usar globbing para fazer com que seu shell expanda os nomes dos arquivos.
fonte
GIMP
Você pode fazer isso facilmente com o GIMP. Primeiro instale-o se ainda não estiver instalado com
Criando o gif
No GIMP, vá em Arquivo -> Abrir como camadas para abrir todos os pngs em sua própria camada.
A partir daqui, você pode executar edições nas camadas e, uma vez feito, vá para Arquivo -> Exportar como . Na caixa de diálogo, defina o tipo de arquivo como GIF.
A partir daí, você acessará as opções de exportação de GIF. Marque a opção ' Como animação ' e defina os parâmetros conforme necessário.
fonte
solução ffmeg + dados de teste
No Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, eu descobri que o ffmpeg é muito mais rápido e usa muito menos memória .
O comando de conversão mais simples é:
Você pode obter meus dados de teste com:
Os dados de teste foram gerados com: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 e contém 256 imagens 1024x1024 PNG.
E aqui estão outros dados de teste que você pode gerar diretamente no seu navegador agora mesmo! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
As
ffmpeg
opções importantes que quero destacar são:-pattern_type glob
: maneira conveniente de selecionar imagens-framerate 60
: assume 60 FPS nas imagens de entrada e gera o mesmo FPS.ffmpeg
não pode saber de outra maneira, pois não há dados de FPS nas imagens e nos formatos de vídeo.Os 256 quadros de entrada levam cerca de 4 segundos para terminar.
-r 15
: opcional. Escolha uma a cada 4 imagens para reduzir o tamanho (4 == 60 / 15
).Com isso,
identify out.gif
diz que o GIF contém apenas 64 quadros.Ainda demora 4 segundos para jogar, então o atraso é alterado para fazer as coisas coincidirem.
-vf scale=512:-1
: opcional. Defina a largura, a altura da escala proporcionalmente, geralmente para reduzir o tamanho e economizar espaço.Para que o ImageMagick funcionasse, primeiro tive que modificar seus limites de disco e memória,
/etc/ImageMagick-6/policy.xml
conforme explicado em: https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pagesVeja também:
ImageMagick vs ffmpeg benchmark
Eu comparei os comandos:
Os comandos foram construídos para produzir saídas o mais próximo possível para validar a comparação:
/usr/bin/time -v
: usado para encontrar o uso máximo de memória, conforme explicado em: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process-deconstruct
: As imagens GIF podem conter apenas o retângulo mínimo modificado do quadro anterior para diminuir o GIF.ffmpeg
calcula essas diferenças por padrão, mas o ImageMagick não, a menos que-deconstruct
seja usado.Basicamente, você deseja usar essa opção todas as vezes com o ImageMagick.
Podemos observar a diferença com:
Com a versão compactada, todos os quadros têm tamanhos menores que o inicial, por exemplo:
Neste exemplo, o segundo quadro é apenas em
516x516
vez dos 1024x1024 completos e é colocado em um deslocamento de252+257
. Portanto, contém apenas o triângulo do meio.Consulte também: como redimensionar um arquivo GIF animado usando o ImageMagick?
-delay
: valor que corresponde aos 60FPS deffmpeg
. Não deve importar para o desempenho da conversão, mas não quero arriscar.Os GIFs de saída têm aproximadamente o mesmo tamanho e parecem visualmente idênticos.
Chegamos ao ImageMagick:
e para ffmpeg:
a partir do qual vemos que:
Hardware de teste: laptop Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32 GB (16 + 16) DDR4 2400 MHz SODIMM, 512 GB SSD PCIe TLC OPAL2.
fonte
-r
nem-v
comandos, mas o gif de saída é de qualidade muito inferior aos arquivos png originais. Como manter a mesma qualidade de gif que os arquivos png fornecidos?-framerate 60 -r 60
. Inspecione o GIF gerado e as imagens de entrada com as ferramentas ImageMagick,identify
para tentar descobrir o que está acontecendo.Você pode usar um programa chamado convert incluído no pacote imagemagick. É orientado por linha de comando, mas muito fácil de usar. Instale-o pelo centro de software ou acesse um prompt de comando e digite
Agora, para criar o .gif.
* Observe que o exemplo acima é direto dos Exemplos de imagens mágicas
fonte
convert -delay 20 -loop 0 *.png out.gif
um GIF em loop.