PCM, WAV, AIFF, FLAC, ALAC: форматы без потерь простыми словами

Автор: Николай СапуновОбновлено: август 202619 мин чтения
Содержание статьи +

Кратко

Звук без потерь сохраняет каждый исходный сэмпл в точности, поэтому декодированный файл бит в бит совпадает с записанным – в отличие от MP3 или AAC, которые часть данных выбрасывают. Сам звук – это PCM (числа, описывающие волну); WAV, AIFF и BWF – контейнеры, которые хранят PCM без сжатия, а FLAC и ALAC сжимают тот же PCM, ничего не теряя. FLAC и ALAC обычно ужимают файл до 50–70% от размера WAV и декодируются обратно в идентичный PCM – так же, как ZIP-архив восстанавливает документ без искажений. Используйте несжатый WAV или BWF для мастер-файлов и обмена, а FLAC или ALAC – когда нужно качество без потерь при вдвое меньшем объёме и трафике.

Зачем это нужно

Если вы ведёте видеопродукт – стриминговый сервис, OTT-платформу, приложение для музыки и видео, медиаархив – рано или поздно вас спросят, в каком формате хранить мастер-файлы, и неверный ответ обходится дорого. Храните всё несжатым WAV – и архив раздувается вдвое; выберите кодек, который ваши плееры не открывают, – и доставка ломается. Эта статья даёт словарь, чтобы отличать сам звук от коробки, в которой он едет, понятное правило, когда сжатие без потерь окупается, и стандарты, на которые можно сослаться, когда заявления вендора не сходятся.

Lossy против lossless: единственное различие, которое важно

Начнём со слова, которое делает всю работу. Lossless (без потерь) означает, что информация не теряется: при декодировании вы получаете ровно те числа, что вошли, каждый сэмпл идентичен. Lossy (с потерями) означает, что часть информации намеренно выброшена ради уменьшения файла, и вернуть её нельзя.

Помогает аналогия с ZIP-архивом и фотографией JPEG. ZIP – без потерь: распакуйте его, и документ вернётся байт в байт. JPEG – с потерями: он удаляет детали, которые глаз вряд ли заметит, и повторное сохранение их не восстановит. MP3 и AAC – это JPEG в мире звука: они удаляют звук, который ухо вряд ли заметит. FLAC и ALAC – это ZIP в мире звука: меньшие файлы, которые декодируются обратно в точный оригинал.

Это важно, потому что задачи разные. Кодек доставки вроде AAC оптимизирует наименьший файл, который примет слушатель. Формат без потерь оптимизирует сохранение мастера идеальным – для архива, монтажа, повторного кодирования позже в любой формат доставки, какой потребует будущее. Вы не стали бы делать мастер фильма в JPEG – и звук не стоит мастерить в MP3.

Рис. 1. Кодирование с потерями выбрасывает данные навсегда; сжатие без потерь обратимо – на выходе сэмпл в сэмпл совпадает с оригиналом.

PCM: сам звук, до всякого контейнера

Прежде чем говорить о форматах файлов, нужен предмет, который эти файлы хранят. Когда сигнал микрофона оцифровывается, система измеряет уровень звуковой волны тысячи раз в секунду и записывает каждое измерение числом. Этот поток чисел называется импульсно-кодовой модуляцией, или PCM, – самый распространённый способ представить несжатый цифровой звук. (О том, как берутся эти измерения, см. Что такое цифровой звук: от звуковой волны к битам.)

PCM – это не формат файла. Это сырые данные: длинный список целых чисел, по два на стереокадр, поступающих с выбранной частотой дискретизации. Чтобы превратить эти сырые данные в файл, который откроет кто-то другой, их нужно завернуть в контейнер, который записывает правила чтения – сколько каналов, какая частота дискретизации, какая битовая глубина, где звук начинается и заканчивается. Без этого заголовка груда чисел PCM нечитаема, потому что ничто не говорит, 16 это бит или 24, моно или стерео, 44 100 или 48 000 сэмплов в секунду.

Значит, мысленная модель – два слоя. Нижний слой – звук PCM, сам звук, одинаковый независимо от способа хранения. Верхний слой – контейнер или кодек, коробка, которая либо хранит эти числа как есть (WAV, AIFF, BWF), либо упаковывает их меньше и обратимо (FLAC, ALAC). Держите слои раздельно – и каждый формат ниже становится понятным.

Рис. 2. Один звук, много коробок: PCM – это звук; WAV, AIFF и BWF хранят его как есть, а FLAC и ALAC хранят тот же PCM сжатым, но полностью обратимым.

Несжатые контейнеры: WAV, AIFF, BWF

Три формата хранят PCM без сжатия. Различаются они в основном происхождением, а не качеством звука – сэмплы внутри одни и те же.

WAV (Waveform Audio File Format) – стандарт мира Windows, представленный Microsoft и IBM в 1991 году. Это частный случай контейнера RIFF – универсального «Resource Interchange File Format», собранного из помеченных блоков, называемых чанками. В файле WAV есть чанк fmt , описывающий звук, и чанк data, хранящий PCM. WAV хранит сэмплы little-endian (младший байт первым) – под процессоры Intel, на которых он родился. Это самый универсально читаемый аудиоконтейнер на свете.

AIFF (Audio Interchange File Format) – эквивалент от Apple, созданный в 1988 году для Macintosh. Он следует структуре чанков Electronic Arts EA IFF 85: верхний чанк FORM, чанк COMM (common), описывающий звук, и чанк SSND, хранящий сэмплы. Один технический нюанс: AIFF хранит сэмплы big-endian (старший байт первым), потому что чип Motorola 68000 в ранних Mac был big-endian. Качество идентично WAV; на уровне сэмплов отличается только порядок байтов.

BWF (Broadcast Wave Format) – это WAV с привинченными профессиональными метаданными. Стандартизован Европейским вещательным союзом как EBU Tech 3285, он добавляет чанк bext (broadcast extension) с таймкодом, автором, датой создания и – начиная с версии 2 (2011) – метаданными громкости EBU R128. Полезная нагрузка по-прежнему обычный PCM; BWF лишь записывает, кто сделал файл, когда и на каком таймкоде, поэтому он и стал форматом обмена в профессиональном кино- и вещательном постпродакшене. Обычный плеер WAV открывает файл BWF и игнорирует лишний чанк.

КонтейнерПроисхождениеПорядок байтовСжатиеТипичное применение
WAV (RIFF)Microsoft / IBM, 1991Little-endianНет (сырой PCM)Универсальный обмен, монтаж
AIFF (EA IFF 85)Apple, 1988Big-endianНет (сырой PCM)Apple / профзвук, монтаж
BWFEBU Tech 3285, 1997Little-endianНет (сырой PCM)Мастера кино и вещания

Частая ошибка: потолок 4 ГБ у WAV

Вот ловушка, которая бьёт по длинным записям и высокому разрешению. Классические WAV, AIFF и BWF записывают размеры чанков в 32-битном поле. Наибольшее число, помещающееся в 32 бита, – 4 294 967 295, поэтому один файл не может превышать примерно 4 гигабайта. Посчитаем для длинной многоканальной сессии: 6 каналов × 24 бита (3 байта) × 48 000 сэмплов в секунду = 864 000 байт в секунду, или около 3,1 ГБ в час. Двухчасовая запись 5.1 пробивает потолок, и файл молча портится или не дописывается. Решение – RF64, расширенный WAV от EBU, описанный в EBU Tech 3306: он меняет тег RIFF на RF64 и хранит 64-битный размер в новом чанке ds64, поднимая предел примерно до 16 эксабайт. Если ваш конвейер пишет длинные surround-сессии, требуйте инструменты с поддержкой RF64.

Кодеки без потерь: FLAC и ALAC

FLAC и ALAC делают то, чего несжатые контейнеры не делают: уменьшают файл, при этом по-прежнему декодируясь обратно в точно тот же PCM.

Трюк – это предсказание плюс эффективное кодирование, и его стоит разобрать простыми словами. Кодер смотрит на звук короткими блоками и подбирает простой математический предсказатель, который угадывает каждый сэмпл по предыдущим. Музыка хорошо предсказуема от мгновения к мгновению, поэтому предсказатель обычно близок. Затем кодер хранит лишь небольшой остаток разницы между догадкой и истинным сэмплом – остаток (residual) – с помощью компактной схемы кодирования чисел. Поскольку предсказатель и остаток вместе восстанавливают исходный сэмпл в точности, ничего не теряется. Это сжатие за счёт более умного описания звука, а не за счёт удаления его частей.

FLAC (Free Lossless Audio Codec) – открытый стандарт. Он был формально специфицирован как IETF RFC 9639 в декабре 2024 года – до этого у него были только эталонная реализация и неформальная спецификация с 2000 года. FLAC использует кодирование Райса (Rice, подмножество кодирования Голомба) для остатка, не требует чисел с плавающей точкой при декодировании и предлагает уровни сжатия 0–8: чем выше уровень, тем усерднее поиск лучшего предсказателя, тем меньше файл – ценой более медленного кодирования. Важно: уровень сжатия меняет только размер файла и время кодирования – декодированный звук идентичен на любом уровне. RFC 9639 также добавил формальную поддержку 32-битного целочисленного звука.

ALAC (Apple Lossless Audio Codec) – эквивалент от Apple, представленный в 2004 году и открытый под лицензией Apache 2.0 в октябре 2011 года. Он использует то же семейство идей – линейное предсказание плюс эффективное кодирование остатка, – а эталонная реализация поддерживает сэмплы до 32 бит и широкий диапазон частот дискретизации. В отличие от FLAC, у ALAC нет регулятора уровня сжатия для пользователя; он использует один фиксированный алгоритм. Его настоящее преимущество – родное, полноценное воспроизведение во всей экосистеме Apple.

Сколько на самом деле экономят?

Для типичной музыки FLAC и ALAC сжимают звук CD-качества примерно до 50–70% от размера несжатого WAV – то есть скидка чуть меньше половины. Друг к другу они очень близки: на разнородном материале FLAC обычно меньше ALAC примерно на 1–3% – разница, незаметная на одном альбоме, но набегающая в несколько гигабайт на большой библиотеке.

Рабочий пример делает выгоду по хранению наглядной. Возьмём трёхминутный стереотрек CD-качества (16 бит, 44 100 Гц):

несжатый размер = 44 100 сэмплов/с × 2 байта × 2 канала × 180 с
                = 31 752 000 байт ≈ 31,8 МБ  (WAV / AIFF / BWF)
FLAC при ~60%   ≈ 0,60 × 31,8 МБ ≈ 19,1 МБ
экономия/трек   ≈ 12,7 МБ  (около 40%)

Умножьте на архив из 5000 треков, и версии WAV нужно около 159 ГБ, а версии FLAC – около 95 ГБ: тот же звук, сэмпл в сэмпл, примерно за 60% места и при таком же снижении стоимости передачи.

ФорматСжатиеДекодированный звукРегулятор сжатияЛучше всего для
WAV / AIFF / BWFНет= исходный PCMМастера, монтаж, обмен
FLACБез потерь, ~50–70%= исходный PCMУровни 0–8Веб, архивы, широкая поддержка
ALACБез потерь, ~50–70%= исходный PCMФиксированныйЭкосистема Apple

Так что же выбрать?

Решение зависит от одного вопроса: вы мастерите или раздаёте? Для мастер-файла – того, что вы будете монтировать, сводить или позже перекодировать, – используйте несжатый WAV или, в кино и вещании, BWF, потому что сырой PCM – самое совместимое, что любой инструмент читает и пишет без сюрпризов. Для архива или доставки без потерь – того же идеального звука при меньшем объёме и трафике – используйте FLAC ради самой широкой поддержки устройств или ALAC, когда аудитория живёт внутри экосистемы Apple. Учтите, что lossless любого вида всё равно гораздо больше lossy: тот FLAC-трек в 19 МБ занял бы около 5 МБ в виде потока AAC 192 кбит/с – вот почему стриминговые сервисы раздают lossy большинству пользователей, а lossless приберегают для премиального тарифа.

Рис. 3. Выбирайте формат по задаче: несжатый PCM для мастеров, FLAC или ALAC для хранения и доставки без потерь.

Где здесь Фора Софт

В видеопродуктах, которые мы делаем с 2005 года, – стриминговых и OTT-платформах, e-learning, приложениях для музыки и видео, медиаархивах – вопрос lossless обычно всплывает как решение про хранение и конвейер, а не про качество. Мы держим продакшен- и мезонинные мастера несжатым PCM (WAV или BWF), чтобы каждое последующее кодирование стартовало с идеального источника, а затем выводим из этого единого мастера потоковые версии с потерями. Когда клиенту нужен тариф без потерь, мы берём FLAC ради кросс-платформенного охвата и ALAC там, где каталог ориентирован на Apple. Повторяющийся урок – разделять формат мастера и формат доставки: сделайте мастер правильно один раз, и каждый будущий формат обойдётся дёшево.

Ключевые выводы

  • Lossless декодируется в точные исходные сэмплы; lossy (MP3, AAC) удаляет данные навсегда.
  • PCM – это сырой звук; WAV, AIFF и BWF – контейнеры, хранящие его без сжатия.
  • WAV – little-endian, AIFF – big-endian; BWF – это WAV плюс метаданные вещания (EBU Tech 3285).
  • FLAC и ALAC сжимают без потерь до ~50–70% от WAV и декодируются обратно идентично.
  • FLAC (RFC 9639) открыт, уровни 0–8; ALAC под лицензией Apache и родной для Apple.
  • Классический WAV упирается в ~4 ГБ; для длинных или многоканальных записей берите RF64 (EBU Tech 3306).

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.