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