ab-av1 помогает подобрать CRF по целевому VMAF или XPSNR, оценить ожидаемый размер и время кодирования по коротким выборкам, а затем запустить перекодирование через FFmpeg с выбранным программным или совместимым аппаратным энкодером.
Основная рабочая схема строится вокруг нескольких команд. sample-encode проверяет заданный CRF на коротких фрагментах, crf-search ищет подходящее значение по метрике и ограничению размера, auto-encode объединяет поиск с финальным кодированием, а vmaf и xpsnr измеряют готовый файл относительно эталона.
Управление выполняется из командной строки, поэтому результат зависит не от набора визуальных пресетов, а от параметров самого ab-av1, доступных энкодеров FFmpeg и характеристик исходника. Это удобно для воспроизводимых сценариев и автоматизации, но требует понимать, что именно измеряет выбранная метрика и какие параметры передаются кодеру.
Скачать ab-av1
- Конвертация видео
- Сжатие файлов
- Просто для новичков
- Нужен FFmpeg в PATH
- Только командная строка
- VMAF зависит от выборки
Как устроено кодирование в ab-av1
ab-av1 решает задачу, которая обычно требует нескольких отдельных запусков FFmpeg: сначала оценить качество на пробах, затем подобрать коэффициент качества и только после этого обработать весь файл. Утилита не заменяет видеокодек. Она формирует параметры, запускает FFmpeg, анализирует результат и использует метрику качества как обратную связь. По умолчанию видеопоток передаётся энкодеру libsvtav1, а пользователь при необходимости указывает другой совместимый видеокодер через --encoder или короткую форму -e.
Логика особенно полезна, когда одного заранее выбранного CRF недостаточно. Одинаковое число CRF у разных исходников не означает одинаковую воспринимаемую потерю качества: шумный материал, анимация, чистая компьютерная графика и сложное движение реагируют на сжатие по-разному. ab-av1 измеряет несколько фрагментов и ищет значение, которое удовлетворяет заданной нижней границе VMAF либо XPSNR. В результате пользователь задаёт цель через метрику, а не пытается угадать CRF только по предыдущему опыту.
Важно отличать три уровня. Параметр CRF управляет качеством кодера, VMAF или XPSNR оценивает искажения, а --max-encoded-percent может добавить ограничение на прогнозируемый размер видеопотока относительно исходного. Если эти условия конфликтуют, поиск может закончиться без подходящего CRF. Это не сбой алгоритма сам по себе: слишком высокая требуемая оценка и одновременно слишком жёсткое ограничение размера иногда физически несовместимы для конкретного материала и выбранного энкодера.
Что нужно подготовить перед первым запуском
Ключевая внешняя зависимость — FFmpeg. Для штатного сценария нужен сборочный вариант, в котором доступны libsvtav1, libvmaf и libopus, а команда ffmpeg должна находиться через переменную PATH. Проверка имеет практический смысл до любого длительного поиска: если оболочка не находит FFmpeg или нужного фильтра VMAF, ab-av1 не сможет завершить оценку качества. Для XPSNR также требуется FFmpeg с соответствующим фильтром.
Перед кодированием полезно отдельно убедиться, что FFmpeg видит нужный энкодер. Для программного AV1 это обычно libsvtav1, но ab-av1 умеет работать и с другими кодерами, параметры которых FFmpeg принимает в режиме постоянного качества. Наличие имени кодера в документации ab-av1 не создаёт аппаратную поддержку там, где её нет: например, NVENC зависит от подходящей видеокарты, драйвера и сборки FFmpeg, а QSV — от совместимой графики Intel и корректно доступного аппаратного устройства.
Исходный файл лучше предварительно проверить на корректное чтение. Ошибки декодирования, повреждённый конец файла, необычные временные метки и нестандартная геометрия кадра способны повлиять и на выборки, и на финальный проход. ab-av1 выводит сообщения FFmpeg при проблемах, а для итогового кодирования дополнительно предусмотрены проверки результата. Но чем раньше обнаружен дефект источника, тем меньше времени будет потрачено на поиск CRF для материала, который всё равно не удастся надёжно декодировать.
Команда auto-encode: поиск и финальный проход
auto-encode предназначена для сценария, в котором нужно получить готовый файл без ручного переноса найденного значения CRF в отдельную команду. Сначала запускается тот же механизм поиска, который используется в crf-search: утилита кодирует выборки, измеряет их и уточняет диапазон. После нахождения значения начинается полный проход FFmpeg с теми же существенными параметрами кодирования. Такой подход снижает риск случайно изменить preset, фильтр или набор аргументов между тестом и финальным запуском.
Минимальная цель задаётся --min-vmaf. Если вместо VMAF нужно использовать XPSNR, применяется --min-xpsnr. Эти параметры следует воспринимать как условие поиска, а не как обещание абсолютной визуальной идентичности. Измерение на выборках отражает среднюю оценку взятых фрагментов; редкая сложная сцена, не попавшая в набор проб, может оказаться хуже среднего. Для критичного материала после кодирования разумно измерить готовый файл полностью и дополнительно просмотреть сложные эпизоды.
Ключевые параметры энкодера — --encoder, --preset, формат пикселей, интервал ключевых кадров, фильтры и дополнительные аргументы — участвуют и в тестах, и в финальном проходе. Поэтому сравнивать результаты поиска корректно только при неизменной конфигурации. Если сначала искать CRF на preset 8, а затем вручную кодировать на другом preset или с иной цепочкой фильтров, найденная точка качества перестаёт быть прямым прогнозом для финального файла.
Когда auto-encode удобнее отдельного crf-search
Команда удобна при однотипной обработке единичного файла, когда после нахождения CRF всё равно требуется сразу выполнить перекодирование. Она также уменьшает количество ручных действий в сценариях автоматизации: оболочке не нужно разбирать человекочитаемый итог поиска, хранить число и строить следующий вызов. Если же пользователь собирается дополнительно менять маппинг потоков, метаданные или сложные параметры FFmpeg внешним скриптом, отдельный crf-search часто гибче: он даёт число и прогноз, после чего финальную команду можно сформировать самостоятельно.
При длительных кодированиях полезны --verify и --fail-fast. Первый режим проверяет завершённый файл перед переносом на окончательное место: может полностью декодировать результат и сравнить длительность с исходником с допустимым небольшим расхождением. Второй завершает финальный проход при первой ошибке, сообщённой FFmpeg, вместо продолжения записи потенциально повреждённого результата. Это особенно важно для источников, которые выглядят обычными при быстром просмотре, но содержат сбойный участок.
crf-search: когда нужен только найденный коэффициент
crf-search выполняет интерполированный двоичный поиск по CRF. На каждом шаге вызывается выборочное кодирование, после чего измеренная метрика и оценка размера помогают сузить диапазон. Итог содержит найденный CRF, среднюю оценку выборок, прогноз размера видеопотока полного кодирования и ориентировочное время. Это позволяет решить, устраивает ли баланс качества и объёма, ещё до обработки всего фильма.
Поиск имеет границы. Для стандартного SVT-AV1 ab-av1 использует свой рабочий диапазон и шаг, а пользователь может задавать --min-crf, --max-crf и --crf-increment. У текущего SVT-AV1 поддерживаются дробные шаги до четверти единицы, если сама версия энкодера это умеет. Для других кодеров допустимый смысл CRF может отличаться: ab-av1 содержит отдельные преобразования параметров для ряда семейств, но всё равно стоит проверять документацию выбранного FFmpeg-кодера.
Опция --thorough делает поиск более исчерпывающим, когда нужно приблизиться к целевой метрике точнее. За эту точность платят дополнительными тестами. На коротком ролике разница по времени может быть невелика, а на тяжёлом 4K-источнике каждая дополнительная серия выборок заметна. Поэтому обычный режим подходит для повседневной оценки, а тщательный имеет смысл, когда важен узкий диапазон результата и пользователь готов потратить больше времени на подбор.
Ограничение max-encoded-percent
--max-encoded-percent задаёт верхнюю границу прогнозируемого размера видеопотока как долю от исходного. Здесь важно слово видеопотока: прогноз не обязан совпадать с размером конечного контейнера, потому что аудио, субтитры, вложения и служебные данные тоже занимают место. Если пользователь сравнивает только полный размер файлов, расхождение с прогнозом может быть закономерным. Для оценки самого видеокодирования правильнее смотреть на объём видеопотока.
Жёсткое ограничение размера способно отсеять CRF, который выполняет условие качества. Например, один вариант даёт нужный VMAF, но прогнозируется слишком большим, а следующий укладывается в размер, но уже падает ниже --min-vmaf. В таком случае поиску нечего выбрать. Практическое решение — определить, какое из требований важнее: ослабить процент, снизить целевую метрику, сменить preset или использовать другой энкодер. Просто расширять диапазон CRF бессмысленно, если конфликт лежит между двумя условиями.
sample-encode: быстрая проверка конкретного CRF
sample-encode не ищет коэффициент самостоятельно. Пользователь задаёт CRF и preset, а программа кодирует короткие участки исходника и сообщает среднюю метрику, прогноз размера и примерное время полного прохода. Это удобный диагностический режим: можно проверить один или несколько заранее выбранных CRF, сравнить влияние preset, оценить фильтр или понять, насколько правдоподобен результат автоматического поиска.
По умолчанию выборки распределяются по длительности с интервалом, управляемым --sample-every, а продолжительность отдельного фрагмента задаётся --sample-duration. В штатной конфигурации интервал составляет двенадцать минут, а фрагмент — двадцать секунд. Для коротких файлов, где выборка заняла бы большую часть материала, программа может перейти к полному фрагменту вместо бессмысленного дробления. Это сохраняет логику оценки на роликах, которые сами короче обычной выборочной схемы.
--min-samples полезен для длинных или неоднородных материалов, если стандартное распределение даёт слишком мало точек. Однако увеличение количества проб не делает метрику истиной автоматически. Оно лишь повышает вероятность захватить разные типы сцен. Если в фильме есть несколько экстремально сложных эпизодов, пользователь всё равно должен оценить, попали ли они в распределение, или сделать отдельную проверку готового результата.
Почему прогноз выборок может отличаться от полного файла
Выборка — это статистическая оценка, а не полный проход. Если материал равномерный, средний VMAF нескольких фрагментов обычно полезен для выбора CRF. Если же сложность резко меняется, короткие участки могут не представлять весь фильм. На практике особенно опасны длинные записи с редкими сценами сильного движения, мелкой текстурой, дымом, зерном, вспышками или тёмными градиентами. Среднее значение может выглядеть уверенно, хотя отдельный участок будет заметно слабее.
Поэтому sample-encode стоит использовать как инструмент принятия решения: сравнивать варианты при одинаковых условиях, отслеживать направление изменения метрики и проверять итог. Для разового архивного кодирования, где повторить работу дорого, полезнее потратить больше времени на дополнительные пробы и полную проверку после завершения. Для массовых некритичных файлов можно принять более быстрый режим и ориентироваться на стабильность процесса.
VMAF в ab-av1: что именно измеряется
Команда vmaf сравнивает искажённый файл с эталонным. ab-av1 подготавливает два видеопотока для фильтра libvmaf, синхронизирует временную шкалу и выбирает параметры масштабирования. Для стандартных моделей предусмотрен автоматический выбор между обычным и 4K-профилем по разрешению, а число потоков вычисления VMAF по умолчанию связано с доступным параллелизмом системы. Это сокращает количество ручных параметров для типового сравнения.
Автоматическое масштабирование важно понимать. Для низкого разрешения поток может быть приведён к разрешению, соответствующему модели VMAF, с сохранением пропорций. Опция --vmaf-scale позволяет оставить автоматический режим, отключить масштабирование либо задать размер явно. Если пользователь сравнивает результаты разных экспериментов, режим масштабирования должен быть одинаковым: смена модели или геометрии измерения способна изменить число VMAF даже при тех же двух файлах.
Через повторяемый параметр --vmaf передаются дополнительные аргументы libvmaf, например количество потоков или субдискретизация кадров метрики. Это уже уровень тонкой настройки. Ускорение за счёт n_subsample сокращает объём анализа, но одновременно меняет полноту измерения. Для окончательной верификации качества лучше понимать, какие кадры пропускаются и почему это приемлемо именно для данного материала.
Модель VMAF и разрешение
Модель VMAF калибрована под определённые условия просмотра, поэтому число нельзя отрывать от выбранной модели. ab-av1 умеет автоматически подставлять стандартную модель в зависимости от разрешения и учитывать ряд современных имён моделей при автоматическом масштабировании. Если пользователь передаёт собственный аргумент модели через --vmaf, он должен сам понимать смысл этого выбора. Сравнивать оценки, полученные разными моделями, как одну и ту же шкалу некорректно.
Ещё один практический нюанс появляется при изменении разрешения во время кодирования. Параметр --vfilter применяется к исходному потоку перед кодированием и, по штатной логике, также учитывается на эталонной стороне VMAF. Это позволяет сравнивать, например, уменьшенную версию с эталоном, прошедшим то же геометрическое преобразование, и измерять главным образом потери кодирования после фильтра. Но тогда итоговый VMAF не показывает качество, потерянное самим уменьшением разрешения. Если требуется иная постановка сравнения, используется --reference-vfilter.
XPSNR как альтернатива VMAF
ab-av1 поддерживает XPSNR как самостоятельную метрику и как критерий поиска. Команда xpsnr сравнивает готовый файл с эталоном, sample-encode --xpsnr оценивает выборки по XPSNR, а crf-search и auto-encode принимают --min-xpsnr вместо --min-vmaf. Это полезно, когда пользователь предпочитает другую метрику или хочет проверить, согласуется ли решение, принятое по VMAF, с независимой оценкой.
Для XPSNR предусмотрены собственные параметры частоты анализа и формата пикселей. В частности, явный формат может помочь при проблемах на 10-битном материале, если автоматический выбор приводит к несовместимости фильтра. Менять его для лучшего числа не следует: смысл настройки — добиться корректной и сопоставимой обработки обеих сторон. Любое преобразование перед метрикой должно быть одинаково осмыслено для эталона и искажённого потока.
В sample-encode можно вычислять XPSNR и одновременно VMAF. Такой режим полезен не для поиска магического универсального порога, а для диагностики. Если обе метрики меняются в ожидаемом направлении при изменении CRF, картина выглядит устойчивее. Если они расходятся, стоит посмотреть сам материал: метрики чувствительны к разным типам искажений, а субъективная важность артефактов зависит от содержимого.
Как выбирать целевое качество без ложной точности
Число VMAF нельзя превращать в универсальный пресет для всех файлов. Значение отражает конкретное сравнение при конкретной модели, масштабировании и фильтрах. Практичнее сначала выбрать несколько репрезентативных исходников, провести sample-encode с несколькими уровнями CRF, просмотреть результаты и только затем определить рабочую цель для своего типа контента. Тогда целевой VMAF становится частью воспроизводимого процесса, а не случайной цифрой из чужого рецепта.
Точно так же не стоит считать прогноз размера обязательным результатом до мегабайта. ab-av1 оценивает видеопоток по выборкам, тогда как финальная компрессия зависит от распределения сложности во времени. Аудио и другие потоки добавляют собственный объём. Прогноз полезен для сравнения вариантов и отбраковки явно неподходящих настроек, но планировать заполнение носителя лучше с запасом и по фактическим размерам после нескольких тестовых кодирований.
Если задача состоит в минимальном размере при сохранении приемлемого качества, имеет смысл формулировать два условия явно: нижнюю границу метрики и разумный максимум доли размера. Если при таких условиях поиск не находит CRF, это ценный результат: выбранная комбинация кодера, preset и ограничений не достигает цели на этом источнике. Далее нужно менять один параметр за раз и наблюдать, что именно даёт выигрыш.
Preset: скорость поиска и скорость финального кодирования
--preset относится к выбранному энкодеру. Для SVT-AV1 более высокое число обычно означает более быстрый проход с компромиссом эффективности, а ab-av1 использует собственное стандартное значение, если preset не задан. Для некоторых FFmpeg-кодеров допустимы словесные пресеты. Важно, что preset участвует в самих пробах: найденный CRF относится к этому preset, поэтому переносить его на другой режим без повторного измерения нельзя считать эквивалентным.
При подборе настроек есть два разных расхода времени. Первый — поиск, состоящий из нескольких коротких кодирований и расчётов метрики. Второй — полный проход. Медленный preset увеличивает оба. Если пользователь тестирует много вариантов, разумно сначала проверить логику процесса на небольшом числе выборок и более быстром режиме, а окончательный поиск выполнять уже на целевом preset. Иначе можно потратить часы на конфигурацию, которую затем всё равно придётся менять.
Прогноз времени из sample-encode и crf-search следует читать как оценку для текущих условий. Нагрузка системы, параллельные задачи, аппаратное ускорение декодирования, температура процессора и различия сложности сцен способны менять фактическую скорость. Особенно осторожно нужно переносить прогноз с нескольких коротких фрагментов на многочасовой материал, если система склонна снижать частоты при длительной нагрузке.
CRF, диапазоны и шаг поиска
CRF не является абсолютной единицей качества между разными кодерами. У SVT-AV1, x264, x265, VP9, аппаратных кодеров и других реализаций различаются диапазоны, способы преобразования и реакция на preset. ab-av1 содержит правила для известных семейств, включая случаи, где FFmpeg использует не параметр с именем CRF, а -qp, -q или -q:v. Поэтому число, найденное для одного энкодера, нельзя использовать как прямой эквивалент другого.
--crf-increment управляет дискретностью поиска. Мелкий шаг позволяет выбрать значение ближе к порогу метрики, но увеличивает число потенциальных точек и имеет смысл только если кодер действительно поддерживает такую точность. Слишком мелкий шаг на кодере, который округляет значение, даёт ложное ощущение контроля. Слишком крупный шаг, наоборот, может перескочить через полезную точку и оставить заметный запас качества или размера.
--min-crf и --max-crf полезны, когда диапазон заранее ограничен техническими требованиями или опытом. Но сужение должно быть обосновано. Если верхняя граница слишком низкая, поиск может не добраться до достаточно компактного варианта; если нижняя слишком высокая, может не найти качество. При диагностике ошибки не найден подходящий CRF первым делом стоит проверить, не исключили ли пользовательские границы реально возможное решение.
Фильтр vfilter: масштабирование, кадрирование и другие преобразования
--vfilter передаёт строку видеофильтра FFmpeg и применяется к исходному видеопотоку перед кодированием. Это позволяет использовать стандартные фильтры FFmpeg, например изменение размера, частоты кадров или кадрирование. Здесь ab-av1 не предоставляет собственного визуального редактора и не анализирует смысл цепочки: пользователь задаёт фильтр в синтаксисе FFmpeg, а программа включает его в пробные и финальный проходы.
Для VMAF фильтр имеет особое значение. По умолчанию та же цепочка применяется к эталонной стороне сравнения, чтобы геометрия совпадала. Если кодируется кадр 4K, уменьшенный до 1080p, VMAF в такой схеме оценивает, насколько хорошо закодирована уже уменьшенная версия, а не штрафует сам факт уменьшения. Это полезно для настройки кодера после преобразования, но не отвечает на вопрос, насколько 1080p в целом отличается от исходного 4K.
--reference-vfilter позволяет переопределить фильтр для эталона. Настройка нужна при сложных сценариях сравнения, но требует особой аккуратности: две стороны VMAF должны иметь совместимые размеры, частоту и временное соответствие. Ошибка в фильтре может привести либо к отказу libvmaf из-за несовпадающей геометрии, либо к числу, которое измеряет не то преобразование, которое пользователь хотел оценить.
Чего vfilter не превращает ab-av1 в видеоредактор
Наличие FFmpeg-фильтров не означает появления таймлайна, дорожек, ключевых кадров анимации эффектов или интерактивного предпросмотра. Это параметр командной строки для обработки видеопотока перед кодированием. Обрезку геометрии можно выразить фильтром crop, масштаб — scale, изменение частоты — fps, но пользователь должен сам сформировать цепочку и проверить её. Для монтажных задач с визуальным контролем нужна другая категория программ.
Склейка нескольких самостоятельных исходников также не является отдельной функцией ab-av1. Если проект требует объединения файлов, сложного маппинга или предварительной нормализации, это лучше выполнить средствами FFmpeg или специализированного инструмента до поиска качества либо построить внешний сценарий. Тогда ab-av1 получает уже однозначный вход, а его выборки действительно относятся к тому потоку, который будет закодирован.
Формат пикселей и глубина
Параметр --pix-format задаёт формат пикселей для кодирования. Для libsvtav1, libaom-av1 и librav1e при отсутствии явного значения ab-av1 ориентируется на 10-битный yuv420p10le. Для других кодеров программа не обязана навязывать тот же формат и может оставить выбор FFmpeg. Это важно при аппаратном кодировании, где набор поддерживаемых форматов определяется конкретным устройством и драйвером.
В поддерживаемом наборе аргумента присутствуют варианты 4:2:0 8 бит, 4:2:0 10 бит, 4:2:2 10 бит и 4:4:4 10 бит. Сам факт присутствия значения в интерфейсе ab-av1 не гарантирует, что любой выбранный энкодер примет его. Если FFmpeg сообщает о неподдерживаемом формате, нужно свериться со списком пиксельных форматов конкретного кодера и подобрать совместимый вариант, а не пытаться исправить ошибку изменением VMAF.
Для метрик формат пикселей тоже влияет на вычисление. ab-av1 старается выбрать подходящий формат сравнения, а XPSNR позволяет явно задать его при проблемах с 10-битным входом. Смысл настройки — обеспечить корректное декодирование и сопоставимость, а не искусственно повысить оценку. Если сравнение разных экспериментов выполняется в разных форматах, результаты уже нельзя считать полностью одинаковыми по методике.
Ключевые кадры и scene change detection
--keyint задаёт интервал между ключевыми кадрами числом кадров или длительностью, например в секундах. Для достаточно длинного входа ab-av1 имеет стандартное поведение с интервалом порядка десяти секунд. Более длинный интервал потенциально помогает компрессии, но делает перемотку грубее и может быть нежелателен для последующего монтажа. Более короткий интервал повышает частоту независимых точек, но обычно требует дополнительного битрейта.
Для SVT-AV1 доступно управление обнаружением смен сцен через --scd. Это часть настроек энкодера, а не анализ для нарезки файла. Функция влияет на принятие решений о ключевых кадрах во время кодирования. При использовании другого FFmpeg-энкодера те же аргументы могут иметь другой смысл или отсутствовать, поэтому переносить конфигурацию SVT-AV1 на аппаратный кодер механически не стоит.
Если конечный файл предназначен только для последовательного просмотра, можно оптимизировать интервал под компрессию. Если важна быстрая навигация, потоковая упаковка или дальнейшая покадровая работа, требования меняются. ab-av1 не знает будущего назначения файла, поэтому пользователю нужно задавать эти параметры осмысленно до запуска crf-search: изменение keyint после поиска меняет условия кодирования и требует новой проверки.
Дополнительные параметры SVT-AV1 через svt
Повторяемый аргумент --svt передаёт дополнительные параметры в svtav1-params при использовании libsvtav1. Через него настраиваются функции самого SVT-AV1, которых нет среди отдельных опций ab-av1. Программа проверяет область применения и не разрешает использовать --svt с посторонним энкодером. Это защищает от ситуации, когда аргумент выглядит принятым оболочкой, но не имеет смысла для выбранного кодера.
Параметры SVT участвуют в пробном кодировании, поэтому они должны быть окончательно выбраны до поиска CRF. Например, изменение настроек зерна, психовизуальных решений или структуры GOP после crf-search меняет соотношение качества и размера. В таком случае старый CRF становится лишь ориентиром. Для воспроизводимого результата лучше хранить полную команду либо использовать журнал автоматизации, а не только найденное число.
Синтетическое зерно требует отдельной осторожности при VMAF. Положение искусственно восстановленного зерна не совпадает с исходным, и объективная метрика может штрафовать такое различие иначе, чем человек воспринимает картинку. Поэтому высокий VMAF не должен быть единственным критерием для зернистого материала, а параметры синтеза зерна нельзя выбирать только по стремлению максимизировать число. Нужен визуальный контроль характерных сцен.
Другие программные энкодеры через FFmpeg
Хотя название ab-av1 подчёркивает AV1, механизм --encoder не ограничен одним кодеком. Официально показаны примеры с libx265 и libx264, а код программы содержит отдельные правила для libaom-av1, librav1e и libvpx-vp9. Общий принцип тот же: ab-av1 должен уметь управлять параметром постоянного качества выбранного FFmpeg-энкодера и корректно сопоставлять значение поиска с его аргументами.
Для libaom-av1 и VP9 программа добавляет нулевой целевой битрейт, чтобы FFmpeg работал в режиме постоянного качества, а preset преобразуется в характерный для кодера параметр скорости. Для librav1e CRF сопоставляется с QP, а preset — со скоростью. Эти преобразования важны, потому что внешне единый интерфейс ab-av1 скрывает различия синтаксиса FFmpeg. Пользователь всё равно должен проверять смысл итоговых настроек при переходе между кодерами.
Для x264 и x265 особенно полезно помнить, что выигрыш от поиска VMAF не превращает один кодек в другой. Если требуется совместимость со старыми устройствами, H.264 может быть разумнее AV1 даже при большем размере. Если важна эффективность HEVC, можно искать CRF для x265. ab-av1 в этих сценариях остаётся инструментом подбора качества и запуска FFmpeg, а выбор кодека определяется требованиями воспроизведения, скоростью кодирования и целевой средой.
Аппаратные энкодеры: NVENC, QSV, VAAPI и Vulkan
ab-av1 содержит поддержку нескольких семейств аппаратных FFmpeg-энкодеров. Для NVIDIA предусмотрены варианты NVENC, включая AV1, HEVC и H.264; для Intel — семейство QSV, включая AV1, HEVC, VP9, H.264 и MPEG-2. Для VAAPI и Vulkan программа знает особенности передачи входа и преобразования параметра качества. Это не отдельный слой драйверов: фактическую работу выполняет FFmpeg, поэтому доступность зависит от системы.
На QSV для ряда кодеров ab-av1 добавляет режим look-ahead и связанные параметры. Для VAAPI и Vulkan могут автоматически применяться аргументы аппаратного декодирования и формат аппаратного вывода. Если такая автоматическая настройка мешает конкретной конфигурации, её можно переопределять через --enc-input, включая отключение отдельных значений. Этот уровень нужен прежде всего тем, кто уже понимает аппаратный путь FFmpeg и хочет совместить его с поиском качества ab-av1.
Нельзя считать аппаратный AV1 прямой заменой программного SVT-AV1 с тем же CRF. У кодеров различаются шкалы качества, доступные форматы пикселей, наборы preset и эффективность сжатия. Правильный способ сравнения — выполнить отдельный crf-search или несколько sample-encode для каждого энкодера при одинаковой методике VMAF/XPSNR. Сравнение только чисел CRF между NVENC и libsvtav1 не несёт полезного смысла.
Когда аппаратное кодирование оправдано
Аппаратный кодер имеет смысл, когда время обработки важнее максимальной эффективности на каждый байт, когда CPU должен оставаться свободным для других задач или когда нужно быстро прогнать большой объём материала. ab-av1 помогает подобрать параметр качества для такого кодера по той же метрике, но не устраняет его аппаратные ограничения. Если устройство не умеет нужный профиль, глубину или формат, ошибка появится на уровне FFmpeg.
При диагностике сначала полезно проверить простой ручной запуск FFmpeg выбранного аппаратного кодера без ab-av1. Если он не стартует, менять --min-vmaf или параметры выборки бессмысленно. После подтверждения работы аппаратного пути можно подключать поиск CRF. Такой порядок отделяет проблемы драйвера и устройства от логики метрики и сокращает количество переменных в одном тесте.
Аргументы enc и enc-input
--enc передаёт дополнительные выходные аргументы вызову FFmpeg, когда используется переопределённый энкодер. Значения задаются в форме параметра и его значения, а ab-av1 проверяет ряд конфликтов с тем, что уже определено собственными опциями. Это позволяет использовать специфические настройки x265, аппаратных кодеров и других реализаций, не добавляя для каждой функции отдельный флаг в ab-av1.
--enc-input аналогично добавляет аргументы со стороны входа FFmpeg. Через него можно выбрать декодер или скорректировать аппаратное ускорение. В некоторых семействах ab-av1 имеет собственные стандартные входные аргументы, поэтому предусмотрена возможность явно убрать автоматическое значение. Использовать эту настройку стоит только при понятной причине: неверное аппаратное устройство или несовместимый формат легче диагностировать, когда набор переданных FFmpeg опций минимален.
Если FFmpeg сообщает, что параметр повторён или конфликтует с уже заданным, следует решить, какой слой должен им управлять. Базовые параметры вроде preset, формата пикселей, фильтра и CRF лучше задавать штатными опциями ab-av1, потому что они участвуют в поиске и формировании подсказок. --enc удобнее оставлять для действительно специфических ключей кодера.
Аудио, субтитры и дополнительные потоки
При финальном кодировании ab-av1 сохраняет входные потоки, а основной видеопоток перекодирует с выбранными настройками. Аудио по умолчанию копируется, если пользователь специально не запросил аудиокодек или сведение. Это важная деталь для оценки размера: поиск CRF прогнозирует главным образом видеопоток, тогда как скопированное многоканальное аудио может занимать значительную часть итогового файла.
Поддерживаются несколько аудиодорожек и субтитров. Для отдельных аудиопотоков можно передавать кодек через FFmpeg-аргументы, а опция сведения в стерео предназначена для входов с большим числом каналов. Если контейнер результата не поддерживает конкретный скопированный поток, уже FFmpeg выдаст ошибку совместимости. В такой ситуации нужно выбрать другой контейнер или явно преобразовать проблемную дорожку.
Дополнительные видеопотоки, не являющиеся основным, могут копироваться, а вложения и другие поддерживаемые потоки также учитываются при переносе. Для Matroska и WebM есть отдельные ограничения на данные. Если требуется точный ручной маппинг десятков потоков, служебных тегов или редких типов данных, внешняя команда FFmpeg после crf-search может оказаться удобнее, чем попытка выразить всю контейнерную логику через auto-encode.
video-only
Опция --video-only позволяет сформировать результат без сохранения остальных потоков. Она полезна в технических промежуточных сценариях, когда аудио и субтитры будут смонтированы отдельно, либо когда нужно измерить именно видеорезультат. Для обычного пользовательского архива эта опция может неожиданно удалить важные дорожки, поэтому включать её следует только осознанно.
Если задача — сравнить эффективность видеокодера, вариант без аудио упрощает анализ размера. Но итоговый потребительский файл затем всё равно потребует контейнеризации остальных потоков. Поэтому результаты теста нужно интерпретировать в контексте: маленький видеопоток не равен маленькому финальному файлу, если к нему добавляются несколько несжатых или высокобитрейтных аудиодорожек.
Контейнер результата и имя выходного файла
Если путь вывода не задан явно, ab-av1 формирует имя автоматически. Для большинства видео стандартным контейнером становится Matroska, а для входного MP4 сохраняется логика MP4; для некоторых расширений, плохо подходящих под AV1, выбирается более совместимый вариант. Однако самый предсказуемый подход — задавать выходной путь самостоятельно и выбирать расширение с учётом поддерживаемых потоков и целевых проигрывателей.
Контейнер не определяет видеокодек. MKV может содержать AV1, HEVC, H.264 и другие потоки, а MP4 тоже допускает несколько современных кодеков при наличии поддержки в инструментах и плеерах. ab-av1 ориентируется на FFmpeg, поэтому реальная совместимость определяется сочетанием контейнера, кодека, аудио, субтитров и устройства воспроизведения. Если FFmpeg отказывается записывать поток в выбранный контейнер, смена расширения без понимания причины не всегда достаточна.
Выходной файл сначала создаётся как временный и только после успешного завершения переносится на окончательное место. Это уменьшает риск принять недописанный результат за готовый. Кроме того, программа не разрешает случайно указать один и тот же путь на вход и выход без специального явного разрешения. Такая защита особенно важна в скриптах, где ошибка подстановки имени могла бы уничтожить исходник.
Проверка готового файла: verify и fail-fast
--verify предназначен для ситуации, когда успешный код возврата энкодера ещё не гарантирует здоровый файл. После окончания ab-av1 может полностью декодировать результат и проверить его длительность относительно входа. Эти проверки доступны и по отдельности. Если декодирование обнаруживает ошибку либо продолжительность отличается сверх допуска, результат не считается успешно проверенным.
--fail-fast действует раньше: финальное кодирование прекращается при первой ошибке, которую FFmpeg сообщает во время обработки. Это помогает на повреждённом источнике, где обычный FFmpeg иногда может продолжить работу и создать файл с пропущенным участком. В сочетании с --verify получается более строгий конвейер: немедленная реакция на видимую ошибку плюс проверка уже сформированного результата.
Строгая проверка увеличивает общее время, потому что полное декодирование готового файла — ещё один проход. Для архива, который будет храниться долго или удалит исходник после успешного преобразования, этот расход оправдан. Для временного прокси-файла можно выбрать отдельную проверку длительности или отказаться от полного декодирования, но тогда пользователь сознательно принимает меньшую степень контроля.
Временные файлы и temp-dir
Выборочное кодирование создаёт временные данные. По умолчанию ab-av1 организует рабочий каталог так, чтобы несколько параллельных процессов не сталкивались именами, а временные файлы удалялись после завершения. Через --temp-dir можно выбрать место хранения; то же назначение поддерживает переменная окружения. Это полезно, если системный диск мал, а рядом есть быстрый SSD с достаточным свободным пространством.
Права на рабочий каталог должны позволять создавать, читать, переименовывать и удалять файлы. Если программа сообщает о недостаточных разрешениях, решение состоит не в запуске с максимальными привилегиями, а в выборе каталога, доступного текущему пользователю. Особенно это актуально для сетевых путей, защищённых системных директорий и контейнерных сред.
Опция --keep сохраняет материалы выборок, когда они нужны для диагностики. В обычном сценарии это лишь занимает место. При поиске расхождений VMAF или проверке того, какие сцены фактически попали в выборку, сохранённые фрагменты полезны: их можно отдельно просмотреть и сопоставить с исходником. После анализа временные данные лучше удалить вручную, чтобы они не смешивались с новыми тестами.
Кэш выборок
Результаты sample-encode кэшируются, чтобы повторный поиск с теми же существенными условиями не кодировал уже известные точки заново. Это особенно заметно, когда пользователь меняет только целевой VMAF и повторяет crf-search: часть CRF может быть взята из кэша. В выводе такие результаты помечаются, что помогает отличить мгновенно возвращённую запись от нового кодирования.
Ключ кэша учитывает вход и настройки кодирования и измерения, включая важные параметры энкодера. Для SVT-AV1 учитывается версия библиотеки, обнаруживаемая через FFmpeg, чтобы результат не переиспользовался после существенной смены кодера как будто условия прежние. Тем не менее при подозрении на странный результат кэш можно отключить через --cache false либо соответствующую переменную окружения и повторить измерение с нуля.
Отключать кэш постоянно нет необходимости. Его смысл — экономить время в итеративной настройке. Но при сравнительном тестировании полезно заранее решить методику: либо разрешить кэш как оптимизацию, если он точно соответствует параметрам, либо очистить/отключить его для полностью независимых прогонов. Главное — не путать скорость получения повторного результата со скоростью реального кодирования выборки.
Человекочитаемый и JSON-вывод
Для интерактивной работы ab-av1 показывает строки прогресса, результаты проверенных CRF и итоговые оценки в удобном для терминала виде. Для автоматизации предусмотрен --stdout-format json. В режиме поиска сообщения передаются как последовательность JSON-объектов, а выборочное кодирование добавляет поля, по которым можно определить тип события, CRF и использование кэша. Это надёжнее, чем разбирать регулярными выражениями оформленный прогресс.
Скрипт, использующий JSON, должен всё равно проверять код возврата процесса и сообщения об ошибках. Наличие последней строки с числом не гарантирует, что весь запуск был успешным, если оболочка неверно объединила stdout и stderr. Полезная схема — читать структурированный stdout отдельно, сохранять stderr для диагностики и прекращать дальнейшее кодирование, если процесс завершился с ошибкой.
JSON делает ab-av1 удобным компонентом более крупного конвейера. Например, внешний скрипт может выполнить crf-search, получить найденный CRF, затем построить собственный вызов FFmpeg с нестандартным маппингом потоков. При этом сам ab-av1 не становится системой очередей или менеджером медиатеки: планирование заданий, повторные попытки и каталогизация остаются ответственностью внешней оболочки.
Пакетная обработка и отсутствие встроенной очереди
Основные команды принимают один входной файл, поэтому собственного окна очереди, списка заданий и диспетчера пакетной обработки нет. Несколько файлов обычно обрабатывают циклом оболочки, скриптом PowerShell, Bash или внешним менеджером. Это даёт гибкость, но требует самостоятельно определить правила именования, реакцию на ошибки и степень параллелизма.
Запускать много тяжёлых кодирований одновременно не всегда эффективно. SVT-AV1 способен загрузить CPU сам по себе, а параллельные VMAF-процессы также требуют ресурсов. Для аппаратных кодеров ограничением может стать число поддерживаемых сессий, пропускная способность памяти или декодирование. Поэтому внешний пакетный сценарий должен начинаться с умеренного параллелизма и измерять реальную производительность, а не просто запускать по процессу на каждый файл.
ab-av1 технически разделяет временные каталоги для одновременных экземпляров, поэтому параллельные запуски возможны. Однако это не означает автоматического балансировщика. Пользователь сам решает, сколько процессов безопасно держать, где расположить временные файлы и как не переполнить диск. Для большого архива полезно сначала прогнать несколько репрезентативных файлов и только затем масштабировать очередь.
Диагностика через RUST_LOG
Когда стандартного сообщения недостаточно, переменная RUST_LOG=ab_av1=debug включает подробные журналы ab-av1, в том числе фактические вызовы FFmpeg. Это один из самых полезных инструментов при расхождении ожиданий: можно увидеть выбранный кодер, фильтры, параметры входа и команду метрики, а затем повторить проблемный FFmpeg-вызов отдельно.
Уровень info подходит для более компактного наблюдения за этапами, debug — для разбора деталей. Длинный лог лучше сохранять в файл средствами оболочки, особенно если ошибка появляется только после десятков минут. При публикации такого журнала следует удалить личные пути и имена файлов, если они содержат нежелательные данные; для самой диагностики ab-av1 достаточно технической части команды и вывода FFmpeg.
Если ошибка связана с самим кодером, ручной повтор команды FFmpeg обычно быстрее показывает первопричину. Если FFmpeg отдельно работает, а ab-av1 нет, тогда следует смотреть различия между ручным вызовом и сформированными аргументами, состояние кэша, фильтры метрики и временный каталог. Такой последовательный подход лучше случайного перебора флагов.
Типовые ошибки и способы решения
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Команда FFmpeg не найдена | FFmpeg отсутствует в PATH | Проверить запуск ffmpeg из той же оболочки и исправить PATH |
| Нет фильтра VMAF | Сборка FFmpeg без libvmaf | Проверить список фильтров и использовать подходящую сборку |
| Не найден подходящий CRF | Конфликт цели качества, размера или диапазона | Проверить min/max CRF, целевую метрику и max-encoded-percent |
| Размеры потоков не совпадают | Фильтры эталона и результата дают разную геометрию | Проверить vfilter, reference-vfilter и vmaf-scale |
| Аппаратный кодер не стартует | Нет поддержки устройства, драйвера или формата | Сначала проверить тот же кодер прямой командой FFmpeg |
| Ошибка записи временных файлов | Нет прав или места в рабочем каталоге | Выбрать доступный temp-dir и проверить свободное место |
| Прогноз VMAF выше полного измерения | Выборки не представляют сложные сцены | Увеличить число проб и измерить готовый файл полностью |
| Неподдерживаемый pixel format | Кодер не принимает выбранную глубину или субдискретизацию | Проверить форматы конкретного FFmpeg-энкодера |
| Файл короче исходника | Ошибка декодирования или преждевременное завершение | Использовать fail-fast и проверку длительности |
| Готовый файл декодируется с ошибкой | Повреждение источника или результата | Включить verify-decode и изучить stderr FFmpeg |
Failed to find a suitable crf
Сообщение означает, что в исследованном диапазоне не найден вариант, одновременно удовлетворяющий условиям. Первым шагом нужно посмотреть последнюю протестированную точку: достаточно ли её VMAF/XPSNR и проходит ли процент размера. Если качество уже ниже порога, но размер приемлем, цель качества слишком жёсткая для текущего диапазона. Если качество высокое, но размер всё ещё превышает лимит, ограничение размера может быть недостижимым без смены кодера или preset.
Не стоит одновременно менять пять параметров. Сначала уберите или ослабьте ограничение размера и убедитесь, что поиск вообще достигает метрики. Затем верните ограничение и сравните. Если проблема появляется только с пользовательским фильтром, проверьте его отдельно. Такой поэтапный метод позволяет понять, какая именно граница блокирует решение.
Ошибки VMAF при несовпадении размеров
libvmaf требует сопоставимых кадров. Несоответствие может появиться после поворота, чистой апертуры, необычных метаданных MOV, явного scale или различающихся фильтров эталона и результата. Нужно определить фактические размеры после фильтров, а не ориентироваться только на заявленные 1920×1080 в контейнере. Если кодирование меняет геометрию, настройте --reference-vfilter так, чтобы сравнение соответствовало выбранной методике.
Автоматический --vmaf-scale удобен, но в нестандартной вертикальной геометрии или при собственном масштабировании полезно проверить сгенерированную команду через debug-лог. Если автоматический режим не отражает нужную постановку задачи, явный размер делает методику прозрачнее. После изменения масштаба старые оценки сравнивать с новыми напрямую уже нельзя.
Проблемы XPSNR на 10-битном видео
Если фильтр XPSNR не принимает автоматически выбранный формат, ab-av1 позволяет задать --xpsnr-pix-format. Типичный диагностический вариант — проверить совместимый 4:2:0 формат, а затем удостовериться, что обе стороны анализируются одинаково. Цель не в снижении разрядности результата кодирования, а в том, чтобы фильтр качества получил допустимый формат для сравнения.
Длинные фильмы и неоднородный материал
На многочасовом видео стандартный интервал выборок создаёт ограниченное число коротких окон. Это резко сокращает время поиска, но именно здесь сильнее риск пропустить редкий эпизод. Если фильм большую часть времени статичен, а несколько сцен содержат интенсивное движение, средняя выборка может быть оптимистичной. Для таких файлов стоит уменьшить --sample-every, увеличить минимальное количество выборок или выполнить отдельные тесты на известных сложных местах.
Увеличение --sample-duration даёт больше кадров из каждой выбранной области, но повышает время каждого шага CRF. Уменьшение интервала даёт больше разных областей по всей длительности. Это разные способы повысить репрезентативность. Если проблема в редких сценах, чаще полезнее получить больше географически распределённых по времени точек, чем сделать прежние точки очень длинными.
После auto-encode полный vmaf или xpsnr по готовому файлу показывает среднее по всему материалу, но даже он не заменяет просмотр худших сцен. Средняя метрика способна скрывать локальные провалы. Для архива с важным качеством имеет смысл сочетать три уровня: выборочный поиск, полное измерение и визуальную проверку нескольких сложных эпизодов.
Зерно, шум и сложные текстуры
Зернистый материал труднее интерпретировать по VMAF. Кодер может потратить много битов на сохранение случайной текстуры, а режим синтеза зерна способен визуально воспроизвести характер шума без совпадения отдельных зёрен с эталоном. Метрика видит разницу пиксельных структур и может снижать оценку, даже если человек воспринимает результат приемлемо. Поэтому выбирать параметры зерна только по VMAF не следует.
На сильно зашумленном источнике полезно сначала решить творческую задачу: нужно ли сохранять исходный шум, синтезировать похожее зерно или предварительно очищать картинку. ab-av1 не принимает это решение за пользователя. Он измеряет то, что получает после заданных фильтров и параметров кодера. Если включено шумоподавление через --vfilter, по умолчанию эталон для VMAF проходит ту же цепочку, и метрика перестаёт оценивать потерю, вызванную самим шумоподавлением.
Для таких источников особенно важен принцип неизменной методики. Сравнивайте CRF при одном наборе настроек зерна, одном фильтре, модели и масштабировании. Если меняется психовизуальная настройка энкодера, выполните новый поиск. Иначе число VMAF будет смешивать эффект разных преобразований и не поможет понять, что действительно улучшило результат.
Изображения и AVIF
Команды кодирования и поиска умеют работать не только с видео, но и с изображениями, когда результатом становится AVIF. Логика остаётся похожей: можно подобрать CRF по VMAF на изображении и выполнить кодирование. Однако ограничения размеров конкретного AV1-энкодера становятся заметнее, поэтому при несовместимой геометрии один кодер может отказаться от входа, тогда как другой, например libaom-av1, поддержит больше вариантов.
Для одиночной картинки понятие выборок по времени не применяется так же, как для фильма. Важнее корректная геометрия и сравнение эталона с закодированным изображением. Если задача связана исключительно с массовой обработкой фотографий, специализированный AVIF-конвертер может быть проще; сильная сторона ab-av1 здесь именно в единой логике целевого качества вместе с видеосценариями.
Чего в ab-av1 нет
У программы нет таймлайна, визуального монтажа, окна предпросмотра эффектов и инструмента ручной расстановки переходов. Она не предназначена для склейки эпизодов как монтажная система, не предлагает интерактивной цветокоррекции, стабилизации или рисования масок. Отдельные преобразования возможны лишь через строку FFmpeg-фильтра и рассматриваются как часть подготовки потока к кодированию.
Нет встроенного захвата экрана, камеры, потоковой трансляции, записи дисков или DVD/Blu-ray-авторинга. ab-av1 работает с уже доступным входным файлом или изображением. Она также не является хостом плагинов: расширение поведения происходит через возможности FFmpeg, дополнительные аргументы кодера и внешние сценарии. Это важно учитывать, чтобы не ожидать функций универсального видеокомбайна от узкой утилиты качества.
Нет графического менеджера профилей устройств. Совместимость результата с телевизором, телефоном или браузером пользователь обеспечивает выбором кодека, контейнера, профиля, формата пикселей и аудио. Если требуется набор готовых пресетов для устройства, проще выбрать конвертер с таким интерфейсом. ab-av1 выгоднее там, где цель формулируется через измеряемое качество и воспроизводимую команду.
Практический сценарий: подобрать AV1 для архива
Для архивного перекодирования разумно начать с проверки FFmpeg и нескольких типичных исходников. Сначала выполните sample-encode на двух-трёх CRF с целевым preset, чтобы понять диапазон VMAF и скорость. Затем запустите crf-search с выбранной нижней границей метрики. Если прогноз размера выглядит разумно, используйте auto-encode либо отдельный encode с найденным CRF.
На финальном проходе включите строгую проверку, если исходник после успешного результата планируется удалять или переносить в холодный архив. После завершения измерьте VMAF готового файла полностью и просмотрите сцены с движением, дымом, тёмными градиентами и мелкой фактурой. Если полный результат заметно хуже выборочного прогноза, скорректируйте плотность выборок для материалов такого типа и повторите поиск.
Затем сохраните полную команду вместе с параметрами кодера. Для воспроизводимости важны не только CRF и VMAF, но и preset, формат пикселей, фильтры, ключевые кадры и дополнительные аргументы. Один CRF без окружения мало говорит о том, как получен файл.
Практический сценарий: уменьшить размер при заданной границе качества
Когда размер важен так же, как качество, добавьте --max-encoded-percent к целевой метрике. Сначала не делайте процент чрезмерно жёстким: задача — увидеть, находится ли область, где оба условия совместимы. Если поиск проходит, уменьшайте лимит постепенно и сравнивайте найденный CRF. Если перестаёт проходить, граница между качеством и размером уже обнаружена.
После этого можно сравнить preset или другой кодер. Медленнее не всегда означает практически лучший выбор: экономия нескольких процентов размера может не оправдать кратный рост времени. ab-av1 даёт одинаковую схему измерения для экспериментов, поэтому решение можно принять по фактическим VMAF/XPSNR, прогнозу размера и скорости, а не по общему рейтингу кодеров.
Не забудьте, что процент относится к видеопотоку. Если итоговый файл почти не уменьшился из-за нескольких больших аудиодорожек, это не обязательно ошибка поиска. Отдельно измерьте объём видео и остальных потоков, затем решите, нужно ли перекодировать аудио или оставить его без изменений.
Практический сценарий: сравнить CPU и GPU
Для честного сравнения программного SVT-AV1 и аппаратного AV1 задайте одинаковую модель VMAF, фильтры и исходник, но выполняйте отдельный поиск для каждого энкодера. Не копируйте CRF между ними. Зафиксируйте фактическое время полного прохода, размер видеопотока и полный VMAF результата. Так станет видно, сколько места или качества стоит выигрыш по скорости.
Если аппаратный кодер не принимает тот же формат пикселей, используйте ближайший совместимый вариант и отметьте это как различие теста. Для оценки устройства важна реальная конфигурация, а не искусственная попытка заставить два кодера использовать недоступные им режимы. Если один путь требует аппаратного декодирования через --enc-input, это также часть сравниваемой системы.
Практический сценарий: изменить разрешение и сохранить понятную метрику
Предположим, исходник нужно уменьшить перед AV1-кодированием. Добавьте scale через --vfilter и сначала определите, что именно требуется измерить. Если цель — оценить только потери кодера после уменьшения, штатное применение фильтра к эталонной стороне VMAF подходит. Если требуется оценивать конечный уменьшенный файл относительно исходного разрешения другой методикой, нужно явно настроить --reference-vfilter и масштабирование VMAF.
После выбора методики зафиксируйте её и не меняйте между CRF. Проверьте debug-лог, чтобы убедиться в фактических размерах обеих сторон. Ошибка на этом этапе может дать либо отказ, либо красивое, но бессмысленное число. Для нестандартных вертикальных роликов явная проверка особенно важна.
Практический сценарий: автоматизация в скрипте
Для скрипта предпочтителен структурированный stdout. Запускайте crf-search --stdout-format json, читайте объекты последовательно, сохраняйте найденный CRF и проверяйте код возврата. stderr оставляйте отдельным каналом для журналов. После успешного поиска можно вызвать encode или собственный FFmpeg с тем же кодером и параметрами.
Скрипт должен заранее определять поведение при ошибке: пропустить файл, повторить без кэша, записать запись в журнал или остановить всю очередь. Не стоит автоматически снижать целевой VMAF при любом отказе, потому что причина может быть технической — отсутствующий кодер, нехватка места или повреждённый вход. Сначала классифицируйте ошибку, и только затем меняйте условия качества.
Как строить репрезентативную выборку
Главная экономия времени в ab-av1 появляется потому, что поиск качества выполняется не на всём ролике, а на коротких фрагментах. Поэтому точность результата зависит от того, насколько эти фрагменты отражают реальное содержимое. Равномерное распределение проб хорошо работает на материале с относительно стабильной сложностью, но хуже описывает записи, где редкие динамичные сцены перемежаются длинными статичными эпизодами. Перед окончательным кодированием полезно хотя бы мысленно разделить файл на типы сцен: спокойные планы, движение камеры, мелкая фактура, темнота, титры, графика, шум.
--sample-every определяет временной шаг между областями анализа, а --sample-duration — длительность отдельной пробы. Уменьшение шага увеличивает разнообразие временных точек; увеличение длительности даёт больше кадров внутри каждой точки. Если проблема ожидается в редких сценах, обычно важнее увеличить число точек. Если сложность быстро меняется внутри каждого эпизода, полезнее сделать сами фрагменты длиннее. У этих двух параметров разные последствия, поэтому менять их как взаимозаменяемые не стоит.
--min-samples задаёт нижнюю границу количества проб там, где стандартное распределение дало бы слишком мало фрагментов. Это особенно полезно для коротких роликов: одна проба может случайно попасть в заставку или статичный кадр и создать ложное впечатление о всём файле. Увеличение минимального числа проб делает оценку устойчивее, хотя на очень коротком материале преимущества выборочного метода естественно уменьшаются.
Режим --thorough имеет смысл применять, когда цена ошибки выше цены дополнительного времени. Он не превращает выборку в полное покадровое исследование, поэтому после него всё равно остаётся статистическая неопределённость. Для мастер-файла, который будет храниться долго, разумно проверить несколько известных сложных фрагментов вручную и затем измерить готовый файл полной командой VMAF или XPSNR.
Почему прогноз размера не равен размеру готового файла
В результатах выборочного поиска ab-av1 прогнозирует прежде всего размер кодируемого видеопотока. Итоговый контейнер может быть заметно больше, если в нём сохраняются многоканальные аудиодорожки, субтитры, вложения или другие поддерживаемые потоки. Поэтому сравнивать прогноз с размером всего исходного MKV или MP4 без поправки на структуру потоков некорректно. Разница особенно заметна в файлах с несколькими дорожками без потерь.
Сам прогноз строится по коротким закодированным фрагментам и экстраполируется на длительность. Если распределение сложности по фильму неравномерно, реальный видеопоток отклонится от оценки. Это не обязательно ошибка программы: выборка могла содержать больше лёгких или, наоборот, более тяжёлых сцен. Чем однороднее материал и чем разнообразнее набор проб, тем полезнее прогноз как инструмент планирования.
Ограничение --max-encoded-percent следует понимать в том же контексте. Оно помогает отсечь CRF, при котором прогнозируемый видеопоток недостаточно уменьшается относительно исходного видеопотока. Этот параметр удобен как второй критерий поиска, но не гарантирует точный процент уменьшения контейнера. Если требуется лимит именно на конечный размер файла, после пробного результата нужно учесть неизменяемые дорожки и накладные расходы контейнера.
Метрика после фильтров: что именно сравнивается
Использование --vfilter требует заранее определить смысл измерения. ab-av1 применяет фильтр не только к кодируемой стороне: при расчёте VMAF он по умолчанию учитывает тот же видеопроцессинг и для эталонной стороны. Благодаря этому можно измерять потери самого сжатия после, например, одинакового масштабирования. Такое число отвечает на вопрос, насколько кодер испортил уже преобразованное изображение, а не насколько весь результат отличается от исходного разрешения.
--reference-vfilter позволяет явно изменить обработку эталона. Это необходимо, когда методика должна сравнить две стороны с разными фильтрами или когда автоматическое повторение основного фильтра не соответствует задаче. Здесь легко получить формально корректное, но методически неверное число: фильтры могут скрыть часть различий или, наоборот, создать несопоставимую геометрию. Поэтому пользовательские фильтры лучше сначала проверить на коротком фрагменте и посмотреть сформированный FFmpeg-вызов.
Изменение частоты кадров — особенно чувствительный пример. Для объективной метрики кадры должны быть синхронизированы; простой fps-фильтр способен изменить количество и временное соответствие кадров. Если одна сторона анализа интерпретируется с другой частотой, метрика теряет смысл или FFmpeg сообщает об ошибке. При подобных преобразованиях нужно проверять не только размер кадра, но и временную базу, частоту и фактическую последовательность сравниваемых кадров.
Масштабирование VMAF и вертикальное видео
Команда VMAF умеет автоматически выбирать масштаб анализа в зависимости от разрешения и модели. Для обычных горизонтальных форматов это снимает с пользователя часть рутины, но необычная геометрия требует проверки. Вертикальное видео, очень широкие кадры, нестандартное соотношение сторон и собственный scale-фильтр могут привести к тому, что автоматическое решение не совпадёт с задуманной методикой.
--vmaf-scale позволяет оставить масштаб без изменений, использовать автоматический режим или задать конкретную геометрию. Явное значение полезно не потому, что оно всегда точнее, а потому, что оно делает сравнение воспроизводимым. Если два эксперимента выполнены с разным масштабом анализа, их VMAF нельзя считать полностью сопоставимыми даже при одинаковом кодере и CRF.
Для вертикального исходника важно сохранять пропорции. Насильственное приведение к горизонтальному размеру с растяжением изменяет само изображение и делает результат бессмысленным. Если фильтр требует чётных размеров или определённой кратности, лучше использовать выражение масштабирования, которое сохраняет соотношение сторон и выдаёт геометрию, допустимую выбранному энкодеру.
VMAF или XPSNR: выбор критерия
VMAF и XPSNR — разные объективные показатели, поэтому одинаковое числовое значение не означает одинаковую планку качества. VMAF строится как перцептивная модель и широко применяется для оценки воспринимаемого ухудшения видео. XPSNR относится к улучшенным сигналовым метрикам и по-другому реагирует на ошибки. Выбирать между ними следует до сравнительного теста и не смешивать пороги между сериями.
В crf-search целевой XPSNR задаётся через --min-xpsnr вместо --min-vmaf. В sample-encode переключение на XPSNR выполняется отдельным флагом. Для полного файла существует самостоятельная команда xpsnr. Такая симметрия позволяет использовать одну методику: сначала быстрые пробы, затем поиск CRF и, при необходимости, полное измерение результата.
Для материала с синтетическим зерном, шумоподавлением, ресайзом или другими преобразованиями полезно посмотреть обе метрики на нескольких контрольных файлах, но окончательный автоматический порог лучше оставить один. Попытка одновременно оптимизировать разные показатели без заранее определённого приоритета может привести к постоянному пересмотру настроек. Метрика должна помогать принимать решение, а не заменять само определение цели.
Проверка доступности энкодера до долгого поиска
Имя, переданное через --encoder, должно реально существовать в установленном FFmpeg. То, что ab-av1 знает схему аргументов для NVENC, QSV, VAAPI, Vulkan или программного кодера, не создаёт соответствующую возможность в системе. Перед многочасовым заданием стоит выполнить короткий прямой тест FFmpeg с тем же энкодером и входным файлом. Так сразу выявляются отсутствие драйвера, неподдерживаемый профиль, неверное устройство и ограничения pixel format.
Для аппаратного пути одного наличия строки в списке кодеров недостаточно. FFmpeg может быть собран с поддержкой API, но драйвер или конкретный GPU не обязан предоставлять нужный AV1-профиль. Аналогично, устройство может кодировать 8-битное видео, но отказаться от выбранного 10-битного формата. В таком случае корректным решением будет подобрать допустимый аппаратный формат, а не пытаться заставить --pix-format работать вопреки ограничениям драйвера.
При переходе между программным и аппаратным кодированием нужно заново выполнить поиск CRF. Значения шкалы качества разных энкодеров не унифицированы. Даже два аппаратных семейства могут по-разному связывать параметр качества с фактическим битрейтом и искажением. ab-av1 полезен именно тем, что позволяет сравнить их по общей внешней метрике, а не по совпадению числа CRF.
Аппаратный ввод и --enc-input
Дополнительные входные аргументы FFmpeg передаются через --enc-input. Они нужны, например, для выбора аппаратного устройства или настройки аппаратного декодирования до открытия исходного файла. Положение таких параметров в FFmpeg существенно: входные опции не всегда можно без последствий перенести после -i. Поэтому ab-av1 отделяет их от обычных аргументов энкодера.
Аппаратное декодирование имеет смысл измерять как часть всего конвейера. На некоторых системах оно уменьшает загрузку CPU, на других стоимость копирования кадров между памятью CPU и GPU съедает выигрыш. Если фильтр качества всё равно требует системную память, часть кадров может возвращаться на CPU. Поэтому лучший вариант определяется не теоретической схемой, а временем полного теста и стабильностью конкретной конфигурации.
Если --enc-input приводит к ошибке ещё до начала кодирования, debug-лог покажет фактическое расположение аргументов в FFmpeg-команде. Затем тот же вызов можно сократить до минимального воспроизводимого теста. Такой подход отделяет проблему ab-av1 от проблемы драйвера или самой сборки FFmpeg.
Параметры через --enc: когда они нужны
--enc предназначен для дополнительных аргументов, которые относятся к выбранному FFmpeg-энкодеру или выходному процессу и не имеют отдельного удобного параметра ab-av1. Это важный механизм расширения: не приходится ждать специального флага для каждой настройки SVT-AV1, x265 или аппаратного кодера. Одновременно он требует понимать синтаксис FFmpeg и не дублировать настройки, которыми ab-av1 уже управляет сам.
Если один и тот же смысл задан двумя путями, итог становится трудно предсказуемым и плохо воспроизводимым. Например, не стоит одновременно задавать параметр качества штатным --crf и пытаться переопределить его через произвольный аргумент кодера. Для поиска ab-av1 должен контролировать величину, которую он изменяет между пробами. Дополнительные параметры лучше ограничивать теми характеристиками, которые остаются постоянными во всех точках поиска.
При сложной строке --enc особенно важно правильное экранирование оболочки. PowerShell, cmd, Bash и zsh по-разному трактуют кавычки, пробелы и специальные символы. Если параметр не дошёл до FFmpeg в ожидаемом виде, проблема может выглядеть как ошибка кодера. Debug-лог позволяет сравнить исходную команду пользователя с тем, что реально передано подпроцессу.
Сохранение аудио и субтитров
При обычном видеокодировании ab-av1 старается сохранить сопутствующие потоки исходника, а не создавать пустой видеофайл. Аудио по умолчанию можно копировать без повторного сжатия; при необходимости указывается другой аудиокодек или выполняется понижение многоканального звука до стерео. Субтитры также проходят через маппинг, если выбранный выходной контейнер способен их хранить.
Здесь действуют ограничения именно контейнера и FFmpeg. Поток, допустимый в MKV, не обязательно можно без перекодирования положить в MP4. Специальные data-дорожки, временной код и некоторые вложения могут потребовать исключения или другого контейнера. Если FFmpeg останавливается до первого кадра с сообщением о невозможности записать заголовок, нужно прежде всего посмотреть, какой поток он пытается скопировать.
Для сложного архива с множеством дорожек полезно сначала получить структуру через ffprobe и решить, что действительно должно попасть в результат. Если штатное отображение потоков не подходит, можно разделить задачу: использовать ab-av1 для поиска CRF, а финальную FFmpeg-команду построить самостоятельно с точным -map, метаданными и кодеками каждой дорожки. Так сохраняется сильная сторона поиска качества без ограничения собственным маппингом.
Кэш как часть воспроизводимого эксперимента
Кэш сохраняет результаты дорогих выборочных вычислений, чтобы повторный поиск с совпадающими условиями не кодировал те же точки заново. Это особенно полезно при уточнении диапазона CRF или повторном запуске после прерванного сценария. В терминале отметка о кэше помогает понять, какие значения были рассчитаны сейчас, а какие восстановлены.
Для сравнительного теста кэш безопасен только тогда, когда ключ полностью отражает параметры, влияющие на результат. Если меняется FFmpeg, энкодер, фильтры или другой существенный компонент и есть сомнение в актуальности сохранённых точек, независимый прогон без кэша проще интерпретировать. Скорость повторного запуска не должна смешиваться с оценкой производительности самого кодирования.
При замере времени нескольких preset нужно заранее решить, считается ли время получения кэшированного ответа. Обычно нет: сравнивать нужно реальные encode-проходы. Кэш полезен для рабочего процесса, но бенчмарк скорости должен строиться на одинаковом количестве фактически выполненной работы.
Проверка результата через --verify
Успешный код возврата энкодера ещё не доказывает, что файл полностью читается и совпадает по длительности с исходником. --verify добавляет проверку готового результата до того, как он займёт окончательное место. Она объединяет полное декодирование и сопоставление длительности в допустимом интервале. Для архивной обработки это полезнее, чем обнаружить повреждение через несколько месяцев.
--verify-decode и --verify-duration можно применять отдельно, если нужен только один тип контроля. Проверка декодированием дороже по времени, потому что весь результат снова читается, но она выявляет ошибки потока, которые могли остаться незаметными во время записи. Проверка длительности быстрее и ловит преждевременно оборванный файл, хотя сама по себе не гарантирует безошибочное декодирование каждого кадра.
--fail-fast решает соседнюю задачу: прекращает encode после первой ошибки, сообщённой FFmpeg, вместо продолжения с потенциально повреждённым результатом. Для сомнительного источника комбинация fail-fast и последующей verify-проверки даёт более строгую схему. Если важнее любой ценой получить максимум декодируемых кадров из повреждённого входа, политику ошибок нужно выбирать осознанно, а не включать строгий режим автоматически.
JSON как интерфейс для внешнего оркестратора
--stdout-format json предназначен для машинной обработки результатов без зависимости от ширины терминала, оформления прогресс-бара и человекочитаемых фраз. Внешняя программа может получать события поиска, найденный CRF, метрику и сведения о кэше, а затем принимать собственное решение. Это удобная граница ответственности: ab-av1 занимается выборочным качеством, а оболочка — очередью, базой данных, уведомлениями и политикой повторов.
Надёжный парсер не должен считать любой JSON-объект окончательным успехом. Нужно дождаться завершения процесса, проверить код возврата и отличить промежуточные события от итогового результата. stderr лучше сохранять отдельно, поскольку там остаётся диагностическая информация FFmpeg. Смешивание stdout и stderr в один поток снова превращает структурированный интерфейс в трудный для разбора журнал.
При пакетной автоматизации полезно сохранять рядом с результатом не только CRF, но и кодер, preset, целевую метрику, параметры выборки, pixel format и фильтры. Тогда найденное число можно воспроизвести позднее. Без этой информации CRF почти не имеет самостоятельного значения: другой энкодер или preset способен дать совершенно другую связь между числом и качеством.
Короткие клипы и изображения AVIF
На коротком ролике полный encode может быть настолько быстрым, что сложный выборочный поиск экономит мало времени. Но ab-av1 всё равно полезен как способ получить сопоставимый CRF для серии похожих клипов. Важно только не доверять одной слишком короткой пробе: минимальное число выборок и полный контрольный VMAF здесь часто стоят небольших дополнительных затрат.
Команды кодирования и оценки работают не только с видео, но и с изображениями при создании AVIF. Логика цели качества сохраняется: можно искать CRF, а затем кодировать изображение. Ограничения размеров зависят от выбранного AV1-энкодера; если один кодер не принимает геометрию исходной картинки, другой совместимый FFmpeg-энкодер может оказаться практичнее.
У изображения нет временной выборки в привычном смысле, поэтому прогноз времени и размера интерпретируется иначе, чем на фильме. Здесь ценность инструмента — в автоматическом выборе параметра по объективной метрике и в использовании той же FFmpeg-инфраструктуры. Для массовой фотоконвертации очередь всё равно придётся организовать внешним скриптом.
Старые и нестандартные источники
Контейнеры AVI, транспортные потоки, записи с переменной частотой кадров и файлы с нетипичными временными метками чаще требуют предварительной диагностики. Если FFmpeg при обычном чтении сообщает о несуществующих или немонотонных timestamp, ab-av1 наследует эту проблему. В таких случаях сначала следует добиться стабильного декодирования исходника прямой FFmpeg-командой и только затем запускать поиск качества.
Нестандартная clean aperture или метаданные поворота способны сделать фактическую отображаемую геометрию отличной от простых width/height, которые пользователь ожидает увидеть. При ошибках VMAF нужно проверять уже отфильтрованные кадры. В сложных MOV-файлах полезно отдельно посмотреть метаданные и убедиться, что FFmpeg одинаково применяет поворот и геометрию к эталону и искажённой стороне.
Повреждённый источник нельзя исправить выбором другого CRF. Если ошибка чтения появляется на одном и том же временном участке, сначала требуется решить вопрос декодирования или осознанно принять потерю кадров. Иначе поиск может строить прогноз на неполных фрагментах, а финальный файл закончится раньше ожидаемого. Именно для таких случаев контроль длительности и декодирования особенно ценен.
Как сравнивать preset без методической ошибки
Preset обычно меняет компромисс между скоростью и эффективностью кодера. Чтобы сравнить два значения, не следует кодировать их с одним и тем же CRF и объявлять меньший файл победителем: качество при равном CRF может различаться. Более корректно для каждого preset отдельно найти CRF, достигающий одной и той же целевой метрики, а затем сравнить время и размер видеопотока.
Выборки для обоих прогонов должны быть одинаково распределены, а фильтры, pixel format, keyint и дополнительные параметры — совпадать. Тогда изменение можно связать именно с preset. Если тест выполняется на нескольких роликах, лучше брать материал разных типов: анимацию, живое движение, тёмные сцены, текстуры. Один фильм редко представляет весь будущий архив.
После выборочного сравнения хотя бы один представитель каждого режима стоит закодировать полностью. Это проверяет, насколько прогноз размера и времени соответствует реальности. Если разница между preset мала, решение можно принимать по эксплуатационным условиям: доступному времени, энергопотреблению и необходимости быстро освободить исходное хранилище.
Практический порядок разбора сбоя
- Сначала определить этап: чтение входа, создание выборки, вычисление метрики, поиск CRF, финальный encode, проверка или перенос результата.
- Затем повторить проблему на одном файле без внешней пакетной оболочки, чтобы исключить ошибки цикла, кавычек и переменных.
- Включить debug-журнал и найти фактический вызов FFmpeg, на котором возник отказ.
- Запустить этот FFmpeg-вызов отдельно и сократить его до минимального набора аргументов, сохраняющего проблему.
- Проверить доступность кодера, фильтра VMAF/XPSNR, pixel format, устройство, права на временный каталог и свободное место.
- Только после технической проверки менять целевой VMAF/XPSNR, диапазон CRF или ограничение размера.
Такой порядок важен потому, что одинаковое итоговое сообщение может иметь разные причины. Например, не найден подходящий CRF бывает математическим результатом слишком строгих условий, но сбой метрики или некорректный фильтр способен привести к похожей остановке. Сначала нужно убедиться, что все тестовые точки рассчитаны корректно, и лишь потом трактовать их как качество кодера.
Что проверять перед большой очередью
- FFmpeg запускается из той же оболочки, где будет работать ab-av1, и содержит нужный энкодер и фильтр метрики.
- Короткий encode выбранным кодером проходит с нужным pixel format и дополнительными аргументами.
- Путь вывода и temp-dir доступны на запись, а свободного места хватает на самый большой ожидаемый файл.
- На одном типичном исходнике выполнен
sample-encodeи результат метрики выглядит правдоподобно. - На сложном исходнике проверено, что выбранный шаг выборки не пропускает характерные тяжёлые сцены.
- Структура аудио, субтитров и data-потоков совместима с целевым контейнером либо задан собственный маппинг.
- Определена политика ошибок: остановка очереди, пропуск файла или повтор после ручной проверки.
- Для важных файлов включена подходящая проверка длительности и декодирования результата.
После такого теста можно запускать внешний цикл по каталогу. Сам ab-av1 не управляет приоритетами и количеством одновременных заданий, поэтому параллелизм лучше увеличивать постепенно. На CPU-кодировании один процесс часто уже использует большинство вычислительных ресурсов; на GPU ограничителем становится конкретное устройство, аппаратный декодер, память и число сессий.
Сравнение ab-av1 с аналогами
| Программа | Лучше подходит для | Главное ограничение |
|---|---|---|
| ab-av1 | Подбора единого CRF по выборкам VMAF или XPSNR и последующего FFmpeg-кодирования | Нет встроенного GUI и очереди заданий |
| Av1an | Параллельного покадрово-сценового кодирования и режима Target Quality по метрикам | Более сложная система зависимостей и разбиения на сцены |
| FFmpeg | Полного ручного контроля кодеров, фильтров, потоков и контейнеров | Сам по себе не выполняет автоматический поиск CRF по выборочному VMAF как ab-av1 |
| NEAV1E | Пользователей, которым нужен графический интерфейс для AV1-кодирования и целевого VMAF | Сценарий качества и доступные кодеры зависят от возможностей конкретного GUI |
| FastFlix | Графической настройки программных и аппаратных кодеров H.264, HEVC и AV1 | Не ориентирован на компактный CLI-поиск единого CRF по выборкам ab-av1 |
Если главное требование — быстро получить один CRF для всего файла по целевому VMAF/XPSNR, не строя сценовый конвейер, ab-av1 остаётся наиболее прямым вариантом. Av1an лучше подходит, когда нужна более сложная обработка по сценам и параллельные рабочие процессы. FFmpeg выигрывает в низкоуровневом контроле, но автоматизацию поиска качества придётся писать самостоятельно. NEAV1E и FastFlix удобнее тем, кому важнее визуальная настройка, чем минимальный терминальный интерфейс.
Как интерпретировать результат поиска
Строка с найденным CRF не должна быть единственным сохранённым результатом. Рядом важны средняя метрика выборок, прогноз размера и оценка времени. Если CRF близок к границе диапазона, это сигнал проверить, не ограничивает ли поиск пользовательская настройка. Если размер находится почти на пределе --max-encoded-percent, небольшое отличие реального материала от выборок может вывести полный файл за ожидаемую область.
Отметка cache означает, что конкретная точка была взята из сохранённых результатов. Это нормально, если условия совпадают. Если тест выполняется после серьёзной смены окружения и поведение кажется подозрительным, повтор без кэша проще, чем пытаться гадать о причине. Наличие кэша должно ускорять методику, а не делать её непрозрачной.
Прогноз времени — ориентир для планирования. На первом длинном файле лучше сравнить его с фактическим временем и оценить систематическую погрешность на своей машине. После этого прогнозы следующих файлов становятся практичнее, особенно если кодер и preset одинаковы.
Совместимость и выбор платформы
Для Windows проект публикует готовый исполняемый файл, для Linux — статически собранный x86-64 пакет. Установка через Cargo позволяет собирать программу там, где доступна современная среда Rust и нужные зависимости; в экосистемах macOS существуют пакетные рецепты, которые ставят ab-av1 вместе с FFmpeg. На всех системах практическая совместимость определяется прежде всего тем, какие кодеры и фильтры доступны в установленном FFmpeg.
Перенос одной и той же команды между системами может требовать корректировки путей и аппаратных аргументов. NVENC, QSV, VAAPI, Vulkan и VideoToolbox зависят от платформы и FFmpeg-сборки. Программные libsvtav1, libx264 и libx265 обычно проще воспроизводить между машинами, но версии библиотек тоже способны менять скорость и результат. Для строгого сравнения лучше фиксировать окружение вместе с командой.
Когда ab-av1 подходит лучше всего
Утилита особенно полезна пользователю, который уже умеет работать с терминалом, хочет кодировать через FFmpeg и устал подбирать CRF вручную для каждого исходника. Она сокращает дорогой полный перебор до серии коротких тестов, автоматически связывает качество с выбранным кодером и даёт прогноз до финального прохода. Это сильнее всего проявляется на длинных файлах, где один неудачный полный encode стоит часов.
Она также подходит для воспроизводимых серверных сценариев: команда компактна, есть JSON-вывод, кэш и управляемые временные каталоги. При этом ab-av1 не пытается скрыть FFmpeg. Пользователь может передать фильтр, специфические аргументы кодера и аппаратные настройки, а при проблеме увидеть фактическую FFmpeg-команду через debug-лог.
Когда лучше выбрать другой инструмент
Если задача состоит в монтаже, визуальной цветокоррекции, стабилизации, работе с несколькими дорожками на таймлайне или создании титров, ab-av1 не решает её. Если пользователь хочет выбрать устройство из списка, перетащить файл и не видеть параметров кодера, графический конвертер будет проще. Если требуется разная целевая сложность для каждой сцены, сценовый фреймворк вроде Av1an предлагает более подходящую архитектуру.
Для единичного простого перекодирования, где CRF уже известен и метрика не нужна, прямой FFmpeg тоже может быть рациональнее. Сила ab-av1 появляется именно тогда, когда выбор CRF является частью задачи и его нужно обосновать измерением. Не стоит добавлять дополнительный слой только ради самого факта использования программы.
Итоговая рабочая схема
Надёжный процесс начинается с исправного FFmpeg и понятного исходника. Затем выбираются кодер, preset, формат пикселей, фильтры и структура ключевых кадров. После этого sample-encode помогает нащупать область качества, crf-search уточняет CRF по VMAF/XPSNR и ограничению размера, а auto-encode либо encode создаёт полный результат. На важном материале завершает процесс --verify, полное измерение и визуальная проверка сложных сцен.
Главное достоинство ab-av1 — не сам AV1-кодек, а управляемая обратная связь между короткими пробами, объективной метрикой и параметром качества энкодера. Главное ограничение следует из того же устройства: средняя метрика выборок не видит каждую сцену, а FFmpeg остаётся обязательной частью рабочего окружения. Если учитывать эти границы, программа позволяет заметно сократить число полных пробных кодирований и сделать выбор CRF воспроизводимым.