Existe alguma maneira de usar o imagemagic / montagem para agrupar gifs animados em loop (misturados com outros não animados)?
Ou seja, quero concatenar as animações no espaço, não no tempo. Percebo que o número de quadros e sua duração na animação podem tornar impossível combinar perfeitamente duas animações. Mas estou bem com o programa fazendo aproximações e suposições e estendendo / repetindo quadros, desde que todos os quadros estejam lá de alguma maneira.
eu tentei
convert *.gif -append output.gif
e
montage *.gif -mode concatenate -tile x1 output.gif
mas ambos tratam os gifs animados como múltiplos não-animados individuais.
Suponho que provavelmente poderia escrever um script para separar os animados por quadros, repetir / estender loops mais curtos conforme necessário para corresponder ao loop mais longo, repetir os gifs não animados para quantos quadros estiverem no animação mais longo, costurar os quadros correspondentes em quadros grandes únicos com -append
e, em seguida, combine esses quadros grandes em um gif grande. Mas não quero reinventar a roda, se isso já for possível por algum comando simples.
Claro que estou aberto a outras opções gratuitas além do imagemagick.
fonte
Respostas:
Parece que você deseja combinar várias animações ao longo do tempo, mas será necessário um programa para ler cada quadro e seu atraso e, em seguida, enviar esse quadro em alguma frequência periódica até que o atraso seja atingido. por exemplo: 1 quadro, atraso de 1 segundo e sua 'frequência' é de 100 ms; portanto, você deseja escrever 10 quadros a 100 ms? E depois convertido em uma montagem linear?
Isso precisaria de um programa ou script robusto para executar esse tipo de processamento, e você teria que definir sua 'frequência' (100 ms aqui).
Mas isso funciona bem: (gifsicle é um pacote, montagem faz parte do pacote imagemagick)
(linha quebrada para facilitar a leitura)
A primeira linha divide o gif recebido em quadros individuais (para stdout), mas com as camadas preenchidas. inicialmente, sem a opção --unoptimize, daria o primeiro quadro, mas os quadros subsequentes continham apenas o que era alterado a cada vez. Feito para montagens estranhas!
A segunda linha cria a saída linear, pegando cada imagem de quadro (de stdin) e organizando-as na ordem que você especificar. 'x1' para organizá-los ao longo de uma linha horizontal.
Você pode substituir o nome do arquivo único (cool_animation.gif) por vários ou até um curinga * .gif.
Não tenho certeza se é isso que você está procurando.
fonte
gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.png
para a imagem de teste de Ƭᴇcʜιᴇ007, isso me dá imgur.com/a/Likr9 ; não é exatamente o que estou procurando. Não me lembro do propósito original; Suponho que provavelmente acabei de escrever um script para explicar tudo explicitamente.