пʼятницю, 3 січня 2014 р.

Создать gif анимацию просто

Сейчас на удивление стали популярными разные GIF анимации в виде кусков фильмов или роликов. Вроде бы девяностые уже прошли и уже не проблема опубликовать непосредственно видеоролик, но всё равно 8-битные GIF-ки ни как не отступают. Поэтому часто возникает вопрос как же создать самому такую анимацию? Для этого на просторах интернета появилось множество сайтов, которые позволяют загрузить картинки или видео и превратить это всё в GIF анимацию. Но во-первых такие сайты не всегда позволяют сделать гибкие настройки, а во-вторых обычно они вставляют свой адрес в созданные картинки.

Но на самом деле нет ничего сложного в том, чтобы делать самостоятельно такие анимации на своём компьютере и без помощи сторонних сайтов. Кроме того это позволит настроить любые параметры по вкусу. Для этого существует библиотека ImageMagick.



Подготовка


Для начала идём на сайт http://www.imagemagick.org/ и устанавливаем. Для Windows обычная программа установки. Для Mac OS X $ sudo port install ImageMagick. В линуксах, возможно, уже установлена, но если нет, просто ставим из репозитория.
Желающие могут собрать из исходников.

После этого в консоли будут доступны программы, связанные с ImageMagick такие, как convert, mogrify и т.д.

Для самых простых операций конвертирования изображений можно даже документацию не читать:

convert input.png output.jpg

последний файл всегда считается исходящим файлом. А вот входящих файлов может быть больше, чем один.
Внимание! Файлы перезаписываются без запроса подтверждения. Так что если файл, указанный, как исходящий, уже существует, он будет молча переписан.

Ну а теперь перейдём непосредственно к GIF анимации.


Самый простой случай, это создание анимации из набора статических файлов. Например это последовательность фотографий снятая фотоаппаратом подряд.



convert photo1.jpg photo2.jpg photo3.jpg photo4.jpg animation.gif

Вот так всё просто. Но перечислять файлы есть смысл только тогда, когда их названия сильно различаются или из большого набора нужно выбрать несколько. Если же соединить нужно все файлы и из имена отличаются только некоторой частью, то можно указать маску:

convert photo*.jpg animation.gif

Не всегда подойдёт стандартная частота кадров. Для этого есть параметр -delay который указывается в сотых частях секунды.

convert -delay 25 photo*.jpg animation.gif

Значение 25 говорит о том, что смена кадра будет четыре раза в секунду. 50 — два раза в секунду, 100 — один раз в секунду и т.д. Не рекомендуется задавать значение ниже 6, поскольку не все программы смогут корректно отображать такую картинку.

Внимание! Строка команды состоит из нескольких частей и параметры могут быть указаны для каждой части/файла отдельно перед указанием файла/команды.

Например не всегда размер исходных файлов соответствует тому, что должно быть на выходе. Поэтому полезно указать размер результирующего файла. Для этого есть параметр -resize

convert -delay 25 photo*.jpg -resize 10% animation.gif

Этот параметр может принимать множество разных значений. Например в процентах от исходного. Или точные значения ширины и высоты в пикселах: -resize 200x200 причём в этом случае пропорции будут сохранены и бóльшая сторона будет уменьшена до указанного значения. Можно указывать только значение ширины -resize 200 тогда изображение будет уменьшено так, чтобы ширина была 200px, а высота будет подобрана автоматически сохраняя пропорции, или только высоту -resize х200 получим то же, только для высоты.

Внимание! Если исходные файлы заведомо и намного больше нужных размеров анимации, то имеет смысл предварительно уменьшить исходные файлы до размеров будущей анимации. Таким образом уменьшится требуемая память для данной операции. Это тем более имеет смысл сделать, если файлов достаточно много. О групповых операциях над файлами пойдёт речь в следующей статье.

Вот какую gif анимацию получим на выходе из четырёх jpg картинок в начале стати после такой команды:

convert -delay 50 photo*.JPG -resize 200 a200.gif



Аналогичным способом можно преобразовать видеоролик в gif анимацию просто передав в качестве входного файла файл видеоролика.

convert movie.mpeg anim.gif

Если же нужно произвести обработку кадров до объединения их в gif можно сначала разобрать видео на кадры jpg, а затем выбранные jpg собрать в gif при этом в синтаксисе команды ничего не меняется.

Список поддерживаемых форматов файлов Image Magick можно посмотреть так:

identify -list format

Однако для работы с видео лучше выбрать специализированные средства, например ffmpeg. О том, как разобрать видеофайл на отдельные картинки с разными параметрами я уже ранее писал: Скриншоты из фильма при помощи ffmpeg

Кстати так же можно разобрать обратно только что собранную анимацию если, по каким-то причинам, исходный материал утерян, а нужно поменять местами кадры или внести другие модификации. Просто подаём на вход нашу анимацию и задаём имя будущей группы отдельных кадров:

convert anim.gif frame.png

После этого в папке появится набор файлов png с номерами кадров. В моём случае кдров четыре, поэтому имеем:

frame-0.png
frame-1.png
frame-2.png
frame-3.png

Внимание! Формат jpg — формат с потерей данных, его нельзя использовать для хранения рабочих материалов, иначе с каждой новой операцией качество будет всё ниже. Для описанного случая нужно использовать форматы без потери данных png, tiff, jpeg-ls со сжатием или, для ускорения конвертации, без сжатия bmp, pcx

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

Для этого нужно сначала подготовить изображение, которое будет помещаться в анимацию. Это может быть, например, такой же gif файл, но без анимации и с прозрачными областями. Либо можно вместо изображения использовать встроенный механизм создания надписей и фигур.

convert \( anim.gif -coalesce -gravity SouthWest \) null: \( watermark.gif -coalesce \) -layers Composite watermarked_animation.gif

Задав на вход подготовленную анимацию ( anim.gif ) и изображение водяного знака ( watermark.gif ) на выходе получим всё ту же анимацию, но с водяным знаком на всех кадрах. вот, например, что получилось у меня:

Указатель масштаба был добавлен после создания анимации

Подробнее о нанесении «водяного знака» и настройках последней команды будет в следующей статье. А тем, кому особенно не терпится, рекомендую читать документацию на официальном сайте. Документация очень подробная, с примерами и картинками.

Немає коментарів:

Дописати коментар

Не обязательно регистрироваться, вы наверняка уже зарегистрированы в одном из сервисов, который предоставляет OpenId, предлагаю воспользоваться им. Подробнее: http://openid.net/what/