Перейти к содержимому

Как работает oCompress

Что происходит, когда вы добавляете файл, как проверить, что ничего не загружается, и что на самом деле значит сжатие без потерь и с потерями.

Коротко

Когда вы открываете страницу инструмента, браузер загружает саму страницу и небольшую программу — компрессор. Когда вы добавляете файл, браузер читает его, компрессор обрабатывает его на вашем собственном процессоре, а результат возвращается вам в виде скачивания. Файл ни на одном этапе не передаётся по сети. Весь процесс выглядит так:

  1. Загрузка. Сначала загружаются страница и интерфейс инструмента. Модуль для конкретного типа файлов (изображения, видео и аудио или документы) скачивается, только когда вы добавляете подходящий файл, так что вы никогда не загружаете код, который не используете.
  2. Чтение. Браузер даёт странице доступ ровно к тем файлам, которые вы выбрали, и ни к чему больше на вашем устройстве.
  3. Сжатие. Работа идёт в Web Worker — фоновом потоке браузера, поэтому страница не зависает, а сжатие можно отменить в любой момент.
  4. Сохранение. Сжатый файл создаётся в памяти (большие видео — в закрытом хранилище браузера) и сохраняется через обычное скачивание браузера — по одному или одним ZIP-архивом.

Что выполняется в вашем браузере

Современные браузеры умеют выполнять скомпилированный код почти с нативной скоростью благодаря WebAssembly и дают веб-страницам доступ к аппаратным видеокодерам устройства через интерфейс WebCodecs. oCompress использует и то и другое:

  • Изображения: MozJPEG для JPEG, OxiPNG и квантователь палитры для PNG, кодер WebP из библиотеки libwebp от Google, libavif для AVIF, SVGO для SVG, а также отдельные декодеры и кодеры для GIF и TIFF. Кодеки JPEG, PNG, WebP и AVIF скомпилированы в WebAssembly.
  • Видео и аудио: WebCodecs вместе с библиотекой Mediabunny для чтения и записи контейнеров, таких как MP4 и WebM. Кодирование по возможности выполняет аппаратный кодер вашего графического чипа, поэтому оно может быть быстрым даже в браузере. Файлы MP3 записывает кодер LAME, а FLAC — библиотека libFLAC; обе скомпилированы в WebAssembly и загружаются только при необходимости.
  • Документы: наш собственный код на основе открытых библиотек для PDF и ZIP открывает PDF и офисные файлы, пересжимает картинки внутри с помощью кодеков изображений и записывает новый файл.

Все библиотеки, которые мы поставляем, — с открытым исходным кодом: большинство под свободными лицензиями вроде MIT, BSD и Apache 2.0, Mediabunny — под MPL 2.0, а кодер MP3 LAME — под LGPL в виде отдельного заменяемого файла. См. список библиотек с версиями и лицензиями.

Как самому убедиться, что ничего не загружается

Верить нам на слово не обязательно. Есть две простые проверки:

  • Отключитесь от сети. Откройте страницу инструмента, сожмите один файл, чтобы загрузился модуль, затем выключите Wi-Fi или мобильный интернет и сожмите ещё один файл того же типа. Всё работает, потому что сеть не нужна.
  • Посмотрите на сетевые запросы. В Chrome, Edge или Firefox нажмите F12, откройте вкладку «Сеть» (Network) и сожмите файл. Вы увидите, как с нашего сайта загружается код компрессора, а также запросы аналитики и рекламы, но ни одного запроса с вашим файлом. Фото на 10 МБ выглядело бы как отправка 10 МБ — а её нет.

Страница действительно отправляет в Google Analytics анонимные события использования, например «сжат JPG размером несколько мегабайт». Эти события содержат инструмент, тип файла, а также размер, экономию и время обработки в виде приблизительных диапазонов — но никогда не имя файла и не его содержимое.

Сжатие без потерь: то же содержимое, меньше байтов

Сжатие без потерь находит избыточность — то, что хранится несколько раз или может быть предсказано, — и записывает это компактнее. Декодирование в точности обращает процесс. Почти в каждом формате без потерь встречаются три идеи:

  • Предсказание. Соседние пиксели изображения или последовательные отсчёты звука обычно похожи. Если хранить не полное значение, а небольшую разницу с предсказанием, остаются числа, в основном близкие к нулю. Так работают фильтры PNG и линейный предсказатель FLAC.
  • Повторы. Повторяющиеся последовательности заменяются короткой ссылкой на более раннюю копию. Это часть LZ77 алгоритма DEFLATE, который используется в ZIP, PNG и офисных файлах.
  • Энтропийное кодирование. Частые значения получают короткие коды, а редкие — длинные (кодирование Хаффмана или арифметическое кодирование).

У сжатия без потерь есть естественный предел: случайный шум предсказать нельзя, поэтому зернистое фото или шумная запись без потерь никогда сильно не уменьшатся. По той же причине сжатие уже сжатого файла, например JPEG внутри ZIP, почти ничего не даёт.

Сжатие с потерями: убрать то, чего вы не заметите

Кодеки с потерями идут дальше и отбрасывают информацию, которую человеческие глаза и уши почти не воспринимают. JPEG и WebP хранят цвет с меньшим разрешением, чем яркость, и округляют мелкие высокочастотные детали. MP3, AAC и Opus отбрасывают звуки, заглушённые более громкими. Видеокодеки вроде H.264 время от времени хранят полный кадр, а между ними — в основном движение и изменения.

Настройка качества или битрейта определяет, сколько будет отброшено. При умеренных настройках потери очень трудно заметить; если зайти слишком далеко, появляются типичные артефакты: блоки и ореолы на изображениях, металлический или «подводный» звук в аудио, смазывание в быстрых сценах видео.

Что инструменты обещают, а что нет

  • Вы никогда не получите файл больше исходного. Если результат не меньше, инструмент вернёт оригинал и сообщит, что он уже оптимален.
  • Документы и аудиофайлы при одинаковом файле и настройках дают идентичные байты; аппаратные видеокодеры от запуска к запуску могут отличаться на несколько байтов.
  • Текст в документах остаётся текстом; страницы никогда не превращаются в картинки.
  • Метаданные изображений, например GPS-координаты, по умолчанию удаляются, а цветовой профиль и ориентация сохраняются. Метаданные видео — место, устройство и даты — тоже удаляются по умолчанию; аудио сохраняет теги и обложку, если вы это не отключите.

Чего мы обещать не можем, так это определённый процент. Экономия целиком зависит от того, как был создан файл: у фото с телефона или отсканированного PDF обычно большой запас, а у уже оптимизированного файла — маленький. Для каждого файла инструмент показывает точный размер до и после.

Пределы сжатия в браузере

Вкладка браузера — это песочница с ограниченной памятью, и это задаёт границы разумного. Инструмент принимает изображения до 200 МБ и 100 мегапикселей, файлы PDF и Office до 300 МБ, а видео и аудио до 4 ГБ на компьютере (1 ГБ на телефонах), хотя длинные видео в 4K всё равно могут не поместиться в память вкладки. Скорость зависит от вашего оборудования: в наших тестах на быстром ПК с Windows в Chrome минута видео 1080p заняла около 20 секунд, а фото на 24 мегапикселя — около 2,5 секунды; на телефонах всё может быть гораздо медленнее. Для видео и большинства преобразований аудио нужен WebCodecs, который есть в актуальных Chrome, Edge и Opera, в Firefox 130+ и Safari 26+; WAV и AIFF можно превратить в MP3, FLAC или WAV и без него.

Для некоторых форматов в браузерах вообще нет декодера — например, для WMA, AVI и WMV, а старые двоичные офисные файлы нельзя безопасно перезаписать. Для них инструмент объясняет варианты, а не выдаёт файл, который может оказаться повреждённым. Когда задача слишком велика для браузера, честная рекомендация — программа для компьютера, например HandBrake для видео или LibreOffice для документов.