← Вернуться в блог

Как сжать GIF, чтобы он стал меньше: 6 способов, отсортированных по возрастанию потерь качества

Записали 5-секундную демонстрацию, экспортировали в GIF, а размер оказался 18 МБ. Хотите вставить в документ, отправить в чат или в README — либо не проходит загрузка, либо грузится бесконечно. Почему GIF больше видео и как его сжать без появления шума?

Поделиться

Записали 5-секундную демонстрацию, экспортировали в GIF, а размер оказался 18 МБ.
Хотите вставить в документ, отправить в чат или в README — либо не проходит загрузка, либо грузится бесконечно.
Почему GIF больше видео и как его сжать без появления шума?


Сначала разберемся: почему GIF такой большой

GIF — это формат 1987 года, несколько его изначальных особенностей делают его «толстым»:

  • Каждый кадр — это полная картинка. В видео нет сжатия между кадрами «только для изменений» — если только при экспорте специально не сделана оптимизация, то 100 кадров — это 100 картинок.
  • Алгоритм сжатия старый. GIF использует только сжатие LZW без потерь. Он хорошо справляется с «одинаковыми цветами подряд», но теряет эффективность при градиентах, фотографиях и мелкой текстуре.
  • Максимум 256 цветов на кадр. Если цветов мало, экспортер использует «дизеринг» (dithering) — множество мелких цветных точек для имитации переходов. Этот шум визуально кажется плавным, но для LZW это самые сложные данные для сжатия.

Поэтому размер GIF в основном зависит от: размера × количества кадров × насколько «мелко» выглядит каждый кадр. Все следующие способы направлены на эти три параметра.

6 способов, отсортированных по возрастанию потерь качества

1. Оптимизация кадров: сохранять только «изменившуюся часть» (без потерь)

Многие инструменты записи экрана и программы дизайна при экспорте GIF сохраняют весь кадр целиком. Однако в демонстрации операции часто двигается только мышь и небольшой участок.

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

Изменений в пикселях нет, анимация работает точно так же, только хранение стало более эффективным. Для GIF с «неподвижным фоном и локальным движением» (записи экрана, демонстрации UI, анимированные иконки) этот шаг может сэкономить много места.

2. Сжатие с потерями LZW: «ослабляем» алгоритм (визуально без потерь)

Эта идея реализована в параметре --lossy gifsicle: при кодировании допустимы минимальные отклонения цветов, что позволяет большему количеству пикселей считаться «одним цветом», повышая эффективность LZW.

Особенность: не уменьшает количество цветов, не меняет размер, не трогает кадры. Платой становится появление легкого зернистого шума. Чем выше значение, тем сильнее экономия, тем заметнее шум. При легком использовании (например, --lossy=30~40) он почти незаметен на нормальном расстоянии просмотра.

3. Уменьшение количества цветов: с 256 до 128 или 64

Сокращение палитры с 256 до 128 или 64 цветов уменьшает количество информации на пиксель, что повышает эффективность сжатия.

Для флэт-арта, иконок и UI-демонстраций цветов и так мало, уменьшение почти не заметно; но для фотографий и градиентов появятся заметные цветовые полосы и пятна.

4. Удаление кадров: снижение частоты кадров

Многие GIF экспортируются с частотой 30 или 60 fps, но GIF плохо справляется с высокой частотой; во многих сценариях 10–15 fps уже достаточно.

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

5. Уменьшение размера

Объем пропорционален количеству пикселей: уменьшение ширины и высоты вдвое сокращает количество пикселей до четверти.

На экранах Retina записанный экран может быть шириной 2000+ пикселей, хотя в итоге он часто отображается в 600–800 пикселей. Экспорт по реальному размеру отображения часто дает наибольшую выгоду. Платой становится размытость при увеличении; для текста нужно следить за читаемостью.

6. Смена формата: GIF на видео или WebP

Если платформа позволяет, самый радикальный способ — не использовать GIF:

  • MP4 / WebM: Современное видео-кодирование использует сжатие между кадрами; для того же контента размер часто в разы меньше GIF. На веб-страницах для эффекта GIF можно использовать <video autoplay loop muted playsinline>.
  • Анимированный WebP / APNG: Поддерживают больше цветов и лучшее сжатие; современные браузеры их воспроизводят.

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


Таблица, чтобы увидеть варианты

Способ Влияние на качество Подходит Не подходит
Оптимизация кадров Нет, пиксели не меняются Все GIF, особенно записи экрана и локальные анимации — (следует делать всегда)
Сжатие с потерями LZW (легкое) Легкий зернистый шум Почти все GIF Пиксель-арт, чувствительный к шуму
Уменьшение количества цветов Цветовые полосы на градиентах Флэт-арт, иконки, UI Фотографии, градиенты
Удаление кадров Анимация становится «рывкой» Демонстрации операций, статичные анимации Анимации, требующие плавности
Уменьшение размера Меньше деталей Исходный размер значительно больше отображаемого Контент с мелким текстом
Смена формата Обычно лучше Веб-страницы, собственные платформы Только GIF-платформы

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


Первые два шага: ImgZilla делает это в массовых операциях

Если у вас много GIF — коллекции эмодзи, анимации в документах, каталоги материалов сайта — перетаскивание каждого файла в онлайн-инструмент и настройка параметров слишком утомительно.

ImgZilla — это инструмент для сжатия изображений для macOS. При работе с GIF он использует именно первые две строки из таблицы выше:

  • На основе gifsicle: сначала применяется максимальная оптимизация кадров (аналог -O3), затем легкое сжатие с потерями (аналог --lossy=40).
  • Не уменьшает количество цветов, не удаляет кадры, не меняет размер, не меняет настройки цикла. Анимация остается прежней, частота кадров, длительность и разрешение не меняются, просто файл становится меньше.
  • Сжатие «на месте»: имя файла, путь и формат не меняются. demo.gif, на который ссылается документ или веб-страница, после сжатия остается demo.gif, ссылки не нужно менять.
  • Просто перетащите папку: рекурсивный поиск в подпапках; GIF обрабатывается вместе с JPG, PNG, WebP и другими изображениями.
  • Не «выжимает» всё подряд: файлы, уже оптимизированные или с коэффициентом сжатия менее 0,4%, помечаются как «уже минимальный» и остаются без изменений; бесплатный лимит при этом не тратится.
  • По умолчанию перемещает оригиналы в корзину: если результат не нравится, нажмите «Вернуть» и файл вернется как был.
  • Полностью локальный: никаких серверов, ограничений по размеру или количеству файлов, как в онлайн-сервисах — даже десятки мегабайтных записей экрана обрабатываются без проблем.

Экономия зависит от того, как был изначально создан GIF. Записи экрана без оптимизации кадров и с большим количеством неподвижных фрагментов обычно экономят больше; профессионально сжатые GIF могут иметь лишь небольшой запас, а иногда и сразу помечаются как «уже минимальный» — это нормально.

Что ImgZilla не делает

Чтобы «анимация выглядела так же», ImgZilla не делает шаги 3–6. Если после первых двух шагов файл все еще слишком велик, например, нужно уложиться в лимит платформы, вам придется самостоятельно решить, что можно пожертвовать:

bash

Использование командной строки gifsicle: 128 цветов, ширина 640, более сильное сжатие с потерями

gifsicle -O3 --lossy=80 --colors 128 --resize-width 640 input.gif -o output.gif

Преобразование GIF в MP4 с помощью ffmpeg (обычно гораздо меньше по размеру)

ffmpeg -i input.gif -movflags +faststart -pix_fmt yuv420p
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4

Для операций, требующих выбора кадров или обрезки, удобнее использовать онлайн-редакторы вроде ezgif.


Лучше всего: не экспортировать слишком большие GIF на этапе создания

Три совета, которые помогут реже сжимать файлы в будущем:

  1. Перед записью экрана уменьшите окно, записывайте только нужную область, а не весь экран Retina.
  2. При экспорте выбирайте 10–15 fps, этого обычно достаточно для демонстраций.
  3. После экспорта сразу сожмите — удалите оптимизацию кадров и легкое сжатие с потерями; этот шаг не требует решений и идеально подходит для автоматической обработки.

GIF — старый формат, но он остается «наибольшим общим знаменателем» для автоматического воспроизведения повсюду. Вместо того чтобы спорить об отказе от него, лучше сделать так, чтобы каждый GIF занимал ровно столько места, сколько нужно.

ImgZilla в настоящее время поддерживает только macOS (версия 12.3 и выше), доступна в Mac App Store. Бесплатная версия позволяет сжимать до 10 файлов в день; за сжатие с положительным результатом списывается только один файл — перетащите папку с GIF и посмотрите, сколько места можно сэкономить.

Нужны изображения легче и быстрее?

Скачайте ImgZilla и сжимайте локально — изображения не покидают ваш Mac.