FLAC расшифровывается как Free Lossless Audio Codec («свободный кодек для сжатия аудио без потерь») и делает ровно то, о чем говорит название: уменьшает размер аудиофайла, не изменяя ни одного сэмпла. Проект запустил Джош Коалсон, а сейчас его курирует Xiph.Org Foundation, некоммерческая организация, стоящая за Vorbis и Opus. И формат, и его эталонное программное обеспечение открыты и не требуют лицензионных отчислений, поэтому FLAC стал стандартным способом архивировать коллекции CD и обычным вариантом загрузки в музыкальных магазинах, управляемых самими музыкантами.
Как FLAC сжимает без потерь
Сжатие без потерь кажется противоречием на фоне MP3, но идея та же, что и у ZIP‑файла, только настроенная под звук. FLAC делит аудио на блоки и для каждого блока подбирает простое математическое предсказание того, как будет продолжаться звуковая волна. Затем он сохраняет только это предсказание и небольшие остаточные ошибки, упакованные с помощью эффективной схемы кодирования. При декодировании предсказание снова выполняется, к нему добавляются ошибки, и исходные сэмплы восстанавливаются бит‑в‑бит. Насколько сильно уменьшается размер, зависит от музыки, но файл FLAC обычно значительно меньше той же записи в формате WAV.
FLAC поддерживает до восьми каналов, глубину битности выше, чем у CD, и очень высокие частоты дискретизации. Как и MP3, он основан на фреймах, поэтому его можно передавать потоково и перематывать, не читая файл полностью. В заголовке также хранится MD5‑отпечаток несжатого аудио, чтобы программы могли через годы подтвердить, что файл по‑прежнему декодируется точно в то, что было извлечено с диска. Тот же кодек может передаваться внутри контейнера Ogg, хотя чаще всего вы встречаете обычный файл FLAC.
Какие метаданные содержит файл FLAC
Файл FLAC начинается с ряда блоков метаданных, у каждого из которых своя задача. STREAMINFO - технический блок, он присутствует всегда: частота дискретизации, число каналов, битность, общее количество сэмплов и тот самый MD5‑отпечаток. SEEKTABLE помогает плеерам быстро переходить по файлу, CUESHEET может описывать трек-лист целого CD, PICTURE хранит встроенное изображение с его типом и описанием, а PADDING - это просто пустое место, которое позволяет редактировать теги позже без полной перезаписи файла.
Описательные теги находятся в блоке VORBIS_COMMENT, это та же система тегов, которую использует Ogg. Это список текстовых пар «имя поля - значение», поэтому он не ограничен фиксированным набором. Часто используются TITLE, ARTIST, ALBUM, ALBUMARTIST, DATE, TRACKNUMBER, DISCNUMBER, GENRE, COMPOSER, PERFORMER, COPYRIGHT, ISRC и COMMENT, и любое поле может встречаться несколько раз, что позволяет, например, указать двух исполнителей одного трека.
Поскольку любое приложение может invent свое поле, этот блок часто рассказывает о программной цепочке не меньше, чем о самой музыке. ENCODER содержит название и версию программы, создавшей файл. ПО для рипа добавляет свои записи: идентификаторы, связывающие диск с онлайн‑музыкальной базой, оценки, количество воспроизведений, измерения replay gain и иногда привод, который считал CD. В этих свободных полях также оказываются личные заметки, настоящее имя или адрес электронной почты, если кто‑то ввёл их в таггере. В FLAC нет стандартного поля для местоположения или устройства, поэтому музыкальный файл редко раскрывает, где вы находились, но все, что человек или программа решили записать, хранится там в читаемом виде.
Когда использовать FLAC
FLAC - правильный выбор для хранения аудио: коллекций CD, мастер‑записей, всего, что вы можете захотеть ещё раз конвертировать. По сравнению с WAV он выигрывает по размеру и по возможностям тегирования, оставаясь бит‑в‑бит идентичным источнику. По сравнению с MP3 или AAC он значительно больше, поэтому плохо подходит для телефона с небольшим объёмом памяти или для загруженного сайта. Устройства Apple предпочитают ALAC, другой формат без потерь с той же идеей, и преобразование между ними ничего не стоит, так как оба сохраняют каждый сэмпл.