8

Есть ли какой-нибудь способ использовать imagemagic / montage для создания анимированных GIF-изображений с петлями (смешанных с неанимированными)?

То есть я хочу объединить анимацию в пространстве, а не во времени. Я понимаю, что количество кадров и их продолжительность в анимации могут сделать невозможным аккуратное объединение двух анимаций. Но я в порядке с программой, делающей аппроксимации и предположения, и расширяющей / повторяющей кадры, пока все кадры присутствуют в некотором роде.

я пробовал

convert *.gif -append output.gif

а также

montage *.gif -mode concatenate -tile x1 output.gif

но оба они рассматривают анимированные гифки как несколько отдельных неанимированных.

Я полагаю, что я мог бы написать скрипт, чтобы разбить анимированные кадры на части, повторять / расширять более короткие циклы по мере необходимости, чтобы соответствовать самому длинному циклу, повторять неанимированные GIF-изображения, так как многие кадры находятся в самом длинном анимированном кадре, соединяя вместе соответствующие кадры. в отдельные большие кадры с -append , а затем объединить эти большие кадры в один большой GIF. Но я не хочу изобретать велосипед, если это уже возможно с помощью простой команды.

Я, конечно, открыт для других бесплатных опций, кроме imagemagick.

1 ответ1

1

Звучит так, будто вы хотите согласовать несколько анимаций во времени, но для этого потребуется программа, которая будет считывать каждый кадр и его задержку, а затем выводить этот кадр с некоторой периодической частотой до тех пор, пока задержка не будет достигнута. Например: 1 кадр, задержка в 1 секунду, и ваша «частота» составляет 100 мс, так что вы хотите записать 10 кадров при 100 мс? А потом перевести на линейный монтаж?

Для этого потребуется программа или здоровенный сценарий для выполнения такой обработки, и вам нужно будет определить свою «частоту» (100 мс здесь).

Но это прекрасно работает: (gifsicle - это пакет, монтаж - это часть пакета imagemagick)

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

(строка разорвана для удобства чтения)

Первая строка разбивает входящий GIF на отдельные кадры (на стандартный вывод), но с заполненными слоями. изначально, без опции --unoptimize, он дал бы первый кадр, но последующие кадры содержали только то, что менялось каждый раз. Сделано для странных монтажов!

Вторая строка строит линейный вывод, беря каждое изображение кадра (из стандартного ввода) и упорядочивая их в указанном вами порядке. «х1», чтобы расположить их вдоль горизонтальной линии.

Вы можете заменить одно имя файла (cool_animation.gif) на несколько или даже подстановочный знак * .gif.

Я не уверен, что это то, что вы ищете, хотя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .