ВидеоРазмер сжатие видео в браузере Сжать видео

Как это устроено

Что происходит с видео, когда вы нажимаете «Сжать», и где у этого пределы.

Проверьте свой браузер

Сжатие делает сам браузер, поэтому первым делом стоит узнать, что он умеет. Проверка ничего не загружает и занимает секунду.

Одна задача

ВидеоРазмер делает одну вещь: уменьшает видео до размера, который вы назвали. Здесь нет обрезки, склейки, субтитров и конвертации в GIF — только сжатие, зато с обещанием, которое можно проверить: итоговый файл не больше выбранного размера.

Что происходит после нажатия «Сжать»

  1. Чтение. Браузер читает файл по кусочкам, не загружая его целиком в память и никуда не отправляя. Узнаём длительность, размер кадра, частоту кадров, кодек и есть ли звук.
  2. Расчёт. Битрейт = размер × 8 × 0,96 / длительность, минус звук. 4 % — запас на служебные данные файла и неточность кодера. Мегабайты десятичные: 1 МБ = 1 000 000 байт.
  3. Разрешение. Берём самое большое из 1080p, 720p, 540p, 480p, 360p и 240p, при котором на каждый пиксель кадра приходится не меньше 0,08 бита. Меньше — картинка рассыпается на квадраты, поэтому лучше чёткий 480p, чем мутный 1080p. Выше исходника не поднимаем, частоту кадров ограничиваем 30.
  4. Сжатие. Видеокодер браузера (H.264) пересобирает ролик, звук кодируется в AAC. Результат — обычный MP4.
  5. Проверка. Если файл вышел больше цели, запускаем ещё проход с меньшим битрейтом. Если короткий ролик вышел заметно меньше цели, пробуем один проход вверх ради качества. Файл больше цели не отдаём никогда.

Звук на разных устройствах

Chrome, Edge и Safari с iOS 26 кодируют звук сами. Firefox и Chrome на Linux своего AAC-кодера не имеют — для них страница догружает небольшой кодер. У Safari на iOS 16.4–18 нет ни кодера, ни декодера звука, поэтому звук копируется из оригинала без изменений, а его объём вычитается из бюджета видео.

Замеры, на которых это построено

Перед запуском мы прогнали движок на тестовых роликах. Ноутбук Apple с чипом серии M, Chrome: видео 1080p длиной 60 секунд и весом 144 МБ сжалось до 25 МБ за 5,9 секунды, итог на 4,5 % меньше цели. HEVC-ролик с HDR и поворотом, как с iPhone, — до 10 МБ за 4,2 секунды. В движке WebKit итог выходил на 12–25 % меньше цели: качество там чуть ниже возможного, но размер всегда в пределах. Запасной способ на том же ноутбуке: минута 1080p до 10 МБ — за 38 секунд в Chrome (против 5 секунд основным), HEVC-ролик с HDR длиной 30 секунд — за 72 секунды в Firefox. Ролики были синтетическими; на реальных видео с телефонов числа будут другими, и мы уточняем их по статистике попыток.

Чего мы пока не умеем

  • Быстро сжимать в Firefox на Android и в Safari до iOS 16.4 (там нет встроенного видеокодера) и ролики HEVC в Firefox и на части Android-телефонов (браузер их не читает). В этих случаях работает запасной способ — свой модуль сжатия, около 10 МБ загрузки. Он в 7–25 раз медленнее и требовательнее к памяти, поэтому принимает до 200 МБ на телефоне и до 500 МБ на компьютере.
  • Сохранять HDR: результат всегда в обычном динамическом диапазоне.
  • Сжимать в формат H.265 или AV1 — только H.264, зато такой файл открывается везде.

Если сжатие не получилось или получилось странно, напишите нам — по таким письмам и по статистике мы решаем, что чинить первым.