Libavif: программа для работы с AVIF
Libavif — это инструмент для работы с изображениями AVIF, рассчитанный на точное кодирование, декодирование, проверку и автоматизацию обработки файлов. Программа не похожа на привычный графический редактор с кнопками Открыть, Сохранить и Экспорт. Ее рабочая среда — командная строка, а главные элементы интерфейса — утилиты avifenc и avifdec, параметры запуска, числовые настройки качества, глубины цвета, цветового пространства, альфа-канала и метаданных.
Скачать Libavif
Для обработки изображений
Такой формат делает Libavif особенно полезной там, где важны не ручные клики, а воспроизводимый результат: подготовка изображений для сайта, сборка ассетов для веб-приложения, автоматическая конвертация PNG и JPEG в AVIF, тестирование качества сжатия, пакетная обработка больших каталогов, проверка AVIF-файлов перед публикацией. Это не универсальный фоторедактор и не программа для ретуши. Libavif решает более узкую, но важную задачу: создает и читает файлы AVIF с большим набором настроек, которые редко доступны в простых онлайн-конвертерах.
Главная утилита для создания AVIF называется avifenc. Она принимает исходное изображение JPEG, PNG или Y4M и записывает файл .avif. Вторая ключевая утилита — avifdec. Она делает обратную операцию: читает AVIF и сохраняет результат в PNG, JPEG или Y4M, а также показывает техническую информацию о файле через режим --info. Вместе они образуют небольшой, но гибкий набор инструментов: avifenc отвечает за сжатие и кодирование, avifdec — за декодирование, проверку и диагностику.
Libavif стоит рассматривать не как еще один конвертер картинок, а как рабочий инструмент для тех, кому нужно управлять AVIF на уровне параметров. Здесь можно отдельно задавать качество цветовых каналов и прозрачности, выбирать скорость кодирования, включать многопоточность, настраивать YUV-формат, сохранять или отбрасывать Exif/XMP/ICC, создавать AVIF без потерь, задавать целевой размер файла, работать с прогрессивными и многослойными изображениями. Именно из-за этой точности Libavif часто оказывается удобнее простых веб-сервисов, когда AVIF нужно встроить в постоянный рабочий процесс.
Содержание
- 1 Назначение Libavif
- 2 Установка Libavif на Windows, macOS и Linux
- 3 Интерфейс Libavif: как выглядит работа без GUI
- 4 Быстрая конвертация JPEG и PNG в AVIF
- 5 Декодирование AVIF обратно в PNG или JPEG
- 6 Настройка качества, скорости и размера файла
- 7 Работа с прозрачностью, глубиной цвета и YUV-форматами
- 8 Метаданные, ICC, Exif и XMP
- 9 Дополнительные возможности: progressive, layered, grid, sequences
- 10 Практический сценарий: подготовка изображений для сайта
- 11 Практический сценарий: AVIF без потерь
- 12 Практический сценарий: пакетная обработка
- 13 Производительность и качество сжатия
- 14 Ограничения Libavif
- 15 Для кого подходит Libavif
- 16 Сравнение с аналогами
- 17 Плюсы и минусы
- 18 Итоговая оценка
- 19 Рекомендуемые стартовые настройки
Назначение Libavif
Основное назначение Libavif — кодирование и декодирование AVIF-изображений. AVIF основан на AV1 Image File Format и используется для сильного сжатия фотографий, интерфейсной графики, изображений с прозрачностью, высокобитных файлов и графики для веба. Libavif дает прямой доступ к этому формату через библиотеку и консольные приложения.
В повседневной работе Libavif используют для нескольких типовых задач. Самая частая — конвертация JPEG или PNG в AVIF для сайта. Например, есть исходная фотография photo.jpg; ее можно сжать в photo.avif с заданным качеством, получить меньший файл и затем использовать в HTML-разметке через <picture> или CDN-пайплайн. Вторая частая задача — обработка PNG с прозрачностью. Для иконок, скриншотов интерфейса и элементов дизайна важно не потерять альфа-канал, и Libavif позволяет отдельно управлять качеством прозрачности через --qalpha.
Еще один сценарий — обратная конвертация AVIF в PNG или JPEG. Это нужно для проверки результата, сравнения качества, совместимости с программами, которые не умеют открывать AVIF, или для извлечения кадров из уже готовых AVIF-файлов. Утилита avifdec хорошо подходит именно для такой диагностики: она не только сохраняет изображение, но и показывает параметры файла, если запустить ее с --info.
Libavif полезна и как библиотека. Разработчик может встроить поддержку AVIF в приложение, серверный обработчик изображений, CMS-модуль, графический просмотрщик или собственный конвертер. В этом случае avifenc и avifdec остаются удобными тестовыми инструментами: сначала можно подобрать параметры в терминале, затем перенести ту же логику в код.
Важная особенность программы — ориентация на воспроизводимость. Если пользователь один раз подобрал команду:
avifenc --qcolor 72 --qalpha 90 --speed 6 --jobs all input.png output.avif
ее можно сохранить в скрипте, добавить в CI/CD, применить ко всему каталогу или запускать при сборке сайта. В графическом редакторе такие действия обычно требуют ручного экспорта и запоминания настроек. В Libavif весь процесс описан строкой команды.
Установка Libavif на Windows, macOS и Linux
Libavif доступна на основных настольных и серверных платформах. После установки пользователь получает как минимум две основные команды: avifenc для кодирования и avifdec для декодирования. В некоторых сборках дополнительно присутствуют вспомогательные утилиты, например avifgainmaputil, но для обычной конвертации изображений достаточно avifenc и avifdec.
На Windows Libavif удобно устанавливать через готовые сборки из раздела релизов или через менеджер пакетов vcpkg. Вариант с vcpkg подходит разработчикам C/C++ и тем, кто собирает проект с зависимостями. Команда выглядит так:
vcpkg install libavif
После установки важно убедиться, что путь к исполняемым файлам добавлен в PATH. Если система не находит avifenc, нужно либо запускать команду из папки, где лежит avifenc.exe, либо добавить эту папку в переменные среды Windows. Для проверки используется команда:
avifenc --version
На macOS самый удобный способ — Homebrew:
brew install libavif
После установки команды становятся доступны прямо в Terminal. Проверка выполняется так:
avifenc --versionavifdec --version
На Linux установка зависит от дистрибутива. В Debian и Ubuntu часто используются пакеты libavif-bin и libavif-dev. Первый нужен обычному пользователю, которому требуются утилиты avifenc и avifdec. Второй нужен разработчику, который хочет подключать Libavif как библиотеку при сборке программ.
Для установки утилит в Debian/Ubuntu используется команда:
sudo apt install libavif-bin
Для разработки дополнительно устанавливают:
sudo apt install libavif-dev
В Fedora, RHEL-подобных системах и других дистрибутивах названия пакетов могут отличаться, но логика та же: нужен пакет библиотеки и пакет командных утилит. После установки всегда стоит выполнить:
which avifencwhich avifdecavifenc --versionavifdec --version
Если команды выводят путь и версию, установка завершена корректно.
Сборка из исходников нужна в тех случаях, когда требуется свежая версия, конкретный набор кодеков, нестандартные флаги CMake или интеграция в собственный продукт. Для сборки приложений командной строки важен параметр AVIF_BUILD_APPS=ON. Типовой процесс выглядит так:
git clone libavifcmake -S . -B build -DAVIF_BUILD_APPS=ON -DCMAKE_BUILD_TYPE=Releasecmake --build build
После сборки исполняемые файлы обычно находятся внутри каталога build. Их можно запускать напрямую или установить в системный путь. Для обычной конвертации чаще достаточно пакетного менеджера, но сборка из исходников дает максимальный контроль над тем, какие кодеки и дополнительные возможности будут включены.
Интерфейс Libavif: как выглядит работа без GUI
У Libavif нет графического окна, панели инструментов, меню Файл, превью до/после и кнопки Export. Интерфейс программы — это командная строка. Все настройки указываются в виде параметров: --qcolor, --qalpha, --speed, --jobs, --lossless, --yuv, --depth, --codec, --target-size, --ignore-exif, --icc и так далее.
Такой интерфейс сначала кажется менее дружелюбным, чем окно обычного конвертера, но он дает важное преимущество: каждая настройка фиксируется точно. Пользователь не просто примерно выставляет качество ползунком, а явно указывает значение. Например:
avifenc --qcolor 75 --qalpha 90 --speed 6 input.png output.avif
В этой команде видно все: цвет кодируется с качеством 75, альфа-канал — с качеством 90, скорость кодирования — 6, входной файл — input.png, результат — output.avif.
Главные команды Libavif:
| Команда | Назначение |
|---|---|
avifenc |
Кодирует JPEG, PNG или Y4M в AVIF |
avifdec |
Декодирует AVIF в PNG, JPEG или Y4M |
avifenc --help |
Показывает справку по параметрам кодировщика |
avifdec --help |
Показывает справку по параметрам декодировщика |
avifenc --version |
Показывает версию кодировщика и доступные кодеки |
avifdec --version |
Показывает версию декодировщика и доступные декодеры |
avifdec --info file.avif |
Выводит сведения о структуре и параметрах AVIF-файла |
В практическом смысле avifenc --help заменяет окно настроек. Именно там перечислены доступные параметры: качество, скорость, потоковая обработка, YUV-формат, глубина цвета, метаданные, цветовые профили, прогрессивное кодирование, сетка, последовательности кадров. Если пользователь работает с Libavif регулярно, он обычно запоминает 10–15 основных параметров, а к справке обращается для редких режимов.
Пример минимального интерфейса Libavif:
avifenc -q 75 input.jpg output.avif
Команда короткая, но в ней уже есть все необходимое: программа, настройка качества, входной файл и выходной файл. В графическом редакторе аналогичная операция потребовала бы открыть изображение, выбрать экспорт, указать формат, подобрать качество, выбрать папку и нажать кнопку сохранения. В Libavif все это делается одной строкой.
Быстрая конвертация JPEG и PNG в AVIF
Базовая конвертация в Libavif строится вокруг avifenc. Самый простой вариант для JPEG выглядит так:
avifenc -q 75 input.jpg output.avif
Для PNG команда такая же:
avifenc -q 80 input.png output.avif
Параметр -q — короткая форма для настройки качества цвета. В полной форме он записывается как --qcolor. Значение задается в диапазоне от 0 до 100, где 100 означает максимально высокое качество для цветовой части. На практике для фотографий часто начинают с диапазона 60–80. Значение 75 обычно дает хороший баланс между размером файла и визуальным качеством, особенно если исходник — обычная фотография для сайта.
Для интерфейсной графики и скриншотов лучше быть осторожнее. Там много резких линий, текста, однотонных областей и контрастных границ. Если поставить качество слишком низко, вокруг букв и тонких линий могут появиться заметные артефакты. В таких случаях можно начинать с --qcolor 85 или использовать lossless-режим, если размер файла не критичен.
Пример для фотографии:
avifenc --qcolor 72 --speed 6 photo.jpg photo.avif
Пример для скриншота интерфейса:
avifenc --qcolor 88 --speed 6 screenshot.png screenshot.avif
Пример для PNG с прозрачностью:
avifenc --qcolor 82 --qalpha 95 icon.png icon.avif
Здесь --qalpha 95 отдельно задает качество альфа-канала. Это важно, потому что прозрачность в AVIF кодируется отдельно от цветовых данных. Если поставить низкое качество прозрачности, края иконок, логотипов или UI-элементов могут выглядеть неровно.
При кодировании Libavif выводит в терминал техническую информацию: разрешение, битовую глубину, формат YUV, наличие альфа-канала, цветовые характеристики, профиль ICC, Exif, XMP, выбранный кодек, скорость, количество потоков, итоговый размер AV1-потока и факт записи файла. Это удобно для диагностики: сразу видно, что именно программа получила на входе и что записала на выходе.
Типовой вывод после кодирования выглядит примерно так:
Successfully loaded: input.pngAVIF to be written: (Lossy) * Resolution : 1920x1080 * Bit Depth : 8 * Format : YUV444 * Alpha : Not premultiplied * ICC Profile : PresentEncoding with AV1 codec 'aom' speed [6], please wait...Encoded successfully.Wrote AVIF: output.avif
Если файл не создался, Libavif обычно явно сообщает причину: неверный путь, неподдерживаемый формат входа, невозможность перезаписать файл, конфликт параметров или проблема с кодеком. В отличие от многих простых конвертеров, программа не скрывает техническую сторону процесса.
Это изображение удобно показывает сценарий, где важны резкие черные буквы, полупрозрачный фон и корректная работа с альфа-каналом. Для такой графики не стоит использовать слишком низкое качество и YUV 420 без проверки, потому что текст и края символов сразу покажут проблемы кодирования.
Декодирование AVIF обратно в PNG или JPEG
Обратная операция выполняется через avifdec. Если нужно получить PNG, команда выглядит так:
avifdec input.avif output.png
Если нужен JPEG:
avifdec input.avif output.jpg
PNG подходит для проверки качества без дополнительной потери из-за JPEG-сжатия. Если пользователь хочет оценить, как Libavif сохранила линии, текст, прозрачность или мелкие детали, лучше декодировать в PNG. JPEG уместен, когда нужен совместимый файл для старой программы, которая не открывает AVIF, и прозрачность не требуется.
Для диагностики особенно полезен режим --info:
avifdec --info input.avif
Он не просто открывает изображение, а выводит сведения о файле: размеры, глубину цвета, пиксельный формат, количество кадров, наличие альфа-канала, цветовые параметры, метаданные и другие характеристики. Такой режим нужен, когда AVIF-файл ведет себя неожиданно: не открывается в браузере, неправильно отображается в просмотрщике, выглядит слишком темным, потерял прозрачность или оказался значительно больше ожидаемого.
У avifdec есть собственные параметры. Например, для JPEG-вывода используется --quality, а для PNG — --png-compress. Если AVIF содержит последовательность кадров или прогрессивное изображение, можно выбрать конкретный индекс через --index. Для некоторых файлов важна настройка --upsampling, которая влияет на восстановление цветоразностных каналов при декодировании YUV 420 или YUV 422.
Пример декодирования с качеством JPEG:
avifdec --quality 92 input.avif output.jpg
Пример вывода PNG с заданным уровнем сжатия:
avifdec --png-compress 9 input.avif output.png
Пример просмотра информации:
avifdec --info output.avif
В рабочем процессе avifdec часто используют не как самостоятельный конвертер, а как проверочный инструмент. Сначала изображение кодируется через avifenc, затем декодируется обратно, после чего результат сравнивается с исходником. Это помогает подобрать качество до массовой обработки.
На такой паре удобно проверять базовую логику avifenc и avifdec: исходный PNG кодируется в AVIF, затем AVIF декодируется обратно и сравнивается с исходником. Если буквы, фон и прозрачность выглядят корректно, выбранные параметры подходят для похожей интерфейсной графики.
Настройка качества, скорости и размера файла
Главная причина использовать Libavif вместо простого конвертера — точная настройка параметров. Здесь можно контролировать не только итоговое качество, но и скорость кодирования, работу с потоками, прозрачность, целевой размер, битовую глубину и дополнительные свойства контейнера.
Ключевой параметр для обычного пользователя — --qcolor:
avifenc --qcolor 75 input.jpg output.avif
Он задает качество цветовой части изображения. Чем выше значение, тем больше данных сохраняется и тем крупнее итоговый файл. Чем ниже значение, тем сильнее сжатие и тем выше риск видимых артефактов. Для фотографий значения 65–80 часто оказываются рабочими. Для изображений с текстом, схемами и тонкими линиями обычно нужны значения выше.
Второй важный параметр — --qalpha:
avifenc --qcolor 80 --qalpha 95 input.png output.avif
Он отвечает за качество альфа-канала. Для файлов без прозрачности этот параметр не играет роли. Для логотипов, иконок, UI-элементов и изображений с полупрозрачными краями он критичен. Если прозрачность испортится, изображение может выглядеть хуже даже при хорошем качестве цвета: появятся грубые края, ступеньки или грязный ореол вокруг объекта.
Скорость кодирования задается параметром --speed или коротко -s:
avifenc --qcolor 75 --speed 6 input.jpg output.avif
Диапазон — от 0 до 10. Значение 0 — самый медленный режим, значение 10 — самый быстрый. Быстрый режим удобен для предварительного просмотра и пакетной обработки, когда идеальное качество не требуется. Медленные режимы подходят для финальных изображений, где важен каждый килобайт и визуальный результат.
На практике разумно использовать такой подход:
| Сценарий | Пример настройки |
|---|---|
| Быстрый тест | --speed 8 --qcolor 70 |
| Обычная публикация на сайте | --speed 6 --qcolor 72 |
| Более тщательное финальное сжатие | --speed 4 --qcolor 75 |
| Максимально внимательное кодирование | --speed 0 --qcolor 75 |
| Иконка с прозрачностью | --qcolor 85 --qalpha 95 |
| PNG без потерь | --lossless |
Для многопоточности используется --jobs:
avifenc --qcolor 75 --speed 6 --jobs all input.jpg output.avif
Значение all позволяет задействовать доступные ядра. Это особенно полезно при пакетной обработке или при кодировании крупных изображений. Для серверной среды иногда лучше задавать конкретное число потоков, чтобы не перегружать машину:
avifenc --qcolor 75 --speed 6 --jobs 4 input.jpg output.avif
Если важен не только визуальный баланс, но и конкретный размер файла, используется --target-size:
avifenc --target-size 120000 input.jpg output.avif
Этот параметр задает целевой размер в байтах. Он полезен, когда изображение должно уложиться в ограничение CMS, CDN, мобильного приложения или рекламной платформы. Но такой режим может быть заметно медленнее, потому что кодировщику нужно подобрать параметры под заданную цель.
Для сжатия без потерь используется --lossless:
avifenc --lossless input.png output.avif
Этот режим нужен не всегда. Для фотографий lossless часто дает слишком крупный файл. Зато для схем, иконок, пиксельной графики, скриншотов с текстом и архивного хранения он может быть полезен. В lossless-режиме пользователь получает AVIF без потерь относительно исходных данных, если входной формат и настройки позволяют корректно выполнить такую операцию.
Настройка качества в Libavif требует небольшого тестирования. Нельзя назвать одно универсальное значение для всех изображений. Фотографии природы, скриншоты интерфейса, иконки, портреты, текстуры и диаграммы реагируют на AVIF-сжатие по-разному. Поэтому хороший рабочий метод — закодировать несколько вариантов, декодировать их через avifdec, сравнить визуально и выбрать команду, которая дает приемлемый размер без заметных потерь.
Работа с прозрачностью, глубиной цвета и YUV-форматами
Libavif хорошо подходит для изображений, где важны не только размер и качество, но и технические свойства: прозрачность, битовая глубина, цветовое пространство и способ представления цветоразностных каналов. Эти параметры особенно важны при подготовке ассетов для интерфейсов, веб-графики, HDR-пайплайнов и изображений с широким цветовым охватом.
Альфа-канал управляется несколькими способами. Если исходный PNG содержит прозрачность, Libavif сохраняет ее по умолчанию. Качество прозрачности задается через --qalpha:
avifenc --qcolor 82 --qalpha 95 button.png button.avif
Если прозрачность не нужна, ее можно отбросить:
avifenc --ignore-alpha input.png output.avif
Это полезно, когда PNG случайно содержит альфа-канал, но фактически изображение непрозрачное. Удаление альфа-канала уменьшает сложность файла и иногда снижает размер результата. Но для логотипов, иконок и UI-элементов применять --ignore-alpha нельзя без проверки: объект может потерять прозрачный фон.
Для некоторых сценариев используется --premultiply:
avifenc --premultiply input.png output.avif
Этот параметр предварительно умножает цвет на альфа-канал и сигнализирует это в AVIF. Он нужен не каждому пользователю, но может быть важен в графических конвейерах, где изображение затем композитится поверх разных фонов.
Глубина цвета задается через --depth:
avifenc --depth 10 input.png output.avif
Libavif поддерживает 8, 10 и 12 бит на канал для обычного кодирования. Более высокая глубина полезна для изображений с плавными градиентами, HDR-материалами, профессиональной графикой и обработкой, где нужно снизить риск полосатости на переходах. Для обычных веб-фотографий 8 бит часто достаточно, но если исходник имеет 10 или 12 бит и требуется сохранить больше тональной информации, --depth становится важной настройкой.
YUV-формат задается через --yuv или коротко -y:
avifenc --yuv 420 input.jpg output.avifavifenc --yuv 444 input.png output.avif
Доступные варианты: auto, 444, 422, 420, 400. Для фотографий часто применяют YUV 420, потому что человеческое зрение менее чувствительно к цветовой детализации, чем к яркостной. Это позволяет уменьшить размер файла. Для скриншотов интерфейса, текста и графики с резкими цветными границами лучше использовать YUV 444, чтобы не получить цветовые размывания около букв и тонких элементов.
Практическая логика такая:
| Тип изображения | Предпочтительный вариант |
|---|---|
| Фотография для сайта | --yuv 420 или auto |
| Скриншот интерфейса | --yuv 444 |
| Иконка с прозрачностью | --yuv 444 --qalpha 95 |
| Черно-белое изображение | --yuv 400 |
| Видео-кадр из Y4M | сохранить формат входа |
Цветовой диапазон задается через --range:
avifenc --range full input.png output.avifavifenc --range limited input.jpg output.avif
Для JPEG и PNG по умолчанию обычно используется full range. Limited range чаще встречается в видеопайплайнах. Если пользователь готовит обычные изображения для сайта, чаще всего не нужно менять --range. Но при обработке кадров из видео, Y4M и HDR-материалов этот параметр может быть важен.
Для конвертации RGB в YUV 420 есть параметр --sharpyuv:
avifenc --yuv 420 --sharpyuv input.png output.avif
Он помогает получить более аккуратное преобразование при переходе к YUV 420, если сборка поддерживает такую возможность. Для скриншотов и графики с четкими границами лучше сначала попробовать --yuv 444, но для фотографий --sharpyuv может быть полезным компромиссом.
Метаданные, ICC, Exif и XMP
Libavif умеет работать с метаданными и цветовыми профилями. Это важная часть обзора, потому что при подготовке изображений для сайта часто требуется выбрать: сохранить информацию о цвете и съемке или удалить ее ради меньшего размера и приватности.
Ключевые параметры:
| Параметр | Назначение |
|---|---|
--exif FILENAME |
Добавляет Exif-метаданные из файла |
--xmp FILENAME |
Добавляет XMP-метаданные из файла |
--icc FILENAME |
Добавляет ICC-профиль из файла |
--ignore-exif |
Игнорирует Exif из входного файла |
--ignore-xmp |
Игнорирует XMP из входного файла |
--ignore-profile |
Игнорирует цветовой профиль |
--ignore-icc |
Альтернативное имя для игнорирования ICC-профиля |
Exif может содержать модель камеры, параметры съемки, дату, иногда координаты. XMP часто используется в рабочих процессах Adobe и других графических приложений. ICC-профиль описывает цветовое пространство изображения и помогает корректно отображать цвета.
Для веб-публикации часто используют очистку метаданных:
avifenc --ignore-exif --ignore-xmp input.jpg output.avif
Если нужно дополнительно убрать цветовой профиль:
avifenc --ignore-exif --ignore-xmp --ignore-profile input.jpg output.avif
Такой подход уменьшает размер файла и удаляет лишнюю информацию. Но с ICC-профилем нужно быть аккуратным. Если исходник находится в нестандартном цветовом пространстве, удаление профиля может изменить отображение цветов в программах и браузерах. Для обычных sRGB-изображений удаление профиля часто проходит без заметных проблем, но для профессиональной графики лучше сначала проверить результат.
Добавление конкретного ICC-профиля выполняется так:
avifenc --icc profile.icc input.png output.avif
Добавление Exif и XMP:
avifenc --exif metadata.exif --xmp metadata.xmp input.jpg output.avif
В большинстве бытовых сценариев пользователь не добавляет метаданные вручную, а либо сохраняет то, что уже есть во входном файле, либо удаляет лишнее. В профессиональном пайплайне ручное добавление ICC, Exif и XMP может быть частью автоматической обработки.
Такой тип файла хорошо подходит для проверки параметров --ignore-exif, --ignore-xmp, --ignore-profile, --exif, --xmp и --icc. Если задача состоит в подготовке изображений для сайта, метаданные часто удаляют. Если задача связана с архивом, цветом или рабочим процессом фотографа, профиль и часть метаданных могут быть важны.
Дополнительные возможности: progressive, layered, grid, sequences
Libavif не ограничивается простой конвертацией одного JPEG в один AVIF. У avifenc есть продвинутые режимы, которые нужны для тестирования формата, сложных изображений и специальных сценариев.
Параметр --progressive включает кодирование простого многослойного изображения с поддержкой прогрессивного отображения:
avifenc --progressive input.jpg output.avif
Идея прогрессивного изображения в том, что декодер может показать упрощенную версию раньше, а затем уточнить результат. Для обычного пользователя это не обязательная функция, но для разработчиков просмотрщиков, браузеров, библиотек и тестовых наборов она важна.
Параметр --layered кодирует многослойный AVIF:
avifenc --layered layer1.png layer2.png output.avif
Каждый входной файл становится отдельным слоем. Такой режим нужен не для повседневной оптимизации фотографий, а для специальных случаев, где AVIF используется как контейнер для нескольких представлений изображения.
Параметр --grid создает AVIF-сетку:
avifenc --grid 2x2 tile1.png tile2.png tile3.png tile4.png output.avif
Либо можно передать одно изображение, которое делится на сетку, если оно соответствует ограничениям формата:
avifenc --grid 2x2 large.png large-grid.avif
Сетки полезны для очень крупных изображений и тестов совместимости. Обычному пользователю, который сжимает фотографии для статьи или карточек товаров, --grid почти никогда не нужен. Но наличие такой функции показывает, что Libavif работает не только как простой конвертер, а как полноценный инструмент для AVIF-контейнера.
Для последовательностей кадров используются параметры --timescale, --fps, --duration, --keyframe, --repetition-count. Пример:
avifenc --fps 12 frame01.png frame02.png frame03.png animation.avif
Такой сценарий нужен для AVIF-последовательностей. Это не замена полноценному видеокодированию, но полезный инструмент для тех, кто тестирует animated AVIF или готовит небольшие анимированные изображения.
Параметр --repetition-count задает число повторов:
avifenc --fps 12 --repetition-count infinite frame01.png frame02.png frame03.png loop.avif
Для одиночных статичных изображений эти параметры не требуются. Их стоит использовать только тогда, когда пользователь понимает, зачем нужна последовательность кадров, прогрессивность или многослойная структура.
Практический сценарий: подготовка изображений для сайта
Один из лучших сценариев для Libavif — подготовка изображений для сайта. AVIF часто дает заметно меньший размер по сравнению с JPEG и PNG при сопоставимом визуальном качестве, а Libavif позволяет подобрать параметры и затем применять их автоматически.
Представим, что есть исходная фотография hero.jpg, которую нужно подготовить для главного экрана сайта. Первый пробный вариант:
avifenc --qcolor 72 --speed 6 --jobs all hero.jpg hero.avif
После кодирования нужно посмотреть размер:
ls -lh hero.jpg hero.avif
Затем стоит декодировать результат для проверки:
avifdec hero.avif hero-check.png
Теперь можно открыть hero.jpg и hero-check.png в просмотрщике изображений и сравнить детали: небо, тени, волосы, текстуры, края объектов, плавные градиенты. Если качество хорошее, но файл можно сделать меньше, пробуем:
avifenc --qcolor 66 --speed 6 --jobs all hero.jpg hero-q66.avif
Если появились артефакты, возвращаемся выше:
avifenc --qcolor 76 --speed 6 --jobs all hero.jpg hero-q76.avif
Для набора фотографий на сайте можно использовать единый пресет:
avifenc --qcolor 72 --speed 6 --jobs all input.jpg output.avif
Но для скриншотов и интерфейсной графики лучше другой пресет:
avifenc --qcolor 86 --qalpha 95 --yuv 444 --speed 6 --jobs all input.png output.avif
Если на сайте используются PNG-иконки с прозрачностью, можно начать с:
avifenc --qcolor 85 --qalpha 100 --yuv 444 icon.png icon.avif
Для графики с текстом и тонкими линиями нельзя слепо использовать низкое качество. AVIF может сильно сжать файл, но текст должен оставаться читаемым. Поэтому для скриншотов админ-панелей, интерфейсов, таблиц и схем нужно проверять результат глазами.
В реальной работе удобно хранить несколько команд:
# Фото для статейavifenc --qcolor 72 --speed 6 --jobs all input.jpg output.avif# Скриншоты интерфейсаavifenc --qcolor 86 --yuv 444 --speed 6 --jobs all input.png output.avif# PNG с прозрачностьюavifenc --qcolor 84 --qalpha 96 --yuv 444 --speed 6 --jobs all input.png output.avif# Максимально аккуратная финальная обработкаavifenc --qcolor 76 --speed 4 --jobs all input.jpg output.avif
Такой подход превращает Libavif в стабильный рабочий инструмент. Команды можно вставить в скрипт, документацию проекта, сборщик сайта или задачу автоматической оптимизации.
Практический сценарий: AVIF без потерь
Lossless-режим в Libavif включается параметром --lossless:
avifenc --lossless input.png output.avif
Режим без потерь нужен не для всех изображений. Для фотографий он часто дает крупный файл, потому что фотография содержит много плавных переходов, шума, мелких деталей и полутонов. AVIF хорошо сжимает такие изображения с потерями, и визуально разница может быть минимальной. Но если включить lossless, размер может оказаться значительно выше.
Зато для интерфейсной графики, схем, пиксель-арта, технических изображений, скриншотов с мелким текстом и архивного хранения lossless-режим может быть правильным выбором. Он позволяет сохранить исходные данные без визуальных потерь и избежать артефактов вокруг линий.
Пример для схемы:
avifenc --lossless diagram.png diagram.avif
Пример для интерфейсного скриншота:
avifenc --lossless admin-panel.png admin-panel.avif
Пример для иконки:
avifenc --lossless icon.png icon.avif
Перед массовой обработкой стоит сравнить lossless-результат с вариантом высокого качества:
avifenc --lossless screenshot.png screenshot-lossless.avifavifenc --qcolor 90 --qalpha 100 --yuv 444 screenshot.png screenshot-q90.avifls -lh screenshot.png screenshot-lossless.avif screenshot-q90.avif
Если screenshot-q90.avif заметно меньше, а визуально не отличается, lossless может быть избыточным. Если же на изображении есть мелкий текст, тонкие линии и важная точность пикселей, лучше оставить --lossless.
Lossless-режим не делает Libavif графическим архиватором для любых данных. Он сохраняет изображение, но итоговый размер зависит от структуры картинки. Простая UI-графика может сжаться хорошо, а сложная фотография — не дать впечатляющей экономии. Поэтому этот режим стоит применять осознанно.
Практический сценарий: пакетная обработка
Libavif особенно удобна в пакетной обработке. В графическом интерфейсе массовая конвертация часто зависит от конкретной программы, ее шаблонов и очередей. В Libavif достаточно обычного shell-цикла или PowerShell-скрипта.
Пример для macOS/Linux: конвертировать все JPEG в текущей папке:
for f in *.jpg; do avifenc --qcolor 72 --speed 6 --jobs all "$f" "${f%.jpg}.avif"done
Для файлов .jpeg:
for f in *.jpeg; do avifenc --qcolor 72 --speed 6 --jobs all "$f" "${f%.jpeg}.avif"done
Для PNG:
for f in *.png; do avifenc --qcolor 84 --qalpha 96 --yuv 444 --speed 6 --jobs all "$f" "${f%.png}.avif"done
Если нужно не перезаписывать уже существующие AVIF-файлы, добавляется --no-overwrite:
for f in *.jpg; do avifenc --no-overwrite --qcolor 72 --speed 6 --jobs all "$f" "${f%.jpg}.avif"done
На Windows PowerShell аналогичный цикл выглядит так:
Get-ChildItem *.jpg | ForEach-Object { avifenc --qcolor 72 --speed 6 --jobs all $_.FullName ($_.BaseName + ".avif")}
Для PNG с прозрачностью:
Get-ChildItem *.png | ForEach-Object { avifenc --qcolor 84 --qalpha 96 --yuv 444 --speed 6 --jobs all $_.FullName ($_.BaseName + ".avif")}
Если нужно сохранить AVIF в отдельную папку, сначала создается каталог:
New-Item -ItemType Directory -Force avifGet-ChildItem *.jpg | ForEach-Object { avifenc --qcolor 72 --speed 6 --jobs all $_.FullName ("avif\" + $_.BaseName + ".avif")}
Для сайта часто удобно сделать две папки: original и avif. Тогда исходники остаются нетронутыми, а сжатые файлы хранятся отдельно. Это снижает риск случайно удалить или заменить оригиналы.
В пакетной обработке нужно помнить о нагрузке. Параметр --jobs all хорош на рабочей станции, но на сервере может занять слишком много CPU. Если Libavif запускается внутри автоматической сборки или на VPS, лучше задать ограничение:
avifenc --qcolor 72 --speed 6 --jobs 2 input.jpg output.avif
Для большой коллекции изображений можно сначала протестировать 10–20 файлов, подобрать параметры и только потом запускать обработку всего каталога. Это особенно важно, если в одной папке смешаны фотографии, скриншоты, иконки и иллюстрации: один пресет может подходить не для всех типов графики.
Производительность и качество сжатия
Libavif ценят за гибкость и качество, но AVIF-кодирование не всегда быстрое. Формат основан на технологиях AV1, а они сложнее, чем традиционный JPEG. Поэтому кодирование с низким значением --speed может занимать заметное время, особенно на крупных изображениях.
В настройках производительности есть три главных рычага:
-
--speed; -
--jobs; -
выбор кодека через
--codec.
--speed определяет компромисс между временем обработки и эффективностью кодирования. --jobs управляет количеством потоков. --codec позволяет выбрать доступный кодировщик, если сборка Libavif содержит несколько вариантов.
Пример с автоматическим выбором кодека:
avifenc --qcolor 75 --speed 6 input.jpg output.avif
Пример с явным выбором AOM:
avifenc --codec aom --qcolor 75 --speed 6 input.jpg output.avif
Пример с rav1e:
avifenc --codec rav1e --qcolor 75 --speed 6 input.jpg output.avif
Пример с SVT:
avifenc --codec svt --qcolor 75 --speed 6 input.jpg output.avif
Конкретный список доступных кодеков зависит от сборки. Его можно посмотреть через:
avifenc --versionavifenc --help
Для большинства пользователей лучше оставить автоматический выбор кодека. Явный выбор нужен при тестировании, сравнении производительности, сборке собственного пайплайна или поиске оптимального результата для конкретного набора изображений.
Качество AVIF сильно зависит от типа изображения. На фотографиях формат обычно показывает себя хорошо: небо, кожа, тени, зелень и сложные текстуры могут сохраняться при меньшем размере файла. На скриншотах и графике с текстом настройки нужно подбирать внимательнее. Если использовать YUV 420 и низкое качество, цветные края текста могут стать размытыми. Для таких изображений лучше --yuv 444 и более высокое --qcolor.
Хорошая практика — не гнаться за минимальным размером любой ценой. В веб-оптимизации важно, чтобы изображение было не только легким, но и визуально приемлемым. Если фотография в 120 КБ выглядит хуже, чем вариант в 160 КБ, экономия 40 КБ может быть неоправданной. Libavif дает возможность быстро создать несколько вариантов и выбрать лучший.
Для оценки можно использовать простой набор команд:
avifenc --qcolor 60 --speed 6 input.jpg q60.avifavifenc --qcolor 70 --speed 6 input.jpg q70.avifavifenc --qcolor 80 --speed 6 input.jpg q80.avifavifdec q60.avif q60.pngavifdec q70.avif q70.pngavifdec q80.avif q80.pngls -lh input.jpg q60.avif q70.avif q80.avif
После этого пользователь открывает q60.png, q70.png, q80.png и сравнивает визуально. Такой метод прост, но эффективен. Он позволяет подобрать настройки не абстрактно, а на собственных изображениях.
Ограничения Libavif
Libavif — мощный инструмент, но не универсальное решение для всех задач с изображениями. Ее главное ограничение — отсутствие графического интерфейса. Пользователь не видит предпросмотр, не двигает ползунок качества, не сравнивает изображение до/после в одном окне. Все делается через команды, а результат нужно открывать отдельно.
Второе ограничение — Libavif не редактирует изображения в привычном смысле. В ней нельзя обрезать фотографию мышью, удалить фон, ретушировать кожу, добавить текст, нарисовать стрелку, настроить кривые, применить фильтр или собрать коллаж. Это инструмент кодирования и декодирования AVIF, а не редактор графики.
Третье ограничение — сложность параметров. Новичку не всегда понятно, чем --qcolor отличается от --qalpha, когда нужен --yuv 420, почему --speed 0 не всегда лучший выбор, зачем нужен --range, что делает --depth, когда сохранять ICC-профиль и почему --target-size может быть медленным. Для простого разового преобразования веб-сервис может быть быстрее и понятнее.
Четвертое ограничение связано с совместимостью. AVIF поддерживается многими современными браузерами и программами, но не везде одинаково. Некоторые старые просмотрщики, CMS-модули или редакторы могут не открывать .avif. Libavif помогает создать корректный файл, но не решает проблему поддержки в стороннем ПО.
Пятое ограничение — скорость. Кодирование AVIF может быть медленнее JPEG и WebP, особенно на больших изображениях и при низком --speed. При ручной обработке нескольких файлов это не проблема. При обработке десятков тысяч изображений уже нужно планировать нагрузку, многопоточность и время выполнения.
Шестое ограничение — зависимость возможностей от сборки. Доступные кодеки, поддержка отдельных функций и поведение некоторых параметров могут отличаться в зависимости от того, как собрана Libavif. Поэтому на одной системе команда с --codec svt может работать, а на другой — нет, если соответствующий кодек не включен.
Для кого подходит Libavif
Libavif лучше всего подходит пользователям, которым нужен контроль над AVIF, а не просто кнопка сжать картинку. Это инструмент для разработчиков сайтов, администраторов, DevOps-специалистов, создателей графических пайплайнов, разработчиков приложений, технических редакторов и людей, которые регулярно готовят изображения для публикации.
Разработчику сайта Libavif дает способ встроить AVIF в сборку проекта. Например, исходники лежат в src/images, а при сборке создаются .avif-версии для продакшена. Это можно подключить к npm-скрипту, Makefile, GitHub Actions, CI/CD или локальному shell-скрипту.
Администратору сайта Libavif полезна для массовой оптимизации медиабиблиотеки. Можно пройтись по папке с изображениями, создать AVIF-копии, сравнить размеры, оставить оригиналы и добавить AVIF как альтернативный формат.
Разработчику приложения Libavif нужна как библиотека. Если программа должна читать или сохранять AVIF, можно интегрировать библиотеку напрямую. CLI-утилиты при этом помогают тестировать отдельные файлы и параметры.
Специалисту по оптимизации графики Libavif дает точный контроль: отдельно качество цвета, отдельно качество альфы, YUV-формат, глубина, скорость, целевой размер, метаданные. Это важнее, чем красивый интерфейс.
Обычному пользователю Libavif подойдет, если он не боится терминала и хочет получить качественный AVIF-результат. Если же нужно просто один раз загрузить картинку и нажать Convert, лучше выбрать Squoosh, XnConvert, ImageMagick с готовым скриптом или другой инструмент с более привычным интерфейсом.
Сравнение с аналогами
Libavif конкурирует не с фоторедакторами, а с инструментами, которые умеют кодировать, декодировать или конвертировать изображения в современные форматы. Ее сильная сторона — точная работа с AVIF и удобство автоматизации.
| Программа | Как работает | Где удобнее Libavif | Где удобнее аналог |
|---|---|---|---|
| ImageMagick | Универсальный CLI-набор для конвертации и обработки изображений | Когда нужен прямой контроль параметров AVIF через avifenc |
Когда кроме AVIF нужны resize, crop, watermark, composite, массовые графические операции |
| FFmpeg | Мультимедийный комбайн для видео, аудио и кадров | Когда задача — одиночные JPEG/PNG/Y4M в AVIF с точной настройкой | Когда изображения идут из видео, последовательностей кадров или сложного мультимедиа-пайплайна |
| Squoosh | Веб-интерфейс для визуального сравнения форматов | Когда нужна автоматизация, локальная обработка и повторяемые команды | Когда новичку нужен предпросмотр и ручное сравнение качества |
| cavif | Узкоспециализированный AVIF-кодировщик | Когда нужна библиотека C, avifdec, продвинутые параметры контейнера и широкая настройка |
Когда нужен простой отдельный AVIF-кодировщик без широкой инфраструктуры |
| libheif / heif-enc | Библиотека и утилиты для HEIF/AVIF-сценариев | Когда основной формат — именно AVIF и нужны avifenc/avifdec |
Когда в проекте важны HEIF/HEIC-сценарии и контейнеры Apple-экосистемы |
| XnConvert | Графический пакетный конвертер | Когда нужна CLI-автоматизация и точный контроль AVIF-параметров | Когда пользователь хочет окно, список файлов, пресеты и визуальные действия |
| cwebp | Кодировщик WebP | Когда нужен AVIF и более современное сжатие для ряда сценариев | Когда проект ориентирован на WebP или нужна максимальная совместимость со старыми цепочками |
ImageMagick удобен, когда нужно не только перекодировать, но и изменить изображение: уменьшить размер, обрезать, добавить водяной знак, объединить слои, обработать сотни файлов разными фильтрами. Libavif в таких задачах не заменяет ImageMagick. Зато если нужна именно AVIF-конвертация с параметрами --qcolor, --qalpha, --speed, --yuv, --depth, --target-size, --progressive, Libavif выглядит точнее и прямее.
FFmpeg хорош для видео и последовательностей кадров. Если AVIF создается из видеопотока, кадров анимации или мультимедийного пайплайна, FFmpeg может быть удобнее. Но для одиночного PNG или JPEG команда avifenc проще и прозрачнее.
Squoosh выигрывает визуальностью. Пользователь видит картинку, двигает ползунок, сравнивает результат, скачивает файл. Но Squoosh хуже подходит для массовой обработки, серверной автоматизации и точного воспроизведения результата в скриптах. Libavif не показывает картинку, зато идеально описывает процесс командой.
cavif ближе к Libavif по назначению, но Libavif шире как проект: есть библиотека, кодировщик, декодировщик, работа с метаданными, дополнительные функции AVIF-контейнера, системные пакеты и интеграция в другие проекты. Если нужен не просто сделать AVIF, а построить рабочий процесс вокруг формата, Libavif предпочтительнее.
XnConvert удобен пользователям, которые не хотят терминал. Там можно выбрать папку, формат, действия, параметры экспорта. Но у GUI-инструментов обычно меньше низкоуровневого контроля над AVIF, и их сложнее встроить в автоматическую сборку сайта. Libavif выигрывает там, где важны скрипты, воспроизводимость и техническая точность.
Плюсы и минусы
Libavif сильна именно как специализированный инструмент для AVIF. Она не пытается заменить редактор, просмотрщик или пакетный графический комбайн. Ее преимущество — точное кодирование и декодирование формата.
Плюсы:
-
есть отдельные утилиты
avifencиavifdec; -
поддерживается кодирование JPEG, PNG и Y4M в AVIF;
-
поддерживается декодирование AVIF в PNG, JPEG и Y4M;
-
можно отдельно управлять качеством цвета и альфа-канала;
-
есть режим
--lossless; -
есть настройка скорости
--speed; -
есть многопоточность через
--jobs; -
поддерживаются YUV 444, 422, 420 и 400;
-
можно задавать глубину через
--depth; -
можно сохранять или удалять Exif, XMP и ICC;
-
есть
--target-sizeдля подбора размера; -
поддерживаются прогрессивные, многослойные и grid-сценарии;
-
удобно использовать в скриптах и автоматической сборке;
-
подходит разработчикам и администраторам сайтов;
-
доступна на Windows, macOS и Linux.
Минусы:
-
нет графического интерфейса;
-
нет встроенного предпросмотра результата;
-
нужно понимать командную строку;
-
параметры могут быть сложными для новичка;
-
не выполняет редактирование изображений;
-
кодирование AVIF может быть медленным;
-
часть возможностей зависит от сборки и доступных кодеков;
-
для единичной ручной конвертации веб-интерфейс может быть проще.
Главный минус Libavif одновременно является ее сильной стороной. Программа не пытается быть простой для всех. Она рассчитана на пользователя, который хочет контролировать процесс. Если нужен быстрый визуальный экспорт, лучше взять GUI-инструмент. Если нужен надежный AVIF-пайплайн, Libavif оказывается гораздо удобнее.
Итоговая оценка
Libavif — один из самых точных и практичных инструментов для работы с AVIF. Она подходит не для художественного редактирования, а для технически аккуратного кодирования, декодирования и проверки изображений. В центре программы находятся две утилиты: avifenc и avifdec. Первая создает AVIF, вторая читает AVIF и помогает проверять результат.
Сильнее всего Libavif раскрывается в автоматизации. Одна подобранная команда может применяться к сотням изображений, использоваться в сборке сайта, запускаться на сервере, встраиваться в скрипт оптимизации или служить эталонным пресетом для команды. Это делает программу особенно ценной для веб-разработки, медиабиблиотек, CDN-подготовки, статических генераторов сайтов и внутренних графических пайплайнов.
Для новичка Libavif может быть менее комфортной, чем Squoosh или XnConvert. Здесь нет окна сравнения, нет визуального ползунка, нет кнопки Скачать. Но если пользователь готов работать через терминал, он получает больше контроля: качество цвета, качество альфы, скорость, потоки, глубина, YUV-формат, метаданные, lossless, прогрессивность, grid и последовательности кадров.
Libavif стоит выбирать, когда AVIF нужен не разово, а серьезно: для сайта, приложения, автоматической обработки, тестирования или разработки. Это компактный, строгий и функциональный инструмент, который делает именно то, что от него требуется: кодирует и декодирует AVIF с точной настройкой результата.
Рекомендуемые стартовые настройки
Для фотографий на сайте можно начинать с такой команды:
avifenc --qcolor 72 --speed 6 --jobs all input.jpg output.avif
Это хороший стартовый баланс. Если изображение выглядит слишком сжатым, поднять качество до 76–80. Если файл слишком большой, попробовать 66–70.
Для больших hero-изображений:
avifenc --qcolor 70 --speed 5 --jobs all hero.jpg hero.avif
Для карточек товаров:
avifenc --qcolor 74 --speed 6 --jobs all product.jpg product.avif
Для скриншотов интерфейса:
avifenc --qcolor 86 --yuv 444 --speed 6 --jobs all screenshot.png screenshot.avif
Для PNG с прозрачностью:
avifenc --qcolor 84 --qalpha 96 --yuv 444 --speed 6 --jobs all input.png output.avif
Для иконок и логотипов с важными краями:
avifenc --qcolor 90 --qalpha 100 --yuv 444 --speed 5 --jobs all icon.png icon.avif
Для AVIF без потерь:
avifenc --lossless input.png output.avif
Для проверки результата:
avifdec output.avif output-check.png
Для просмотра информации о файле:
avifdec --info output.avif
Для ограничения размера файла:
avifenc --target-size 150000 input.jpg output.avif
Для быстрой тестовой конвертации:
avifenc --qcolor 70 --speed 8 input.jpg test.avif
Для финальной более тщательной конвертации:
avifenc --qcolor 74 --speed 4 --jobs all input.jpg output.avif
Для пакетной обработки JPEG на macOS и Linux:
for f in *.jpg; do avifenc --qcolor 72 --speed 6 --jobs all "$f" "${f%.jpg}.avif"done
Для пакетной обработки PNG с прозрачностью:
for f in *.png; do avifenc --qcolor 84 --qalpha 96 --yuv 444 --speed 6 --jobs all "$f" "${f%.png}.avif"done
Для Windows PowerShell:
Get-ChildItem *.jpg | ForEach-Object { avifenc --qcolor 72 --speed 6 --jobs all $_.FullName ($_.BaseName + ".avif")}
Эти настройки не нужно воспринимать как единственно правильные. Libavif хороша именно тем, что позволяет быстро менять параметры под конкретный материал. Для фотографий можно снижать качество сильнее, для текста и интерфейса — повышать, для прозрачности — отдельно контролировать --qalpha, для серверной обработки — ограничивать --jobs, для финального релиза — уменьшать --speed. Такой уровень контроля и делает Libavif надежным инструментом для серьезной работы с AVIF.