← На главную

Почему H.264 ужимает видео в тысячи раз

29.10.2026 15:53 · hackernews

H.264 решает простую проблему: несжатое видео занимает неприлично много места. Ролик 1080p с частотой 60 кадров в секунду требует около 370 МБ данных каждую секунду. Даже диска Blu-ray на 50 ГБ хватило бы примерно на две минуты. Чтобы такое видео можно было хранить и передавать, пришлось научиться выбрасывать всё лишнее.

Первый приём — квантование. Изображение переводят в частотную область, где плавные перепады яркости отделены от мелких деталей. Тонкую сетку, шероховатости и шум можно ослабить без заметной потери смысла картинки. Глаз всё равно не заметит большинства таких изменений, зато данных останется в разы меньше.

Второй трюк связан с цветом. Человек гораздо лучше различает яркость, чем тонкие цветовые оттенки. Поэтому яркостную составляющую сохраняют в полном разрешении, а цветовую — в уменьшенном. Это называется chroma subsampling и позволяет примерно вдвое уменьшить объём цветовой информации.

Дальше начинается работа со временем. H.264 не хранит каждый кадр как самостоятельную фотографию. Полные I-frame встречаются лишь изредка. Между ними лежат P-frame и B-frame, которые описывают, куда сдвинулись блоки изображения. Если камера неподвижна, кодек сохраняет фон один раз и записывает только движение мяча, человека или курсора. Поэтому перемотка назад иногда задерживается: декодеру приходится вернуться к ближайшему полному кадру и заново восстановить цепочку.

Напоследок энтропийный кодер без потерь убирает повторы в оставшихся данных. В примере из статьи пятисекундное видео весом 1,2 ГБ ужалось до 175 КБ. Это не одна хитрость, а целый набор согласованных решений, отработанных десятилетиями.

Особенно нагляден контраст с PNG: триста кадров видео заняли 175 КБ, тогда как один кадр в PNG — больше мегабайта. При этом визуально ролик почти не отличался от исходника.

Читать оригинал →