Назад в блог
27 октября 2026 г.Sergei Solod9 мин чтения

Как подобрать качество AVIF с помощью SSIMULACRA2 без оптимизации каждого изображения

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

AVIFSSIMULACRA2Сжатие изображенийSharpОптимизация изображений

Выбрать качество AVIF несложно, если важен только размер файла. Гораздо труднее определить, насколько заметное ухудшение изображения можно допустить. Значение качества 40 не означает 40 баллов по метрике визуального качества и не гарантирует одинаковый результат для всех изображений. Разные исходники могут совершенно по-разному реагировать на одни и те же настройки кодировщика.

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

Качество AVIF и SSIMULACRA2 — разные показатели

Параметр quality, который передаётся кодировщику AVIF, задаёт настройку сжатия. SSIMULACRA2 — это оценка качества уже закодированного изображения. Их шкалы нельзя напрямую сопоставлять: AVIF quality: 40 не означает, что результат SSIMULACRA2 будет равен 40, 60 или какому-либо другому фиксированному значению.

Чтобы измерить качество результата кодирования, нужно декодировать изображение и сравнить его с эталоном:

ssimulacra2 reference.png encoded-decoded.png

Чем выше оценка SSIMULACRA2, тем больше визуальное сходство. В официальной документации результат около 50 соответствует среднему качеству, а около 70 — высокому. Порог 60 может быть удобным практическим ориентиром, но это выбранный критерий, а не универсальное определение приемлемого качества изображения. Результаты обязательно нужно проверять визуально на характерных примерах и в том размере, в котором изображения действительно будут показываться.

Почему полная оптимизация каждого изображения требует много ресурсов

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

Недостаток — количество операций кодирования. Если есть N изображений и для каждого требуется K пробных кодирований, чтобы найти подходящее значение, общее количество операций будет порядка N × K, не считая декодирования и вычисления оценок. На практике основную долю затрат может составлять само кодирование AVIF с высокими настройками вычислительной сложности. Расчёт метрики SSIMULACRA2 необязательно оказывается самой дорогой частью процесса.

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

СтратегияОбъём калибровкиГлавный компромисс
Адаптивное качество для каждого изображенияНесколько пробных кодирований каждого изображенияТочный контроль, максимальные затраты на калибровку
Адаптивное качество для каждой группыНесколько пробных кодирований на выборке из каждой группыМеньше работы, но больше настроек и зависимость результатов от группы
Одно фиксированное качествоПробные кодирования на ограниченной калибровочной выборкеПростота эксплуатации, но часть изображений будет сжата слишком сильно или недостаточно сильно

Важное различие: средний балл и доля изображений, прошедших проверку

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

  • Цель по среднему баллу: средняя оценка SSIMULACRA2 по выборке должна составлять около 60.
  • Цель по доле прошедших проверку: примерно 90% изображений должны получать SSIMULACRA2 ≥ 60, а остальные могут оказаться ниже этого порога.

Это не одно и то же. При расчёте среднего значения высокий балл простого изображения может компенсировать плохой результат сложного. Например, если половина изображений получила 75 баллов, а другая половина — 55, среднее будет равно 65. Но порог 60 при этом преодолела только половина изображений.

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

pass_rate = count(scores >= 60) / count(all_scores)

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

Что показала реальная калибровка

Во время предварительной калибровки AVIF адаптивный алгоритм подобрал для разных групп изображений разные значения качества — примерно от середины диапазона 30–39 до середины диапазона 40–49. Это было ожидаемо: в одних группах изображения преодолевали выбранный порог SSIMULACRA2 уже при низких настройках, тогда как отдельные сложные примеры требовали значительно более высокого качества кодировщика.

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

Повторный анализ измерений с другой целью — чтобы примерно девять из десяти изображений получали SSIMULACRA2 не ниже 60 — показал, что одно фиксированное значение качества AVIF около 39–40 может быть разумным компромиссом. При таком сравнении значение 39 было предпочтительнее с точки зрения уменьшения размера файлов, а 40 давало больший запас для изображений, находящихся близко к порогу. Эти значения были получены на основании калибровочных данных и последующего анализа; полная конвертация с фиксированным качеством и независимая проверка на всей коллекции не проводились. Точная экономия размера файлов при выборе 39 вместо 40 также не была установлена.

Вывод не в том, что качество AVIF 39 или 40 подходит всем. Суть в другом: фиксированное значение может быть разумным решением, если оно соответствует заранее определённым требованиям к распределению качества. Другой кодировщик, иной набор изображений, особенности обработки цвета или другой порог визуального сходства могут привести к совершенно иному результату.

Как один раз подобрать качество AVIF

  1. Определите допустимую долю неудачных результатов. Например, можно поставить цель, чтобы примерно 90% изображений получали SSIMULACRA2 ≥ 60. Решите, будет ли это гибким ориентиром или строгим требованием для допуска к публикации.
  2. Сформируйте действительно репрезентативную выборку. Включите изображения разных размеров и исходных форматов, с градиентами, резкими границами, текстурами и небольшим количеством деталей. Отбирайте случайные изображения из реальной коллекции и применяйте стратифицированную выборку, если без неё какая-то категория может остаться непредставленной. Отбор файлов исключительно по количеству сжатых байтов на пиксель — полезная эвристика для охвата разных типов файлов, но она не гарантирует репрезентативности с точки зрения визуального качества.
  3. Проверьте небольшой диапазон значений качества кодировщика. Начните с нескольких настроек рядом со значением, которое визуально даёт приемлемый результат, вместо перебора всей шкалы качества. Например, проверьте соседние значения 38, 39, 40 и 42 на одних и тех же изображениях.
  4. Сохраняйте одинаковый процесс кодирования. Не меняйте разрешение, ориентацию, преобразование цветового пространства, реализацию кодировщика, вычислительную сложность, субдискретизацию цветности, битовую глубину и предварительную обработку. Если добавляете водяной знак, эталонное изображение должно содержать такой же знак и пройти те же преобразования до сравнения с результатом сжатия.
  5. Записывайте и оценку качества, и размер файла. Для каждого варианта рассчитывайте долю изображений с результатом не ниже 60, распределение оценок ниже порога и общий размер закодированных файлов в байтах на одной и той же выборке. Нельзя делать выводы об экономии трафика только по числовому значению настройки качества.
  6. Просмотрите изображения, которые не прошли проверку. Обращайте внимание на лица, текст, тонкие линии, градиенты и другие детали, важные для предполагаемого способа отображения. Проверяйте изображения в реалистичных размерах, а не только при сильном увеличении.
  7. Выберите минимальное подходящее качество, затем проверьте его. Протестируйте выбранное значение на отдельной случайной контрольной выборке, которая не использовалась при подборе настройки. Если недостижение цели в 90% приведёт к серьёзным последствиям, оставьте запас и учитывайте статистическую неопределённость выборки. Если редкие неудачные результаты допустимы, можно выбрать более агрессивное значение.

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

Минимальный пример сравнения с помощью Sharp и SSIMULACRA2

В этом упрощённом примере используется кодировщик AVIF из Sharp, чтобы создать два варианта из одного исходного изображения. Это иллюстрация процесса калибровки, а не утверждение, что каждому проекту нужны именно такие параметры кодировщика или значения качества. Запустите пример как ES-модуль после установки пакета sharp.

import sharp from 'sharp';

const source = 'sample.png';
const encoding = {
  effort: 9,
  chromaSubsampling: '4:4:4',
  bitdepth: 8,
  tune: 'iq',
  lossless: false
};

// Use the same orientation and color conversion in both paths.
await sharp(source)
  .rotate()
  .toColourspace('srgb')
  .png()
  .toFile('reference.png');

for (const quality of [39, 40]) {
  const encoded = `candidate-q${quality}.avif`;
  await sharp(source)
    .rotate()
    .toColourspace('srgb')
    .avif({ ...encoding, quality })
    .toFile(encoded);

  await sharp(encoded)
    .png()
    .toFile(`candidate-q${quality}.png`);
}

Затем сравните декодированные варианты с подготовленным эталоном:

ssimulacra2 reference.png candidate-q39.png
ssimulacra2 reference.png candidate-q40.png

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

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

Когда одно значение качества AVIF — плохой выбор

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

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

Также важно различать скорость кодирования и скорость калибровки. Одно значение качества избавляет от повторных экспериментов, но кодирование всех изображений с очень высоким параметром effort всё ещё может требовать значительных вычислительных ресурсов. Использование профиля кодировщика с меньшей вычислительной сложностью — ещё один возможный способ оптимизации, но после изменения настроек потребуется повторная калибровка: зависимость между значением качества и получаемой оценкой может измениться.

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

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

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