30

Я использую ImageMagick, чтобы превратить коллекцию PNG в один GIF. Я хочу, чтобы этот GIF зациклился как можно быстрее.

Это примерно результат, который я ожидаю (любезно предоставлено Википедией):

ожидаемый результат

Это вывод, который я на самом деле получаю:

фактический объем производства

В моем браузере (Firefox 17) ожидаемый gif работает более чем в два раза быстрее, чем фактический gif. Это удивляет меня, потому что я указал, что каждый кадр должен иметь 0 задержек.

Сначала я создал 36 png, взорвав gif, заимствованный из Википедии:

--caution: command generates 36 pngs
convert.exe newton.gif newton_%d.png

Затем я использовал coalesce чтобы объединить PNG в один GIF.

convert.exe -dispose none -delay 0 newton_%d.png[0-35] -coalesce output.gif

identify подтверждает, что каждый кадр не имеет задержки:

identify.exe -format "%T, " output.gif
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

Это на самом деле меньше задержки, чем оригинал:

identify.exe -format "%T, " newton.gif
5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2,

Фактический GIF имеет меньшую задержку, чем ожидаемый GIF. Так почему же ожидаемый гиф в два раза быстрее, чем реальный гиф?

3 ответа3

18

Похоже, @DavidMah прав. В моей системе Linux минимальная задержка составляет 0,5:

convert -dispose none -delay 0.4 newton_%d.png[0-35] -coalesce output0.4.gif

convert -dispose none -delay 0.5 newton_%d.png[0-35] -coalesce output0.5.gif

convert -dispose none -delay 1 newton_%d.png[0-35] -coalesce output1.gif

По некоторым причинам изображения не отображаются должным образом в моем браузере. Используя локальный просмотрщик изображений (eom), 1-е изображение работает медленнее, чем в оригинальном вопросе, а оба других быстрее, чем в Википедии. Я пишу в любом случае, если это проблема, специфичная для моего браузера. В любом случае, вы должны получить лучшую скорость, если вы попробуете команды, опубликованные выше.


ОБНОВЛЕНИЕ: Кажется, есть 2 проблемы. Браузеры (по крайней мере, у Firefox и Chromium работают в Linux) не могут отображать GIF-файлы, созданные с задержкой <1,5. 1.5 работает отлично, 1.4 медленно. Мой просмотрщик изображений может работать с задержками от 0,5 и выше. Попробуйте загрузить одно из приведенных выше изображений и открыть его в своем любимом просмотрщике изображений. Также взгляните на это:

convert -dispose none -delay 1.4 newton_%d.png[0-35] -coalesce output1.4.gif

convert -dispose none -delay 1.5 newton_%d.png[0-35] -coalesce output1.5.gif

UPDATE2: @DavidMah указывает в комментариях ниже, что десятичные значения округляются до ближайшего целого числа. Итак, 1.4 округляется до 1, что слишком медленно, а 1,5 округляется до 2, что нормально.

17

Я экспериментировал и создал версию 10 мс (задержка = 1).

Пример задержки 10 мс

Кажется, что программы, которые рендерит гифки, как правило, не учитывают частоту задержки в 0 сотых секунды. Вместо этого они используют значение, которое намного больше, чем небольшое значение, которое вы выбрали.

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

В целом, я бы рекомендовал использовать задержку не менее двух сотен секунд во всех случаях.

Источники (которые демонстрируют, как это может быть вызвано несколькими причинами). Некоторые относительно старые):

5

Я имел больше успеха , используя задержки обозначения XxY по существу, x , как / так что если вы укажете -delay 1x20 кадр отображается в течение 1/20 секунды.

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