Привет всем. Совсем недавно начал риппать этим кодеком. Публикую описание параметров энкодера, найденные в сети и рекомендации по ним. Часть технических терминов опущена для упрощения:
Encoder speed preset (Скоростной профиль)
Для Видео по Запросу (
VOD), диапазон начинается от 0 (ужасно медленно) до 6 (довольно быстро) в хорошем варианте.
В режиме
Реального Времени (
Realtime), такие как потоковое вещание (
streaming), дипапазон примерно от 5 до 10.
Для справки, по умолчанию выбирается 0. Вообще не оптимально...
Моя главная рекомендация выбирать профиль, основываясь на выборе скорости, удобства и качества.
В этом контексте, все профили реального времени исключить для версии кодека
aomenc, лучше воспользоваться в этом случае
SVT-AV1.
Таким образом,
CPU-2- оптимальный выбор для качества картинки.
CPU-3- хорошая середина, поддерживает большинство настроек включенными.
CPU-4- подойдет тем, кто хочет ускорить кодирование, с режима CPU-3многого не потеряется.
CPU-5- ухучшается качества за счет отключение нескольких надстроек, например loop restoration filtering.
CPU-6- самый скоростной и предельный режим для версии aomenc. Быстрее только SVT-AV1.
В-общем золотая середина
CPU-4 хватает в большинстве случаев, оптимален между качеством и скоростью.
Keyframe refresh intervals (Интервалы обновления ключевого кадра)
Код:
--kf-max-dist=240 --kf-min-dist=12
Указывает кодеру максимальное число кадров между ключевыми кадрами. Придерживайтесь "10-ти секундного правила": 240 для 24 fps, 300 для 30 fps, 600 для 60 fps.
Для лучшего поиска, перемотки используйте правило 5-ти секунд, что увеличит размер файла.
- указывает минимальное число кадров до установки ключевого. В основном это для того случая, когда алгоритм определения кадра не может установить внутриуровневый
(intra-refresh) или не удается обнаружить так называемые вспышки (
flashes) и помещает ключевые кадры по всей длине фильма.
Потоковые настройки (Threading options)
Код:
--threads=cpu-threads --sb-size=64
- для материала <=1080p
Код:
--threads=cpu-threads --sb-size=64 --tile-columns=1
- для еще более сильной нагрузки кодировщика и снижение нагрузки для декодирования, включения опции мозаики.
Код:
--threads=cpu-threads --sb-size=64 --tile-columns=2 --tile-rows=1
- если требуется улучшить многопоточность при воспроизведении, особенно при более высоких разрешениях.
Код:
--threads=cpu-threads --tile-columns=2 --tile-rows=1
- для материала >1080p
Код:
--threads=2 --sb-size=64
- дополнительный поток, если вы используете кодирование частями, даст прирост скорости.
Стандарт
AV1 описывает 2 типа СуперБлока: 64х64 и 128х128, позволяющие использовать крупные разделы на высоких разрешениях. Это не очень полезно при разрешениях(<=1080p), но существует для конкретных целей.
В версии
aomenc, стандартный анализатор выбирает их динамически. Это полезно для очень больших статичных СуперБлоков и разделов, что может сказаться вредным для скорости, а также качества картинки. Другой менее эффективный результат от использования СуперБлоков дает строковая поточность(
row threading).
Чтобы сбалансировать негативный эффект используют мозаичную поточность(
tile threading), для ускорения перемотки при воспроизведении.
Наконец, мозаика подчиняется 2 правилам:
--tile-columns=1 = 2^1 = 2 столбца мозаики.
--tile-columns=2 --tile-rows=1 = 2² столбцов x 2¹ строк = 4x2 мозаик = 8 мозаик
Общее число мозаик рассчитывается, как число стобцов умножить на число строк.
Контроль скорости (Rate Control)
Код:
--end-usage=q --cq-level=24
- режим Q, в принципе и есть модулированный квантизатор(
modulated quantizer), ближайший эквивалент режиму
CRF. Так что используйте его, если хотите максимум качества исходника без ограничения битрейта.
Режим
Ограниченного качества CQ (
Constrained Quality) говорит сам за себя. Не рекомендуется, если у Вас нет каких-то специфических требований.
Режимы
Переменного и Постоянного битрейтов VBR and CBR (
Variable and Constant Bitrate) необходимы при допустимом конечном размере материала. В других случаях - не рекомендуется.
Параметр
сq-level устанавливает уровень качества:
24 - неплохое качество;
20 - совсем неплохо;
с 18- начинается качественное кодирование, ну а после 30 сильная потеря.
35-40 материал качества Ютуба (потоковое видео). Что дальше низкокачественный мусор.
Глубина цвета и Цветовая субдискретизация(Bit-depth and chroma subsampling)
В стандарте AV1 имеется возможность кодирования глубиной от 8 и до 16 битами цвета. Даются следующие варианты на выбор: 8, 10 и 12.
Рекомендация всегда использовать 10-битное кодирование, даже если исходник 8-битный. В интернете преобладает большинство в таком качестве.
Для видео >=10 бит, старайтесь держаться параметров исходника, для "железной" совместимости.
Проходное кодирование и условия выбора (Encoding passes and lookahead)
По умолчанию в версии
aomenc выбирается 2-проходный режим(
--passes=2), который не нужно указывать явно. Он очень важен, поскольку позволяет активировать дополнительные надстройки.
По возможности старайтесь использовать этот режим.
В версии
aomenc кодека AV1 диапазон параметра
lag-in-frames находится от 0 до 48, без указания равен 35. Выставляйте по максимуму, что улучшит эффективность, но и повысит потребление оперативной памяти.
Другой эффект от этого дает кодеку определять тип кадра: 0-18 - нет определения; 19-32 - включен режим номер 1 определения кадра; выше 33 - активирует 2 режим, самый эффективный.
Временная фильтрация (Temporal filtering)
Код:
--arnr-strength=2 --arnr-maxframes=3
для видео с умеренным движением в кадре.
Код:
--arnr-strength=1 --arnr-maframes=3
для видео с высоким движением в кадре
для анимации.
Параметр
'--arnr-strength=X' влияет на силу фильтрации. Выше=сильнее=меньше детализация/артефактов. Подбирается опытным путем.
Пространственная и Пространственно-временная адаптивная квантизация (Spatial and spatio-temporal adaptive quantization)
Код:
--aq-mode=1 --deltaq-mode=1
умеренно-точное кодирование
Код:
--aq-mode=1 --deltaq-mode=0
более высокая точноть и зернистость
Код:
--aq-mode=1 --deltaq-mode=0 --enable-tpl-model=0
еще более сильная зернистость, не лучший вариант.
Можно еще отключить адаптивную квантизацию
(adaptive quantization) для стабильности изображения, но это не рекомендуется делать. Лучше отключать ее на низких битрейтах.
На выбор дается 3 режима aq-modes:
aq-mode=1 - дисперсионный режим, дающий больше битрейта блоками с низкой дисперсии.
aq-mode=2 - комбинированный, позволяющий добавить битрейта более быстрым сценам.
aq-mode=3 - циклический, используемый в основном для видеоконференций.
Рекомендуемый режим aq-mode=1, поскольку кодеры плохо работают с блоками дисперсии.
deltaq-mode=1 - основана на обьективных метриках, работает совместно с параметром tpl-mode. Хорош на низких-средних битрейтах, но при высоком начинает зернить, что снижает точность.
deltaq-mode=2 - похожий на режим 1, с большей нагрузкой на процессор. Не рекомендуется к использованию.