Короткое определение

Общее название прямоугольной области пикселей, обрабатываемой энкодером совместно – размеры от 4×4 до 128×128 в современных кодеках.

Block – единица пикселей, которую кодек обрабатывает совместно. Любой современный видеокодек режет каждый кадр на сетку блоков и обрабатывает каждый блок относительно независимо – предсказывает его содержимое, преобразует, квантует, кодирует. Размер и форма этих блоков – одно из самых больших архитектурных решений в любом кодеке и крупный источник compression-выигрышей каждого нового поколения.

Размеры со временем росли. MPEG-2 и H.264 использовали фиксированные макроблоки 16×16 пикселей – каждый кадр был просто сеткой одинаковых квадратов. HEVC ввёл variable-size `ctu` (Coding Tree Units) до 64×64, рекурсивно разбиваемые на меньшие блоки там, где картинке нужны более тонкие детали. AV1 расширил это до superblock 128×128, также рекурсивно разбиваемых. VVC использует CTU до 128×128 с дополнительной гибкостью для прямоугольных форм. Тренд понятен: большие блоки для плоских регионов (небо, стены – экономия на заголовках), маленькие – для детализированных (глаза, текст – точная передача деталей).

Для продуктовой команды размеры блоков напрямую всплывают только в причине, по которой каждое поколение кодеков требует больше вычислений. Более гибкое разбиение блоков означает, что у энкодера больше вариантов на каждый регион – это один блок 64×64, или четыре 32×32, или шестнадцать 16×16, или какой-то асимметричный микс? Энкодер оценивает варианты через `rdo` (rate-distortion optimisation) и выбирает лучший, что вычислительно дорого, но даёт лучшее сжатие. Это повторяющийся trade-off: каждое поколение кодеков требует больше CPU на кодирование, но выпускает меньшие файлы, и гибкость разбиения блоков – где живёт большой кусок этого выигрыша.

Считаете параметры для своего продукта?

Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.