Сжатая несжатая ГИФ-анимация

В догонку к предыдущей статье: мне удалось сделать несжатый анимированный ГИФ c сжатием через DEFLATE, вот он ниже (анимация не закциклена):

Шесть цифр на белом фоне: 1, 2, 3, 3, 2, 1.

Там шесть несжатых кадров (цифры «1», «2», «3», «3», «2» и «1») с небольшой задержкой, таблица из 16 цветов, в этом формате (несжатый ГИФ+DEFLATE) файл занял 619 байт:

bolk@Bolk ~  $ telnet bolknote.ru 80
Trying 91.230.61.15...
Connected to bolknote.ru.
Escape character is '^]'.
HEAD /imgs/2012.08.08.1.gif-gz HTTP/1.0
Host: bolknote.ru
Accept-encoding: gzip

HTTP/1.1 200 OK
Content-Type: image/gif
Content-Length: 619
Content-Encoding: gzip

Собранная при помощи gifsicle анимация в формате «обычного» ГИФа занимает 1028 байт, разница в полтора раза. Права, я выключил в gifsicle оптимизацию — иначе gifsicle исключит из изображений повторящиеся части и эксперимент будет нечистым.

Комментарии 17

greli (greli.livejournal.com) № 1
Попробовал на лоадерах типа с ajaxload.info, которые я уже пересохранил в Фотошопе для лучшего сжатия. Лучший результат: на 6,4% — с 1737 до 1625. Но в основном результат или незначителен, или даже хуже.
Евгений Степанищев (bolknote.ru) автор № 3
Я думаю, что вы где-то некорректно провели эксперимент. Я сейчас сделал вот что:

1) взял семь фотографий наугад из альбома фотографий из зоопарка Паттайи: http://fotki.yandex.ru/users/bolknote/album/136352/
2) перевёл их в ГИФ, уменьшил до 400×200
3) перевёл в анимированный ГИФ двумя способами.

gifsicle -O3 дал 470КБ, несжатые ГИФы, собранные «вручную» в анимированный и сжатые gzip — 458КБ.

Это 12КБ разницы только для семикадровой анимации. Если научить gifsicle подключать внутреннюю оптимизацию кадров (когда между кадрами выкидывается всё статичное), но не сжимать сам ГИФ, то можно будет попробовать пережать ролики с какого-нибудь giftube.
Внутреннее Коралио (kalvado.livejournal.com) № 4
Я что-то не так делаю, или оно просто в моей конфигурации анимироваться не хочет?
XP, FF14
Евгений Степанищев (bolknote.ru) автор № 5
Сейчас смотрю под «Маком» ФФ 14.0.1, всё ок.

Там анимация конечная (не зацикленная), может момент анимации пропускаете просто.
Евгений Степанищев (bolknote.ru) автор № 6
Посмотрел, для интереса, как к такому формату Айпад (2-й, АйОС 5.1.1) и «Андроид» (версия 2.3.6) отнесутся. Всё ок.
MiRacLe (miracle.rpz.name) № 7
Chrome 21.0.1180.57 (Linux), картинка статичная…
Евгений Степанищев (bolknote.ru) автор № 8
А после перезагрузки? Я не очень-то правильно собрал анимацию, похоже :) Пару вечеров надо, чтобы написать конвертор получше.
masterspammer (masterspammer.livejournal.com) № 11
И чем больше кадров тем лучше сожмётся.

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

Сжатие Gifа ничего не знает о других кадрах, Zipа — о том, что там вообще есть какие-то кадры.
masterspammer (masterspammer.livejournal.com) № 12
P.S. 3 и более чередующихся кадра — имел в виду не тот случай, когда их всего 3, а например так
1-2-3-1-2-4-1-2-5

а 1-2-1-2-1-3 это можно представить как 1-2(убрать после показа)-0(что-то мелкое, чтоб просто был кадр, например однопиксельник прозрачный)-2(убрать после показа)-0-3.
Евгений Степанищев (bolknote.ru) автор № 13
Комментарий для masterspammer.livejournal.com:

Я попробую в скором времени написать конвертор, который берёт кадры из уже анимированного файла и делает из этого всего несжатый анимированный ГИФ. Посмотрю что получится.