Libavif — это библиотека и набор командных инструментов для работы с файлами AVIF: кодирования, декодирования, проверки структуры изображения, настройки качества, выбора AV1-кодека, управления цветом, альфа-каналом, YUV-форматом, битностью, метаданными и последовательностями кадров. Это не графический конвертер с кнопками “Открыть” и “Сохранить”, а конкретная программа для терминала и библиотека для встраивания AVIF-поддержки в другие приложения.

Главная задача Libavif — дать точный контроль над AVIF-файлом. Через avifenc можно сжать PNG, JPEG или Y4M в AVIF, а через avifdec — декодировать AVIF обратно в PNG, JPEG или Y4M. Библиотека работает с AV1-поддерживаемыми YUV-форматами и битностью, включая альфа-канал, а в состав проекта входят командные инструменты avifenc и avifdec.

Скачать Libavif

Оценка 9.7 Рекомендуем
  • Ретушь фото
  • Русский интерфейс
  • Просто для новичков
Скачать бесплатно на Windows
Лучшая альтернатива
Libavif
Оценка 8.5
  • Только командная строка
  • Не для ретуши фото
  • Упор на AVIF-файлы
Скачать Libavif
Загрузка начнётся после нажатия

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

Libavif удобно рассматривать как программу из двух уровней:

Уровень Что входит Для кого полезно
Командные инструменты avifenc, avifdec, дополнительные утилиты проекта пользователям терминала, администраторам, веб-разработчикам, специалистам по автоматизации
Библиотека C API для кодирования и декодирования AVIF разработчикам программ, просмотрщиков, конвертеров, серверных обработчиков изображений

Такой формат делает Libavif особенно полезной там, где нужен не ручной drag-and-drop, а повторяемая обработка: пакетная конвертация папки, подготовка AVIF-версий для сайта, проверка изображений в CI/CD, интеграция AVIF в собственный софт, серверная оптимизация изображений.

Состав программы: libavif, avifenc и avifdec

В практической работе пользователь чаще всего сталкивается не с библиотекой напрямую, а с двумя утилитами:

  • avifenc — кодирует изображения в AVIF;

  • avifdec — декодирует AVIF в обычные форматы изображений.

Есть и библиотечная часть — собственно libavif. Она нужна, когда AVIF-поддержка встраивается в приложение. Например, если программа просмотра изображений, графический редактор, серверный обработчик или мобильное приложение должны читать AVIF, разработчик может использовать библиотеку как компонент внутри своего продукта.

avifenc

avifenc — основной инструмент для создания AVIF-файлов. Его базовый синтаксис выглядит так:

avifenc [options] input.[jpg|jpeg|png|y4m] output.avif

Утилита принимает JPEG, PNG и YUV4MPEG2/Y4M, после чего создаёт AVIF-файл с параметрами, которые пользователь задаёт через опции командной строки. Через avifenc настраиваются качество цвета, качество альфа-канала, скорость кодирования, количество потоков, кодек, битность, YUV-формат, диапазон, CICP/NCLX, метаданные, сетки, layered/progressive AVIF и последовательности кадров.

avifdec

avifdec делает обратную работу: берёт AVIF-файл и сохраняет его как PNG, JPEG или Y4M. Его базовый синтаксис:

avifdec [options] input.avif output.[jpg|jpeg|png|y4m]

Есть и режим анализа:

avifdec --info input.avif

Он полезен, когда нужно не сохранить картинку, а посмотреть параметры AVIF: структуру, кадры, цветовую информацию, размеры, битность, наличие альфы и другие свойства. avifdec поддерживает выбор декодера, управление глубиной PNG, качеством JPEG, уровнем PNG-сжатия, апсемплингом chroma, выбором кадра и прогрессивной обработкой.

libavif как библиотека

Библиотека нужна там, где командной строки недостаточно. С её помощью AVIF можно добавить в собственную программу: читать файлы, декодировать пиксели, кодировать изображения, работать с профилями, метаданными и параметрами контейнера. Это важное отличие Libavif от простых конвертеров: пользователь может применять готовые CLI-инструменты, а разработчик — использовать ту же технологическую основу внутри приложения.

Для кого подходит Libavif

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

Основные группы пользователей

Пользователь Что получает от Libavif
Веб-разработчик подготовку AVIF-файлов для сайта с контролем качества, размера и прозрачности
DevOps-инженер автоматизацию обработки изображений в скриптах и CI/CD
Разработчик приложения библиотеку для встроенного кодирования и декодирования AVIF
Специалист по оптимизации изображений доступ к параметрам --qcolor, --qalpha, --speed, --codec, --yuv, --range
Администратор сервера пакетную конвертацию и проверку AVIF без графического интерфейса
Продвинутый пользователь инструмент для точного преобразования PNG/JPEG/Y4M в AVIF и обратно

Libavif не рассчитана на пользователя, которому нужен визуальный редактор, предпросмотр до/после, пакетная очередь с кнопками, встроенная обрезка, ручная ретушь или drag-and-drop. В ней нет окна проекта, панели слоёв, миниатюр папки, кнопки “Convert All” или мастера экспорта. Вместо этого есть терминал, команды и параметры. Для некоторых задач это недостаток, для автоматизации — преимущество.

Как устроен интерфейс Libavif

Интерфейс Libavif — это не графическая оболочка, а набор команд. Поэтому элементы интерфейса здесь выглядят как опции командной строки. У avifenc и avifdec есть точные управляющие элементы:

Элемент Где используется Назначение
-h, --help avifenc, avifdec показывает справку по синтаксису
-V, --version avifenc, avifdec показывает версию и доступные возможности сборки
-q, --qcolor avifenc задаёт качество цветовой части AVIF
--qalpha avifenc задаёт качество альфа-канала
-s, --speed avifenc управляет скоростью кодирования
-j, --jobs avifenc, avifdec задаёт количество рабочих потоков
-c, --codec avifenc, avifdec выбирает AV1-кодек
-l, --lossless avifenc включает настройки для lossless-кодирования
-d, --depth avifenc, avifdec управляет битностью вывода
-y, --yuv avifenc выбирает YUV-формат
-r, --range avifenc задаёт full или limited range
--cicp, --nclx avifenc задаёт цветовые CICP/NCLX-значения
--ignore-exif avifenc не переносит Exif из исходника
--ignore-xmp avifenc не переносит XMP
--ignore-profile, --ignore-icc avifenc не переносит цветовой профиль
--info, -i avifdec показывает информацию о файле вместо сохранения картинки
--index avifdec выбирает кадр или слой при декодировании
--progressive avifenc, avifdec включает progressive/layered-сценарии
--grid avifenc создаёт grid AVIF
--stdin avifenc принимает входные данные из стандартного потока

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

avifenc -q 75 input.png output.avif

Эта команда кодирует input.png в output.avif с качеством цвета 75. Если нужно сделать то же самое для JPEG:

avifenc -q 75 input.jpg output.avif

Если нужно вернуть AVIF обратно в PNG:

avifdec output.avif decoded.png

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

Поддерживаемые входные и выходные форматы

Libavif работает с конкретным набором форматов, который закрывает основные сценарии AVIF-кодирования и декодирования.

Для кодирования через avifenc

avifenc принимает:

Формат Расширения Где полезен
JPEG .jpg, .jpeg фотографии, контентные изображения, изображения без прозрачности
PNG .png интерфейсная графика, скриншоты, изображения с альфа-каналом
Y4M .y4m видео-кадры, пайпы из FFmpeg, точная работа с YUV и битностью

JPEG удобен для фотографий. При конвертации JPEG в AVIF обычно важны параметры качества, скорость кодирования и выбранный YUV-формат. PNG удобен для изображений с прозрачностью, и здесь особенно важен --qalpha, потому что альфа-канал может требовать отдельной настройки. Y4M нужен, когда изображение или последовательность уже подготовлены как видеоданные, например через FFmpeg.

Для декодирования через avifdec

avifdec сохраняет результат в:

Формат Расширения Особенности
PNG .png подходит для проверки результата, сохранения прозрачности и без потерь в выходном файле
JPEG .jpg, .jpeg подходит для совместимости и просмотра там, где AVIF не нужен
Y4M .y4m подходит для анализа, видео-пайплайнов и работы с YUV

Для проверки качества AVIF чаще используют PNG, потому что он не добавляет дополнительное JPEG-сжатие при обратном сохранении. Если декодировать AVIF в JPEG, итоговая картинка будет дополнительно пережата JPEG-кодеком, поэтому такой путь удобен для совместимости, но хуже подходит для точной оценки исходного AVIF.

Первый запуск и проверка работы

После установки Libavif работа обычно начинается с проверки доступности команд. Для этого используют справку и вывод версии:

avifenc --help
avifdec --help
avifenc --version
avifdec --version

Команда --help показывает доступные параметры, а --version помогает понять, какие кодеки и возможности доступны в конкретной сборке. Это важно: Libavif может быть собрана с разными AV1-кодеками и дополнительными библиотеками. Например, в одной системе может быть доступен aom, в другой — rav1e или svt для кодирования, а для декодирования могут использоваться aom, dav1d или libgav1. Поддержка конкретных кодеков зависит от сборки, а не только от имени программы.

Раздел проекта Libavif с командами сборки и упоминанием avifenc/avifdec

При первом запуске важно проверить три вещи:

  1. Команды avifenc и avifdec вообще запускаются.

  2. В справке присутствуют нужные параметры.

  3. В версии или справке видны нужные кодеки.

Если avifenc запускается, но не может кодировать, причина часто не в синтаксисе команды, а в том, что сборка Libavif не имеет включённого AV1-энкодера. Если avifdec может читать AVIF, но avifenc не может его создавать, значит доступен декодер, но не доступен кодировщик.

Кодирование PNG в AVIF через avifenc

Самый понятный сценарий — преобразование PNG в AVIF:

avifenc -q 75 input.png output.avif

Здесь:

  • avifenc — программа кодирования;

  • -q 75 — качество цветовой части;

  • input.png — исходный файл;

  • output.avif — итоговый AVIF.

Параметр -q является короткой формой для --qcolor. Он задаёт качество цвета по шкале от 0 до 100, где 100 означает lossless для цветовой части. Это не проценты качества в бытовом смысле, а удобная шкала управления кодированием. Значение 75 часто используют как стартовую точку для визуальной проверки: файл уже заметно меньше исходника, но качество часто остаётся достаточным для веб-графики и изображений в интерфейсе.

Для PNG с прозрачностью лучше сразу задавать качество альфа-канала отдельно:

avifenc --qcolor 75 --qalpha 90 input.png output.avif

В этой команде цветовая часть кодируется с качеством 75, а альфа-канал — с качеством 90. Это полезно для логотипов, иконок, UI-элементов и иллюстраций, где края прозрачности должны оставаться аккуратными. Если альфа-канал пережат слишком сильно, вокруг объектов могут появиться неприятные контуры, ступеньки или грязные переходы.

Для максимально аккуратного сохранения PNG с прозрачностью можно использовать:

avifenc --qcolor 90 --qalpha 100 input.png output.avif

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

Кодирование JPEG в AVIF

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

Базовая команда:

avifenc -q 70 photo.jpg photo.avif

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

Пример для более высокого качества:

avifenc --qcolor 82 --speed 4 photo.jpg photo.avif

Здесь --speed 4 делает кодирование медленнее, чем стандартный быстрый режим, но может дать лучший размер при сопоставимом визуальном качестве. Чем ниже --speed, тем больше времени кодировщик тратит на поиск эффективного способа сжатия.

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

avifenc --qcolor 70 --speed 8 photo.jpg photo.avif

Такой вариант больше подходит для массовой обработки, где скорость важнее минимального размера.

Настройка качества: qcolor, qalpha и lossless

В Libavif качество настраивается точнее, чем во многих обычных конвертерах. Главные параметры:

--qcolor Q
--qalpha Q
--lossless

--qcolor

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

Примеры:

avifenc --qcolor 60 input.jpg output.avif
avifenc --qcolor 80 input.jpg output.avif
avifenc --qcolor 95 input.png output.avif

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

--qalpha

--qalpha управляет альфа-каналом. Это отдельное преимущество Libavif: прозрачность можно кодировать не тем же качеством, что цвет. Для PNG-исходников с прозрачностью это особенно важно.

Пример:

avifenc --qcolor 75 --qalpha 100 icon.png icon.avif

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

avifenc --qcolor 70 --qalpha 80 overlay.png overlay.avif

Если изображение без прозрачности, --qalpha не играет существенной роли.

--lossless

--lossless включает настройки для кодирования без потерь:

avifenc --lossless input.png output.avif

Lossless AVIF нужен не всегда. Он полезен для технических изображений, скриншотов, иконок, пиксельной графики, UI-элементов и архивных сценариев, где нельзя менять пиксели. Но lossless-режим не гарантирует, что AVIF всегда будет меньше PNG. Если PNG уже хорошо оптимизирован, если изображение простое или содержит особенности, неудобные для AVIF-кодирования, итоговый файл может оказаться больше.

Для реалистичной работы лучше держать три профиля:

Сценарий Команда-основа
Фото для сайта avifenc --qcolor 70 --speed 6 photo.jpg photo.avif
Иконка с прозрачностью avifenc --qcolor 85 --qalpha 100 icon.png icon.avif
Без потерь avifenc --lossless input.png output.avif

Настройка скорости кодирования

Параметр скорости:

--speed S

Он принимает значения от 0 до 10: 0 — самый медленный режим, 10 — самый быстрый. В справке avifenc также предусмотрен вариант default или d, когда используются внутренние значения кодека.

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

Значение Характер
--speed 0 самый медленный режим, максимальный упор на эффективность
--speed 2–4 медленная, но качественная обработка
--speed 5–7 сбалансированный режим
--speed 8–10 быстрый режим для массовой обработки и черновиков

Пример для финального изображения:

avifenc --qcolor 78 --speed 3 hero.jpg hero.avif

Пример для быстрой обработки:

avifenc --qcolor 70 --speed 9 image.jpg image.avif

Пример для пакетного пайплайна, где важна скорость:

avifenc --qcolor 68 --speed 10 preview.jpg preview.avif

Нельзя оценивать --speed отдельно от --qcolor. Быстрое кодирование с высоким качеством и медленное кодирование со средним качеством могут дать разные результаты по размеру и восприятию. Правильный подход — протестировать несколько профилей на типичных изображениях проекта.

Количество потоков и параметр jobs

Параметр:

--jobs J

или коротко:

-j J

управляет количеством рабочих потоков. Значение all позволяет использовать доступные ядра. Это важно при пакетной конвертации и при работе с крупными изображениями.

Пример:

avifenc --qcolor 75 --speed 6 --jobs all input.png output.avif

Если компьютер используется параллельно для других задач, можно ограничить количество потоков:

avifenc --qcolor 75 --speed 6 --jobs 4 input.png output.avif

Для серверной обработки это особенно полезно. Без ограничения потоков несколько параллельных процессов avifenc могут занять слишком много CPU. В пайплайне лучше контролировать не только --jobs, но и количество одновременно запускаемых задач.

Выбор кодека через --codec

Libavif сама по себе задаёт контейнер, работу с AVIF-структурой, параметрами изображения, метаданными и API, но фактическое AV1-кодирование или декодирование выполняется подключёнными кодеками. В avifenc выбор кодека делается так:

avifenc --codec aom input.png output.avif

или:

avifenc --codec rav1e input.png output.avif

или:

avifenc --codec svt input.png output.avif

Набор доступных вариантов зависит от сборки. Для кодирования в avifenc используются варианты вроде aom, rav1e, svt; для декодирования в avifdec — варианты вроде aom, dav1d, libgav1. Libavif поддерживает подключение этих зависимостей через параметры сборки, а доступность конкретного кодека определяется тем, как программа была собрана.

Практическая логика выбора

Кодек Где используется Когда выбирать
aom кодирование и декодирование универсальный вариант, часто используется как базовый
rav1e кодирование подходит для альтернативного AV1-кодирования
svt кодирование полезен там, где важна производительность на подходящей системе
dav1d декодирование быстрый AV1-декодер
libgav1 декодирование альтернативный декодер

Если пользователь не указывает --codec, Libavif выбирает доступный вариант автоматически. Для обычной работы этого достаточно. Явный выбор нужен, когда нужно сравнить кодеки, повторить результат, проверить совместимость или настроить производительность.

Пример с aom:

avifenc --codec aom --qcolor 75 --speed 6 input.png output.avif

Пример с автоматическим выбором:

avifenc --qcolor 75 --speed 6 input.png output.avif

Для скриптов лучше фиксировать --codec, если важна воспроизводимость между разными машинами. Иначе одна система может использовать один доступный кодек, другая — другой, и итоговые файлы будут отличаться.

YUV-формат: 444, 422, 420 и 400

Параметр:

--yuv FORMAT

или коротко:

-y FORMAT

задаёт YUV-формат выходного AVIF. Доступные варианты:

  • auto;

  • 444;

  • 422;

  • 420;

  • 400.

YUV-формат влияет на то, как хранится цветовая информация. Для фотографии часто используют 420, потому что человеческое зрение менее чувствительно к деталям цвета, чем к яркости, и такой режим хорошо уменьшает размер. Для графики, текста, скриншотов и интерфейсных элементов 444 может быть лучше, потому что сохраняет цветовые детали точнее.

Практическая таблица

Формат Что означает Где использовать
444 цветовая информация сохраняется полно скриншоты, интерфейсы, текст, графика
422 промежуточный вариант видео-подобные изображения, отдельные профессиональные сценарии
420 цветовая информация сильнее уплотняется фотографии, веб-картинки, превью
400 grayscale чёрно-белые изображения
auto Libavif выбирает автоматически обычные задачи без ручной настройки 

Пример для фотографии:

avifenc --qcolor 72 --yuv 420 photo.jpg photo.avif

Пример для скриншота интерфейса:

avifenc --qcolor 85 --yuv 444 screenshot.png screenshot.avif

Пример для чёрно-белой картинки:

avifenc --qcolor 75 --yuv 400 grayscale.png grayscale.avif

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

Битность и параметр depth

Параметр:

--depth D

задаёт битность на канал при кодировании JPEG/PNG. Для avifenc доступны 8, 10 и 12 бит. Для avifdec глубина вывода зависит от формата: PNG может сохраняться в 8 или 16 бит, JPEG всегда остаётся 8-битным, а Y4M сохраняет свою глубину.

Пример 10-битного AVIF:

avifenc --depth 10 --qcolor 80 input.png output.avif

Пример 12-битного AVIF:

avifenc --depth 12 --qcolor 85 input.png output.avif

Битность важна для градиентов, HDR-сценариев, цветокоррекции, изображений с широким динамическим диапазоном и материалов, где нежелательна постеризация. Для обычной веб-графики 8 бит часто достаточно. Для изображений с плавными переходами, небом, тенями, подсветкой и тонкими градиентами 10 бит может дать более аккуратный результат.

Диапазон full и limited

Параметр:

--range RANGE

задаёт диапазон YUV:

  • full или f;

  • limited или l.

Пример:

avifenc --qcolor 75 --range full input.png output.avif

Для JPEG и PNG по умолчанию логичен full, потому что это обычные изображения с полным диапазоном значений. limited чаще встречается в видеосценариях. Если AVIF создаётся из Y4M или видеопайпа, диапазон нужно контролировать внимательнее, чтобы не получить сжатые тени, поднятый чёрный или неправильную яркость.

Для веб-изображений из PNG/JPEG чаще используют:

avifenc --qcolor 75 --range full input.png output.avif

Для видеопайплайна диапазон должен соответствовать исходному материалу. Если источник был limited, а файл помечен как full, отображение может стать неправильным. Если источник был full, а файл помечен как limited, картинка может выглядеть блеклой или контрастной не так, как задумано.

Цветовые профили, CICP и NCLX

Libavif позволяет управлять цветовой информацией. Для этого используются параметры:

--cicp P/T/M
--nclx P/T/M
--icc FILENAME
--ignore-profile
--ignore-icc
--range full

CICP/NCLX задают числовые значения:

  • color primaries;

  • transfer characteristics;

  • matrix coefficients.

В команде они задаются через слэш:

avifenc --cicp 1/13/6 --range full input.png output.avif

Этот уровень настройки нужен не каждому пользователю. Но для материалов с расширенным цветовым охватом, HDR, HLG/PQ, профессиональной подготовки изображений, видео-кадров и строгих пайплайнов цветовые метки важны. Если цветовая информация указана неправильно, файл может технически открываться, но выглядеть иначе: не те оттенки, другой контраст, неверная насыщенность, проблемы с HDR/SDR-отображением.

Для обычной конвертации PNG/JPEG чаще достаточно сохранить исходный профиль. Если нужно убрать профиль:

avifenc --ignore-profile --qcolor 75 input.png output.avif

Если нужно явно встроить ICC-профиль:

avifenc --icc profile.icc --qcolor 75 input.png output.avif

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

Метаданные: Exif, XMP и ICC

Libavif умеет управлять метаданными. Для этого в avifenc используются параметры:

--ignore-exif
--ignore-xmp
--ignore-profile
--exif FILENAME
--xmp FILENAME
--icc FILENAME

Метаданные могут быть полезными или лишними. Например, Exif может хранить параметры камеры, дату съёмки, ориентацию и другую информацию. XMP может содержать данные редактора, описание, теги, служебные поля. ICC отвечает за цветовой профиль. В веб-оптимизации часто удаляют лишние метаданные, чтобы уменьшить размер файла. В архиве или профессиональной обработке, наоборот, важно сохранить цветовой профиль и часть служебной информации.

Пример удаления Exif и XMP:

avifenc --ignore-exif --ignore-xmp --qcolor 75 input.jpg output.avif

Пример удаления профиля:

avifenc --ignore-profile --qcolor 75 input.png output.avif

Пример добавления внешнего ICC-профиля:

avifenc --icc display-p3.icc --qcolor 85 input.png output.avif

Для сайта обычно разумно удалять лишние Exif/XMP, но не ломать цвет. Если изображение использует нестандартный профиль, его удаление может изменить вид картинки. Поэтому для фотографий и дизайн-макетов лучше проверять результат визуально.

Работа с альфа-каналом

Альфа-канал — один из сильных сценариев Libavif. AVIF может хранить прозрачность, а avifenc позволяет задавать её качество отдельно от цвета:

avifenc --qcolor 75 --qalpha 100 input.png output.avif

Это особенно полезно для:

  • иконок;

  • логотипов;

  • стикеров;

  • оверлеев;

  • интерфейсных элементов;

  • изображений с мягкими тенями;

  • объектов на прозрачном фоне.

Если поставить низкое качество альфа-канала, края объекта могут стать неаккуратными. Это заметно на полупрозрачных тенях, антиалиасинге, мягких масках и светлых объектах на тёмном фоне.

Для логотипа лучше использовать:

avifenc --qcolor 85 --qalpha 100 logo.png logo.avif

Для декоративного полупрозрачного фона можно снизить:

avifenc --qcolor 70 --qalpha 80 overlay.png overlay.avif

Для полного сохранения без потерь:

avifenc --lossless transparent.png transparent.avif

Есть и параметр:

--premultiply

Он premultiply-ит цвет по альфа-каналу и сигнализирует это в AVIF. Этот режим нужен не всегда, но может быть полезен в пайплайнах, где ожидается premultiplied alpha. Если пользователь не понимает, зачем это нужно, лучше не включать параметр автоматически.

Декодирование AVIF обратно в PNG

Самая частая команда avifdec:

avifdec input.avif output.png

Она сохраняет AVIF как PNG. Это удобно для проверки результата, редактирования в программах, которые не поддерживают AVIF, и получения изображения без дополнительного JPEG-сжатия.

Если нужно указать глубину PNG:

avifdec --depth 16 input.avif output.png

Для обычной проверки достаточно:

avifdec input.avif decoded.png

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

Декодирование AVIF в JPEG

Если нужен JPEG:

avifdec input.avif output.jpg

Можно задать качество JPEG:

avifdec --quality 92 input.avif output.jpg

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

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

avifdec --quality 95 input.avif output.jpg

Для небольших превью можно снизить:

avifdec --quality 80 input.avif output.jpg

Получение информации о AVIF-файле

Режим анализа:

avifdec --info input.avif

или:

avifdec -i input.avif

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

Такой режим используют, когда:

  • AVIF открывается неправильно;

  • нужно проверить, есть ли альфа-канал;

  • нужно понять, почему файл большой;

  • нужно проверить битность;

  • нужно посмотреть цветовые метки;

  • нужно проверить image sequence;

  • нужно убедиться, что progressive AVIF действительно содержит слои.

Пример:

avifdec --info banner.avif

Если файл является последовательностью кадров или progressive/layered AVIF, можно декодировать конкретный индекс:

avifdec --index 0 input.avif frame0.png
avifdec --index all input.avif frame.png

Параметр --index особенно важен, когда AVIF содержит не один обычный кадр, а несколько кадров или слоёв.

Массовая конвертация файлов

Libavif хорошо подходит для пакетной обработки. На Linux и macOS можно использовать shell-цикл:

for file in *.png; do  avifenc --qcolor 75 --qalpha 90 "$file" "${file%.png}.avif"done

Для JPEG:

for file in *.jpg; do  avifenc --qcolor 72 --speed 6 "$file" "${file%.jpg}.avif"done

Для смешанной папки лучше сначала привести список файлов к понятному набору. Например, отдельно обрабатывать PNG и JPEG, потому что для PNG с альфой нужны одни параметры, а для JPEG-фотографий — другие.

Для PowerShell:

Get-ChildItem *.png | ForEach-Object {    avifenc --qcolor 75 --qalpha 90 $_.FullName ($_.BaseName + ".avif")}

Для JPEG:

Get-ChildItem *.jpg | ForEach-Object {    avifenc --qcolor 72 --speed 6 $_.FullName ($_.BaseName + ".avif")}

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

Тип изображения Рекомендуемый профиль
Фото --qcolor 68–78 --yuv 420 --speed 5–7
Скриншоты --qcolor 80–90 --yuv 444 --speed 4–6
Иконки с альфой --qcolor 80–90 --qalpha 100 --yuv 444
Большие баннеры --qcolor 65–75 --yuv 420 --speed 4–6
Архив без потерь --lossless

Защита от перезаписи файлов

Для аккуратной пакетной обработки полезен параметр:

--no-overwrite

Он запрещает перезаписывать существующий выходной файл:

avifenc --qcolor 75 --no-overwrite input.png output.avif

Это важно в скриптах. Без --no-overwrite можно случайно заменить уже подобранный файл новым вариантом с другими параметрами. Для ручного тестирования это не критично, но для каталога с сотнями изображений такой параметр защищает от ошибок.

Есть и параметр:

-o, --output FILENAME

Он позволяет явно задать выходной файл:

avifenc --qcolor 75 -o result.avif input.png

Для простых команд обычно достаточно указывать выходной файл последним аргументом, но --output удобен, когда команда формируется автоматически.

Работа со stdin и пайпами

Параметр:

--stdin

позволяет читать входные данные из стандартного потока. Это удобно для связки с FFmpeg и другими инструментами. Типичный сценарий — создание AVIF-последовательности из видео:

ffmpeg -i src.mp4 -f yuv4mpegpipe -strict -1 - | avifenc --stdin --fps 30 dst.avif

AVIF Image Sequences используются для коротких silent-анимаций: по смыслу они похожи на GIF-анимации, но дают другое качество и размер за счёт AVIF/AV1-подхода. В таких пайплайнах avifenc принимает Y4M-поток, а --fps задаёт частоту кадров.

Можно сделать двухэтапный вариант:

ffmpeg -i src.mp4 -strict -1 tmp.y4mavifenc --fps 30 tmp.y4m dst.avif

Двухэтапный подход удобен для отладки: временный .y4m можно отдельно проверить, воспроизвести или использовать повторно с разными параметрами avifenc.

Animated AVIF и AVIF Image Sequences

Libavif умеет работать не только с одиночными изображениями, но и с последовательностями. Это важно для коротких анимаций, где GIF слишком тяжёлый, а видеоформат неудобен.

Пример из набора PNG-кадров:

avifenc --fps 24 frame001.png frame002.png frame003.png animation.avif

Для реального проекта обычно кадров больше:

avifenc --fps 30 frames/*.png animation.avif

Можно задать повторение:

avifenc --fps 30 --repetition-count infinite frames/*.png animation.avif

или ограничить количество повторов:

avifenc --fps 30 --repetition-count 3 frames/*.png animation.avif

Для последовательностей особенно важны:

  • --fps;

  • --duration;

  • --keyframe;

  • --repetition-count;

  • --jobs;

  • --codec;

  • --speed;

  • --qcolor.

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

Progressive и layered AVIF

Libavif поддерживает параметры:

--progressive
--layered
--scaling-mode

--progressive автоматически задаёт параметры для простого layered-изображения, которое может поддерживать прогрессивное отображение. --layered кодирует layered AVIF, где каждый входной файл становится отдельным слоем. В avifenc для layered AVIF предусмотрено ограничение до четырёх слоёв.

Пример:

avifenc --progressive input.png progressive.avif

Пример layered-варианта:

avifenc --layered layer1.png layer2.png layer3.png output.avif

Параметр --scaling-mode задаёт масштабирование слоя:

avifenc --layered --scaling-mode 1/2 low.png high.png output.avif

Progressive/layered AVIF — не обязательная функция для обычного сайта. Она полезна, когда нужно, чтобы изображение могло показываться постепенно или содержать слои с разной детализацией. Но совместимость с просмотрщиками и браузерами нужно проверять. Обычный single-frame AVIF проще и предсказуемее.

Grid AVIF для больших изображений

Параметр:

--grid MxN

создаёт grid AVIF:

avifenc --grid 2x2 large.png large-grid.avif

Grid AVIF делит изображение на сетку. Это может быть полезно для больших изображений, где нужно организовать данные в виде отдельных плиток. avifenc может принять либо несколько изображений одинакового размера, либо один файл, который можно ровно разделить на сетку. Сетка наследует цветовой профиль первого изображения.

Пример из четырёх плиток:

avifenc --grid 2x2 tile1.png tile2.png tile3.png tile4.png grid.avif

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

Gain map и HDR-сценарии

Libavif поддерживает работу с gain map через отдельные параметры и дополнительные инструменты проекта. В avifenc есть параметр:

--qgain-map Q

Он задаёт качество gain map по шкале 0–100, где 100 соответствует lossless для gain map. Также есть параметр:

--ignore-gain-map

Он позволяет игнорировать gain map, если он присутствует во входном файле.

Gain map используется в HDR/SDR-сценариях, где изображение должно корректно выглядеть на разных дисплеях. Для обычной конвертации JPEG в AVIF этот раздел чаще всего не нужен. Но для современных HDR-пайплайнов, мобильных фото, wide color gamut и контента с расширенной яркостью gain map становится важным элементом.

Пример команды с качеством gain map:

avifenc --qcolor 85 --qgain-map 90 input.png output.avif

Если gain map не нужна:

avifenc --ignore-gain-map --qcolor 80 input.png output.avif

Использовать gain map без понимания источника не стоит. Если изображение обычное SDR, gain map не даст преимущества. Если материал HDR, нужно отдельно контролировать CICP, диапазон, битность и совместимость просмотра.

Поворот, отражение и геометрические свойства

Libavif поддерживает не только пиксельное кодирование, но и некоторые свойства контейнера. Например:

--irot ANGLE

задаёт поворот, где значение от 0 до 3 соответствует шагам по 90 градусов против часовой стрелки:

avifenc --irot 1 input.jpg rotated.avif

Параметр:

--imir AXIS

задаёт отражение:

avifenc --imir 1 input.jpg mirrored.avif

Есть параметры clean aperture:

--crop CROPX,CROPY,CROPW,CROPH
--clap WN,WD,HN,HD,HON,HOD,VON,VOD

Они задают область кадра на уровне свойств изображения. Это не замена полноценному редактору изображений. Libavif не предназначена для удобной ручной обрезки мышью, но может записывать такие свойства в AVIF-контейнер.

Типовые профили команд

Для практической работы удобно держать готовые профили.

Фото для сайта

avifenc --qcolor 72 --speed 6 --yuv 420 photo.jpg photo.avif

Баланс между размером и качеством. Подходит для карточек, статей, баннеров и обычных фотографий.

Фото высокого качества

avifenc --qcolor 85 --speed 4 --yuv 420 photo.jpg photo-high.avif

Лучше сохраняет детали, но кодируется дольше и даёт больший файл.

Скриншот интерфейса

avifenc --qcolor 88 --speed 5 --yuv 444 screenshot.png screenshot.avif

--yuv 444 помогает сохранить цветные линии, мелкий текст и резкие границы.

PNG с прозрачностью

avifenc --qcolor 82 --qalpha 100 --yuv 444 icon.png icon.avif

Подходит для иконок и UI-графики.

Lossless

avifenc --lossless input.png output.avif

Нужен для точного сохранения пикселей.

Быстрая черновая конвертация

avifenc --qcolor 65 --speed 10 input.jpg output.avif

Подходит для предварительной оценки, но не для финального качества.

Декодирование для проверки

avifdec input.avif check.png

Анализ AVIF

avifdec --info input.avif

Пример рабочего процесса для сайта

Один из сильных сценариев Libavif — подготовка изображений для сайта. Правильный процесс выглядит не как сконвертировать всё одним параметром, а как разделение изображений по типам.

Фотографии

Для фотографий:

avifenc --qcolor 72 --speed 6 --yuv 420 photo.jpg photo.avif

Проверяются:

  • лицо и кожа;

  • тени;

  • мелкие детали;

  • шум;

  • градиенты;

  • края объектов;

  • размер файла.

Скриншоты

Для скриншотов:

avifenc --qcolor 86 --speed 5 --yuv 444 screenshot.png screenshot.avif

Проверяются:

  • читаемость текста;

  • цветные линии;

  • пиктограммы;

  • тонкие границы;

  • отсутствие цветных ореолов.

Иконки

Для иконок:

avifenc --qcolor 85 --qalpha 100 --yuv 444 icon.png icon.avif

Проверяются:

  • прозрачность;

  • края;

  • мелкие элементы;

  • тени;

  • размер на разных фонах.

Баннеры

Для баннеров:

avifenc --qcolor 75 --speed 5 --yuv 420 banner.jpg banner.avif

Если баннер содержит текст, лучше попробовать 444:

avifenc --qcolor 82 --speed 5 --yuv 444 banner.png banner.avif

Практическая проверка качества

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

Проверять нужно:

Что проверять Почему важно
Градиенты AVIF с низким качеством может дать полосы
Текст YUV420 может портить цветной мелкий текст
Прозрачность низкий --qalpha может испортить края
Тени в тенях часто видны артефакты
Лица кожа плохо переносит грубое сжатие
Линии интерфейса резкие края требуют аккуратных параметров
Размер файла итоговая цель оптимизации всё равно важна

Для проверки можно декодировать файл в PNG:

avifdec output.avif output-check.png

Затем сравнить исходник и результат. Если изображение должно использоваться на сайте, лучше смотреть его в реальном размере отображения и на 100% масштабе. Для прозрачных PNG нужно проверять на светлом и тёмном фоне.

Ограничения Libavif

Libavif сильна как точный инструмент, но у неё есть ограничения.

Нет графического интерфейса

Это главный барьер. В Libavif нет окна предпросмотра, панели настроек, бегунка качества, кнопки “Start”, списка файлов и визуального сравнения. Всё делается через команды.

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

Результат зависит от сборки

Одна сборка Libavif может иметь один набор кодеков, другая — другой. Поэтому команда с --codec svt может работать на одной машине и не работать на другой. Это не ошибка синтаксиса, а особенность сборки.

Нужно понимать параметры

Libavif даёт много контроля, но этот контроль требует понимания:

  • --qcolor и --qalpha;

  • --speed;

  • --yuv;

  • --depth;

  • --range;

  • --codec;

  • CICP/NCLX;

  • ICC-профили;

  • Exif/XMP;

  • animated AVIF;

  • progressive/layered AVIF.

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

Не заменяет редактор изображений

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

Сильные стороны Libavif

Точный контроль AVIF

Libavif даёт доступ к параметрам, которые часто скрыты в графических конвертерах. Можно отдельно задать качество цвета, альфы и gain map, выбрать кодек, YUV-формат, битность, диапазон, метаданные и особенности контейнера.

Удобство автоматизации

Командный формат идеально подходит для скриптов. Можно конвертировать папки, запускать обработку на сервере, проверять изображения в CI/CD, создавать несколько профилей качества.

Работа как библиотека

Libavif — это не только CLI. Её можно встроить в приложение. Это делает проект полезным не только конечным пользователям, но и разработчикам софта.

Поддержка сложных сценариев

Программа работает не только с одиночными файлами. Она поддерживает sequences, progressive/layered AVIF, grid AVIF, альфа-канал, метаданные, цветовые параметры и разные AV1-кодеки.

Прозрачная логика команд

Команды Libavif легко читать. Например:

avifenc --qcolor 75 --qalpha 100 --speed 5 --yuv 444 input.png output.avif

Из такой строки сразу понятно: качество цвета 75, альфа без потерь по шкале качества, скорость 5, YUV444, входной PNG, выходной AVIF.

Недостатки Libavif

Порог входа выше среднего

Новичку проще открыть графический конвертер, перетащить файлы и нажать кнопку. В Libavif нужно понимать синтаксис команд.

Нет предпросмотра

Программа не показывает результат до кодирования. Чтобы проверить качество, нужно открыть готовый AVIF или декодировать его обратно в PNG.

Нет встроенного пакетного менеджера задач

Пакетная обработка делается средствами shell, PowerShell, Python, Makefile или другой автоматизации. В самой программе нет визуальной очереди.

Нужно учитывать совместимость

Некоторые расширенные возможности AVIF могут поддерживаться не всеми просмотрщиками. Обычный single-frame AVIF совместимее, чем progressive/layered, grid или сложные HDR/gain map-сценарии.

Ошибки часто требуют технического понимания

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

Сравнение с аналогами

Libavif нужно сравнивать не с абстрактными конвертерами, а с конкретными инструментами, которые реально используются для AVIF и обработки изображений.

Программа Тип Где сильнее Где уступает Libavif
ImageMagick универсальная CLI-программа для обработки изображений огромное количество форматов и операций: resize, crop, compose, effects, batch processing AVIF-настройки зависят от делегатов и сборки; меньше прямого специализированного контроля над AVIF-параметрами
FFmpeg инструмент для видео, кадров и потоков удобен для извлечения кадров, работы с видео и передачи Y4M в avifenc не является специализированной AVIF-библиотекой для точной работы с контейнером и изображениями
Squoosh CLI инструмент оптимизации изображений проще для типовой веб-оптимизации, удобен в JavaScript-среде меньше подходит для C-интеграции и низкоуровневого управления AVIF
libheif / heif-enc библиотека и CLI для HEIF/AVIF шире по HEIF-сценариям Libavif сфокусирована именно на AVIF и его параметрах
cavif CLI-кодировщик AVIF проще для базового кодирования меньше возможностей для декодирования, метаданных, анализа и интеграции
rav1e-based инструменты кодирование через rav1e полезны для конкретного AV1-энкодера Libavif даёт общий AVIF-контейнерный уровень и разные backend-варианты
Sharp Node.js-библиотека обработки изображений удобна для веб-серверов и JavaScript-проектов не заменяет Libavif как самостоятельную C-библиотеку и точный CLI-инструмент

ImageMagick

ImageMagick сильнее как универсальная программа обработки изображений. Она умеет менять размер, кадрировать, накладывать изображения, менять цвет, конвертировать множество форматов. Но когда задача именно в точном AVIF-кодировании, Libavif обычно понятнее: avifenc сразу показывает AVIF-специфичные параметры — --qcolor, --qalpha, --speed, --codec, --yuv, --range, --cicp.

ImageMagick удобнее, если нужно сначала подготовить изображение: изменить размер, обрезать, наложить фон. Libavif удобнее, если изображение уже готово и нужно качественно закодировать его в AVIF.

Практичная схема:

magick input.png -resize 1200x output.pngavifenc --qcolor 75 --speed 6 output.png output.avif

FFmpeg

FFmpeg лучше работает с видео и потоками. Он нужен, когда исходник — MP4, MOV, WebM или другой видеоматериал. Libavif подключается на этапе создания AVIF-последовательности.

Пример связки:

ffmpeg -i input.mp4 -f yuv4mpegpipe -strict -1 - | avifenc --stdin --fps 30 output.avif

FFmpeg подготавливает кадры, Libavif кодирует AVIF. Это не конкурирующие инструменты, а нормальная связка для image sequences.

Squoosh CLI

Squoosh CLI удобен тем, кто работает в JavaScript-экосистеме и хочет быстро оптимизировать изображения для сайта. Он проще воспринимается как веб-инструмент оптимизации. Libavif лучше подходит, когда нужна C-библиотека, системная интеграция, предсказуемый CLI и прямой доступ к AVIF-параметрам.

Для frontend-проекта Squoosh CLI может быть удобнее. Для серверного пайплайна, нативного приложения или строгой обработки AVIF Libavif надёжнее как специализированная основа.

libheif

libheif шире по HEIF-семейству. Она полезна, когда кроме AVIF важны HEIC/HEIF-сценарии. Libavif сфокусирована на AVIF и поэтому воспринимается как более прямой инструмент именно для AV1 Image File Format.

Если задача — HEIC, лучше смотреть в сторону libheif. Если задача — AVIF через avifenc/avifdec, Libavif логичнее.

cavif

cavif удобен для простого кодирования AVIF. Он может понравиться тем, кому нужна короткая команда без большого количества параметров. Libavif сильнее как полный набор: библиотека, кодирование, декодирование, анализ, метаданные, альфа-канал, progressive/layered, grid, sequences и разные codec backend.

Если нужно быстро получить AVIF, cavif может быть проще. Если нужно контролировать файл и встраивать AVIF в рабочий процесс, Libavif предпочтительнее.

Примеры реальных задач

Сжать фотографию для статьи

avifenc --qcolor 72 --speed 6 --yuv 420 article-photo.jpg article-photo.avif

Этот профиль подходит для обычной фотографии в статье. Если лицо или детали выглядят грубо, поднять --qcolor до 78–82.

Подготовить обложку

avifenc --qcolor 78 --speed 5 --yuv 420 cover.jpg cover.avif

Обложка обычно крупная и заметная, поэтому качество лучше не занижать.

Сконвертировать логотип

avifenc --qcolor 90 --qalpha 100 --yuv 444 logo.png logo.avif

Логотип требует аккуратных краёв и хорошей прозрачности.

Сконвертировать скриншот программы

avifenc --qcolor 88 --speed 5 --yuv 444 screenshot.png screenshot.avif

Для скриншотов 444 часто важнее, чем для фотографий.

Сделать lossless-архив

avifenc --lossless source.png source.avif

Подходит, когда пиксели должны сохраниться без изменений.

Проверить AVIF

avifdec --info source.avif

Команда показывает свойства файла.

Получить PNG из AVIF

avifdec source.avif source.png

Подходит для редактирования или проверки.

Получить JPEG из AVIF

avifdec --quality 92 source.avif source.jpg

Подходит для совместимости со старыми системами.

Ошибки и типичные проблемы

avifenc не найден

Если терминал пишет, что команда не найдена, Libavif не доступна в PATH или не установлены CLI-инструменты. Проблема не в AVIF-файле, а в окружении.

Кодек недоступен

Команда вида:

avifenc --codec svt input.png output.avif

может не работать, если сборка не содержит SVT-AV1. В этом случае нужно посмотреть:

avifenc --help

или:

avifenc --version

и выбрать доступный кодек.

AVIF получился больше PNG

Это возможно. Причины:

  • включён --lossless;

  • PNG был уже хорошо оптимизирован;

  • изображение простое и плохо выигрывает от AVIF;

  • слишком высокое качество;

  • выбран 444, хотя можно было использовать 420;

  • сохранены тяжёлые метаданные;

  • изображение содержит шум или сложные текстуры.

Цвет выглядит неправильно

Причины:

  • удалён ICC-профиль;

  • неверно задан --cicp;

  • перепутан --range;

  • исходник имел нестандартный цветовой профиль;

  • просмотрщик некорректно интерпретирует AVIF.

Прозрачность выглядит плохо

Причины:

  • низкий --qalpha;

  • неподходящий YUV-формат;

  • проблемы с premultiply/unpremultiply в другом приложении;

  • повторное декодирование и сохранение в формат без альфы.

Скриншот стал мыльным

Причины:

  • выбран --yuv 420;

  • низкий --qcolor;

  • слишком быстрый режим;

  • мелкий цветной текст плохо переносит chroma subsampling.

Для скриншотов лучше:

avifenc --qcolor 88 --yuv 444 --speed 5 screenshot.png screenshot.avif

Использование Libavif в автоматизации

Libavif удобно включать в автоматическую сборку сайта. Например, можно хранить исходные PNG/JPEG, а AVIF создавать при сборке.

Пример простого shell-скрипта:

mkdir -p aviffor file in images/*.jpg; do  name=$(basename "$file" .jpg)  avifenc --qcolor 72 --speed 6 --yuv 420 "$file" "avif/$name.avif"donefor file in images/*.png; do  name=$(basename "$file" .png)  avifenc --qcolor 82 --qalpha 100 --speed 5 --yuv 444 "$file" "avif/$name.avif"done

Этот скрипт отдельно обрабатывает JPEG и PNG. JPEG получает профиль для фотографий, PNG — профиль для изображений с возможной прозрачностью.

Для CI/CD важно добавлять проверку результата. Например:

avifdec --info avif/example.avif

Можно также проверять размер файла:

ls -lh avif/example.avif

И делать контрольную декодировку:

avifdec avif/example.avif /tmp/example-check.png

Libavif как библиотека для разработчиков

CLI-инструменты удобны для пользователей, но проект важен и как библиотека. Разработчик может использовать libavif, чтобы программа сама читала и писала AVIF. Это актуально для:

  • просмотрщиков изображений;

  • графических редакторов;

  • серверных обработчиков;

  • CMS;

  • мобильных приложений;

  • desktop-программ;

  • пакетных оптимизаторов;

  • backend-сервисов;

  • конвейеров обработки медиа.

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

Лицензия и открытость

Libavif распространяется под BSD-лицензией. Это важный момент для разработчиков, потому что библиотеку можно использовать в разных проектах при соблюдении условий лицензии. В репозитории также есть исходный код, документация, примеры, тесты, CMake-конфигурация и файлы для сборки.

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

Лучшие настройки для разных типов изображений

Универсальной настройки нет, но можно использовать рабочие стартовые профили.

Тип Команда
Фото обычного качества avifenc --qcolor 70 --speed 6 --yuv 420 input.jpg output.avif
Фото высокого качества avifenc --qcolor 82 --speed 4 --yuv 420 input.jpg output.avif
Скриншот avifenc --qcolor 88 --speed 5 --yuv 444 input.png output.avif
Логотип avifenc --qcolor 90 --qalpha 100 --yuv 444 input.png output.avif
Иконка avifenc --qcolor 85 --qalpha 100 --yuv 444 input.png output.avif
Превью avifenc --qcolor 60 --speed 8 --yuv 420 input.jpg output.avif
Архив avifenc --lossless input.png output.avif
HDR/широкий цвет avifenc --depth 10 --qcolor 85 --cicp P/T/M input.png output.avif

Для сайта обычно достаточно трёх профилей:

# фотографииavifenc --qcolor 72 --speed 6 --yuv 420 input.jpg output.avif
# PNG с прозрачностьюavifenc --qcolor 82 --qalpha 100 --speed 5 --yuv 444 input.png output.avif
# скриншотыavifenc --qcolor 88 --speed 5 --yuv 444 input.png output.avif

Как выбрать параметры без лишней теории

Нормальная схема подбора параметров такая:

  1. Взять несколько типичных изображений проекта.

  2. Закодировать каждое в 3–4 вариантах.

  3. Сравнить размер.

  4. Открыть результат визуально.

  5. Проверить декодирование.

  6. Зафиксировать профиль.

Например, для фотографии:

avifenc --qcolor 65 --speed 6 --yuv 420 photo.jpg photo-q65.avifavifenc --qcolor 72 --speed 6 --yuv 420 photo.jpg photo-q72.avifavifenc --qcolor 80 --speed 6 --yuv 420 photo.jpg photo-q80.avif

Для PNG с прозрачностью:

avifenc --qcolor 75 --qalpha 80 --yuv 444 icon.png icon-a80.avifavifenc --qcolor 80 --qalpha 100 --yuv 444 icon.png icon-a100.avifavifenc --lossless icon.png icon-lossless.avif

Для скриншота:

avifenc --qcolor 80 --yuv 420 screenshot.png screenshot-420.avifavifenc --qcolor 86 --yuv 444 screenshot.png screenshot-444.avifavifenc --qcolor 92 --yuv 444 screenshot.png screenshot-444-q92.avif

После этого становится понятно, где реальная граница качества. Один проект может спокойно использовать --qcolor 68, другой потребует 82. Сжатие изображений нельзя свести к одной магической цифре.

Что Libavif делает особенно хорошо

Libavif лучше всего показывает себя в задачах, где нужны:

  • точные AVIF-настройки;

  • командная строка;

  • повторяемость;

  • пакетная обработка;

  • интеграция в скрипты;

  • отдельное управление цветом и альфой;

  • работа с YUV;

  • анализ AVIF-файлов;

  • поддержка сложных AVIF-сценариев;

  • использование библиотеки в приложениях.

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

Что Libavif не должна делать

От Libavif не стоит ждать функций графического редактора. Она не предназначена для:

  • ручной ретуши;

  • рисования;

  • удаления фона;

  • визуального кадрирования;

  • цветокоррекции через интерфейс;

  • пакетной очереди с кнопками;

  • предпросмотра до/после;

  • работы со слоями как в редакторе;

  • организации медиатеки.

Также Libavif не должна быть единственным инструментом во всём процессе. Часто правильная схема такая:

  1. Подготовить изображение в редакторе или другом CLI-инструменте.

  2. Изменить размер, если нужно.

  3. Очистить или сохранить нужные метаданные.

  4. Закодировать через avifenc.

  5. Проверить через avifdec --info.

  6. Открыть результат в целевом окружении.

Итоговая оценка

Libavif — сильный специализированный инструмент для AVIF. Его главная ценность не в простоте, а в точности. Он позволяет кодировать PNG, JPEG и Y4M в AVIF, декодировать AVIF обратно, анализировать файлы, управлять качеством цвета и альфа-канала, выбирать скорость, кодек, YUV-формат, битность, диапазон, метаданные, progressive/layered-режимы, sequences и grid-сценарии.

Для новичка без опыта терминала Libavif может показаться неудобной. В ней нет графического окна, кнопок, предпросмотра и визуальной очереди. Но для разработчика, администратора, веб-специалиста или человека, который регулярно готовит изображения, это преимущество: команда фиксируется один раз и дальше работает одинаково.

Libavif стоит использовать, если нужны:

  • AVIF-конвертер командной строки;

  • avifenc для точного кодирования;

  • avifdec для декодирования и проверки;

  • библиотека AVIF для приложения;

  • пакетная обработка;

  • контроль прозрачности;

  • настройка качества AVIF;

  • работа с JPEG, PNG и Y4M;

  • автоматизация подготовки изображений.

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