Создание GIF с разной скоростью - PullRequest
1 голос
/ 28 марта 2020

Я создал серию сюжетов и хочу сделать из них GIF с разными скоростями.

Я знаю, как создать GIF с помощью imagemagick с помощью этой команды: magick * jpeg -delay 10 name.gif.

Однако я хочу, чтобы некоторые файлы JPEG отображались дольше, чем другие, как я могу этого добиться?

Дополнительно, может быть, легче сделать это внутри python? У меня есть список фигур, из которых я хочу создать этот GIF.

1 Ответ

2 голосов
/ 28 марта 2020

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

magick -delay 30 red.png -delay 80 green.png -delay 99 blue.png anim.gif

enter image description here

Проверьте задержки, смещения, расположение следующим образом:

magick identify -format "%f[%s] canvas=%Wx%H size=%wx%h offset=%X%Y %D %Tcentisecs\n"  anim.gif
anim.gif[0] canvas=100x100 size=100x100 offset=+0+0 Undefined 30centisecs
anim.gif[1] canvas=100x100 size=100x100 offset=+0+0 Undefined 80centisecs
anim.gif[2] canvas=100x100 size=100x100 offset=+0+0 Undefined 99centisecs

Обратите внимание, что, поскольку -delay является параметром , он остается установленным до тех пор, пока не изменится, поэтому первые 4 кадра наследуют 10 сс задержки, а оставшиеся получают 25 сс:

magick -delay 10 frame-[0-3].jpg -delay 25 frame-[4-7].jpg  anim.gif
identify -format "%f[%s] canvas=%Wx%H size=%wx%h offset=%X%Y %D %Tcentisecs\n"  anim.gif
anim.gif[0] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[1] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[2] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[3] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[4] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs
anim.gif[5] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs
anim.gif[6] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs
anim.gif[7] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs

Продолжая, если вы хотите сделать что-то более сложное, я прибегну к gifsicle, скажем, вы хотели то, что было у меня выше, но с кадром 4 с задержкой в ​​17 сантисекунд:

# Change delay to 17 on frame 4 only
gifsicle -b anim.gif "#0-3" -d17 "#4" --same-delay "#5-" 

# Check again
anim.gif[0] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[1] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[2] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[3] canvas=100x100 size=100x100 offset=+0+0 Undefined 10centisecs
anim.gif[4] canvas=100x100 size=100x100 offset=+0+0 Undefined 17centisecs    <--- HERE
anim.gif[5] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs
anim.gif[6] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs
anim.gif[7] canvas=100x100 size=100x100 offset=+0+0 Undefined 25centisecs

Ключевые слова : ImageMagick, gifsicle, задержка, индивидуальная настройка задержки, отдельный кадр, центсекунды.

...