Gifs animados de Tile

10

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 -appende, 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.

tsbertalan
fonte
how-to.ytmnd.com
Ƭᴇcʜιᴇ007
2
Vou aceitar isso, pois provavelmente não foi intencional; como um comentário sério. Sim, quero agrupar GIFs. Mas permanentemente, não em HTML. Obrigado pelo link. Vou salvar esse GIF específico para uso posterior.
tsbertalan
11
@tsbertalan Você acabou descobrindo isso?
quer

Respostas:

1

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)

gifsicle --unoptimize cool_animation.gif | \
  montage -tile x1 - linear_frames.png

(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.

lornix
fonte
Quando modificado gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.pngpara 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.
tsbertalan