Открыть сервисСервис

Компрессия — сжатие данных и сигналов

Компрессия (от лат. compressio — «сжатие») — процесс уменьшения объёма данных или сигнала путём устранения избыточности с сохранением информации. В широком смысле компрессия означает приведение объекта к более плотному состоянию: сжатие газа, уплотнение данных, уменьшение размера файла или снижение битрейта аудио- и видеопотока.

Основные принципы

В основе любой компрессии лежит идея избыточности. Данные почти всегда содержат повторяющиеся закономерности: частые символы в тексте, одинаковые пиксели в изображении, тишину в аудиозаписи. Алгоритм компрессии находит эти закономерности и заменяет их более коротким описанием.

Простейший пример — RLE (Run-Length Encoding). Последовательность «АААААББВ» заменяется на «5А2Б1В». Алгоритм бесполезен для случайных данных, но эффективен там, где есть длинные повторы.

Два типа компрессии

Без потерь (lossless)

При сжатии без потерь исходные данные восстанавливаются полностью и побитово идентично. Используется там, где недопустима любая деградация: тексты, программы, базы данных, медицинские изображения, архивы.

Популярные форматы: ZIP, GZIP, PNG, FLAC, APNG, Brotli, Zstandard. Алгоритмы строятся на словарном сжатии (LZ77, LZMA, DEFLATE), кодировании по частотам (Хаффман, арифметическое кодирование) и их комбинациях.

С потерями (lossy)

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

Популярные форматы: JPEG (фотографии), MP3, AAC, Ogg Vorbis (аудио), H.264, H.265/HEVC, AV1, VP9 (видео). Степень сжатия регулируется битрейтом или качеством: чем агрессивнее отбрасываются данные, тем меньше файл, но выше артефакты — блочность в JPEG, «ватность» в MP3.

Как это работает на практике

Сжатие текста и файлов

Архиваторы (7-Zip, WinRAR, RAR) объединяют несколько файлов в один и сжимают общий поток, что повышает эффективность за счёт общей избыточности. Формат ZIP использует алгоритм DEFLATE — комбинацию LZ77 и кодирования Хаффмана. Более продвинутые LZMA и Zstandard достигают лучших показателей за счёт больших словарей и более сложных моделей.

Сжатие изображений

Формат PNG сжимает без потерь, используя фильтрацию пикселей и DEFLATE. Формат JPEG применяёт дискретное косинусное преобразование (DCT): изображение разбивается на блоки 8×8, каждая блочная матрица переносится в частотную область, затем высокочастотные компоненты квантуются грубо — именно на этом этапе теряется информация. Степень потерь задаётся таблицей квантования.

Сжатие аудио

MP3 использует психоакустическую модель: сигнал разбивается на кадры, анализируется маскировка (слабые частоты не слышны рядом с громкими), после чего часть коэффициентов отбрасывается или округляется. Битрейт 320 кбит/с субъективно близок к CD, 128 кбит/с даёт заметную деградацию.

Сжатие видео

Видео сжимается сильнее всего, потому что кадры сильно коррелируют друг с другом. Кодеки используют три типа кадров: I (ключевой, сжат без опоры на другие), P (опирается на предыдущие), B (опирается и на предыдущие, и на последующие). Разница между кадрами кодируется как вектор движения и остаток. Стандарт H.265/HEVC даёт примерно на 30–50 % меньший поток при том же качестве по сравнению с H.264; AV1 — ещё эффективнее.

Компрессия в других областях

Газы и двигатели

В термодинамике компрессия — сжатие рабочего тела в цилиндре двигателя или компрессора. Отношение объёма цилиндра в НМТ к объёму в ВМТ называется степенью сжатия. Для бензиновых двигателей она составляет 8–12, для дизельных — 14–24. Повышение степени сжатия увеличивает КПД, но требует топлива с более высоким октановым числом.

Телекоммуникации

В сетях передачи данных компрессия снижает нагрузку на канал. Протоколы сжатия встроены в HTTP (gzip, Brotli), в форматы потоковой передачи (FLAC, Opus), в системы видеосвязи (WebRTC использует VP8/VP9 и Opus).

Базы данных

СУДБ применяют сжатие на уровне страниц и журналов. PostgreSQL, Oracle и ClickHouse поддерживают алгоритмы LZ4 и Zstandard, что снижает объём хранилища и ускоряет чтение за счёт уменьшения объёма ввода-вывода.

Выбор формата

При выборе алгоритма учитывают три параметра: степень сжатия, скорость сжатия/распаковки и объём памяти, требуемый для работы. Zstandard, например, позволяет настраивать уровень от 1 (быстро, слабое сжатие) до 22 (медленно, агрессивное сжатие), что делает его универсальным для систем хранения и передачи данных.

Источники:

  • Р. К. Язичкин. Сжатие данных: теория и практика
  • Д. Сэлмаси, К. Марти. Основы сжатия данных
  • Документация RFC 1951 (DEFLATE), RFC 1950 (ZLIB)
  • Спецификации JPEG (ISO/IEC 10918), MP3 (ISO/IEC 11172), H.265 (ITU-T H.265)
  • Кнут Д. Искусство программения, том 3: Сортировка и поиск
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru