Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Конвертор в несжатый GIF

Сделал я конвертор из обычного ГИФа в несжатый формат сжатый gzip, выложил на ГитХабе. Основное (разбор ГИФа) написано на Пайтоне, утилита, которая всё запускает — на Шеле. Для работы требуются ImageMagick (предпочтительнее) или gifsicle, gitinter (из libungif) и интерпретатор Пайтона.

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

Из плюсов для себя: детально для себя разобрал формат GIF, освежил знания Пайтона (которые уже начинают тускнеть), Шела, поработал над интересной идеей.

11 комментариев
Евгений Степанищев (bolknote.ru) 2012

Зато, вопреки всякой логике, сжатая анимация иногда прилично гзипуется.

zg (zg.livejournal.com) 2012

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru) 2012

Комментарий для zg.livejournal.com:

Каждый отдельно. По сути, каждый кадр — отдельная картинка, правда, у него может не быть своей таблицы цветов.

zg (zg.livejournal.com) 2012

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

Евгений Степанищев (bolknote.ru) 2012

Комментарий для zg.livejournal.com:

Я ещё поэксперементирую. Только надо найти редактор гифов какой-то для Мака.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для zg.livejournal.com:

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

Попробовал два файла: большой кадр, маленькие кадры с бедной палитрой и большой кадр + маленький с большой палитрой (256), пока проигрыш.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для zg.livejournal.com:

А вот просто сжатие ( http://bolknote.ru/all/3713 ) даёт выигрыш:

-rw-r-​-​r-​-​ 1 bolk staff 102604 11 авг 17:00 anim.gif
-rw-r-​-​r-​-​ 1 bolk staff 102008 11 авг 17:03 anim.gif-def
-rw-r-​-​r-​-​ 1 bolk staff 135088 11 авг 17:02 anim.gif-gz

Евгений Степанищев (bolknote.ru) 2012

Комментарий для zg.livejournal.com:

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

Смотря чем они схожи. Если какие-то точки на тех же местах, то обычный оптимизатор GIF (тот же gifsicle) сделает их прозрачным, «просвечивающими» из прежнего кадра. По крайней мере, я бы так сделал.

Евгений Степанищев (bolknote.ru) 2012

На самом деле, это всё ещё происходит из-за того, что «несжатый» ГИФ сам по себе не очень простой формат, он вносит избыточные коды, чтобы очищать таблицу распаковщика LZW.

twitter.com/thenameisbusy 2012

Можно использовать convert из GraphicsMagick, его скорости чуть лучше чем у «оригинального» ImageMagick -​-​

http://www.graphicsmagick.org/benchmarks.html

Евгений Степанищев (bolknote.ru) 2012

Комментарий для twitter.com/thenameisbusy:

Спасибо, я знаю, но о скорости я думал в последнюю очередь, главное было попробовать как работает.