Анидеск — формат изображений WebP¶
Анидеск (англ. animdesc, от animation descriptor — «описание анимации») — внутренний формат хранения анимированных изображений, разработанный компанией Google и используемый в проекте WebP. Файл в формате анимированного WebP (APNG-подобный, но основанный на контейнере RIFF) хранит последовательность кадров вместе с метаданными описания анимации — так называемый блок ANIM/ANMF, который и называют анидеском. Термин применяется преимущественно в контексте спецификации WebP и программных библиотек, работающих с анимированными изображениями.
¶История и происхождение
Формат WebP был представлен Google в 2010 году как альтернатива JPEG и GIF с более эффективным сжатием. В 2012 году в спецификацию WebP была добавлена поддержка анимации, что позволило использовать формат для замены GIF-анимаций в вебе. Для описания параметров анимации — количества кадров, задержек между ними, цикличности — в контейнере RIFF (Resource Interchange File Format) были предусмотрены служебные блоки:
- ANIM — глобальный блок описания анимации: фоновый цвет и общее число повторов (циклов);
- ANMF (Animation Frame) — блок описания отдельного кадра: координаты, задержка отображения, признаки сброса прозрачности и disposal-режима.
Совокупность этих блоков и составляет анимационный дескриптор (анидеск), задающий, как именно плеер должен воспроизводить последовательность кадров.
¶Формат и устройство
Анимированный WebP-файл начинается с сигнатуры RIFF и тега WEBP. Далее следует блок ANIM, содержащий 6 байт данных: 4 байта на фоновый цвет (BGRA) и 2 байта на количество повторов анимации (0 — бесконечное повторение). После него идут блоки ANMF, по одному на каждый кадр. Каждый ANMF-блок содержит:
| Поле | Размер | Назначение |
|---|---|---|
| X, Y | по 3 байта | смещение кадра относительно холста |
| Width, Height | по 3 байта | размеры кадра (минус единица от реального значения) |
| Duration | 3 байта | время отображения кадра в миллисекундах |
| Flags | 1 байт | биты: blending method, disposal method |
Кадры внутри ANMF сжимаются отдельными кодеками VP8 (непрозрачные) или VP8L (с прозрачностью). Благодаря такому подходу анимация может использовать дифференциальное кодирование — хранить только изменяющуюся часть изображения, что существенно уменьшает размер файла по сравнению с GIF.
¶Отличия от других форматов анимации
В отличие от GIF, использующего палитру максимум в 256 цветов, анимированный WebP работает с полной цветовой гаммой 24 бит плюс альфа-канал. В отличие от APNG (анимированного PNG), где анимационные метаданные встроены в структуру PNG, анидеск WebP опирается на более гибкий контейнер RIFF, что упрощает добавление новых полей без ломки совместимости. Сжатие VP8/VP8L даёт, по данным Google, экономию до 30—50 % объёма относительно GIF при сопоставимом качестве.
¶Применение
Анимированный WebP с блоками описания анимации поддерживается современными браузерами (Chrome, Firefox, Edge, Opera, Safari 14+), а также библиотеками обработки изображений — libwebp (референсная реализация от Google), Pillow, ImageMagick, Sharp. В России формат активно используется в веб-разработке: крупные порталы и интернет-магазины заменяют GIF-баннеры на WebP-анимации для ускорения загрузки страниц. Библиотека libwebp предоставляет утилиты webpmux и img2webp для сборки анимационных файлов и управления блоками ANIM/ANMF.
¶Ограничения
Анимированный WebP не поддерживает звук. Количество кадров формально не ограничено, но задержка кадра кодируется 24 битами, что ограничивает максимальную длительность одного кадра примерно 4,6 часами. Не все старые редакторы изображений корректно отображают анимационные WebP, что создаёт проблемы при вёрстке для устаревших браузеров.
¶См. также
- WebP
- GIF
- APNG
- VP8 (видеокодек)
- RIFF (контейнер)
¶Источники
- Спецификация формата WebP, Google Developers
- libwebp — референсная библиотека кодирования WebP
- Документация ImageMagick по формату WEBP
- Документация Pillow (Python Imaging Library)
