Термин
CABAC
Context-adaptive binary arithmetic-кодер в H.264 Main/High и HEVC. На ~10–20 % лучше CAVLC; доминирующий entropy-кодер семейства AVC.
CABAC – финальный этап сжатия внутри H.264, HEVC и нескольких других кодеков: часть, которая берёт всё, что энкодер уже выяснил про кадр, и упаковывает в как можно более короткую последовательность бит перед сохранением. Полное название – Context-Adaptive Binary Arithmetic Coding, но важнее практический эффект: CABAC сам по себе делает H.264-файлы примерно на 10–20 % меньше, чем при использовании более простого entropy-кодера (`cavlc`), который применяли ранние имплементации H.264.
Хитрость CABAC – в части «context-adaptive». Вместо фиксированных битовых длин для символов он постоянно обновляет статистику по уже встреченному в текущем кадре и подстраивает кодирование на лету. Символ, оказавшийся частым, получает очень короткий код; редкий – более длинный. Итог математически близок к теоретическому минимуму бит, необходимых для кодирования (предел энтропии).
Подвох – CABAC вычислительно тяжелее предшественника и по природе своей последовательный: декодирование каждого символа зависит от состояния, оставленного предыдущим, и параллелить это сложно. Поэтому ранние аппаратные декодеры H.264 иногда поддерживали только более простой CAVLC, а профиль Baseline H.264 (используемый для видеозвонков и устройств с малым потреблением) вообще не включает CABAC. На уровне бизнес-решений вы редко трогаете CABAC напрямую – это просто часть причины, по которой «Main»- и «High»-профили выглядят как Baseline, но при заметно меньшем bitrate.
Считаете параметры для своего продукта?
Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.