Вышел SVT-AV1 4.3.0 — свежий релиз кодировщика AV1 с оптимизациями под x86_64 и ARM.
Библиотека SVT-AV1 (Scalable Video Technology AV1) получила версию 4.3.0. Это реализация кодировщика видеоформата AV1, использующая аппаратные расширения распараллеливания вычислений в процессорах x86_64 и ARM. Изначально проект появился благодаря Intel и Netflix — им нужна была производительность, достаточная для перекодирования видео на лету и работы сервисов видео по запросу (VOD). Сейчас разработку курирует альянс Open Media (AOMedia), отвечающий за развитие AV1. Прежде проект жил в рамках OpenVisualCloud, где также создаются SVT-HEVC и SVT-VP9. Код открыт под лицензией BSD.
Собрать SVT-AV1 можно на любой архитектуре при наличии компилятора с поддержкой C99, но максимум отдачи дают системы x86_64 — там задействованы ассемблерные SIMD-оптимизации. Желательна поддержка AVX2, хотя хватит и SSE2. Объём потребляемой памяти зависит от числа задействованных ядер, которое регулируется опцией «—lp». Алгоритмы AV1 заметно сложнее конкурентов, поэтому кодирование требует куда больше ресурсов.
В новом выпуске переработаны компромиссы между качеством и скоростью для всех пресетов: нагрузка на CPU снизилась на 5-8% при том же уровне качества, а время кодирования в многопоточном режиме сократилось на 10-11%. Быстрее работают исключение неэффективных режимов кодирования (MD), расчёт векторов движения (MV) и параметров фильтров, вычисление размера частотных коэффициентов, поиск субпиксельных смещений, копирование блоков и отсеивание лишней детализации через RDOQ (Rate-Distortion Optimized Quantization). В многопоточном режиме алгоритм определения трансляции содержимого экрана теперь применяется только к I-кадрам — ради экономии ресурсов.
Появился экспериментальный флаг «—fast-decode 3» для ускорения декодирования статичных изображений, а также «—fgs-table» с поддержкой таблиц зернистости (film grain) и API FILM_GRAIN_EVENT для привязки параметров зернистости к кадрам. Выросла скорость кодирования без потерь. В режиме низких задержек распараллелена обработка блоков (tile). Добавлены опция «max_allowed_consecutive_frames_skips» для настройки пропуска кадров при постоянном битрейте (CBR) и параметр «max_hierarchical_levels» для управления пулом буферов при изменении размера mini-GOP.
Среди сборочных новшеств — опция «—mobile-build» (в CMake — MOBILE_BUILD) для 8-битной библиотеки под RTC, VOD и AVIF, а также опции CONFIG_ENABLE_* для отключения ненужных инструментов кодирования. На x86 реализованы 8-битные обработчики CDEF на AVX2 и SSE4.1 и 16-битные прямые преобразования на AVX2 и AVX-512. Код межкадрового предсказания, работы с палитрами и трансформаций ускорен через SSE4.1, оптимизированы обработчики квантования, копирования блоков, расчёта искажений и оценки субпиксельных различий. Для ARM добавлены варианты обработчиков с ускорением на инструкциях Neon.
