Логотип FLAC

Сайт проекта

Расширение файлов: .flac

  • Разработчик: Организация Xiph.Org, Джош Колсон
  • Первый релиз: 20 июля 2001 года
  • Стабильный релиз: 1.3.1 / 25 ноября 2014
  • Операционная система: кросплатформенный
  • Лицензия: утилиты командной строки под GBU GPL, библиотеки под BSD

FLAC является кодеком для сжатия аудио данных, изначально написанный Джошем Колсоном. Как следует из названия, FLAC осуществляет сжатие данных, оставляя при этом их идентичными оригиналу, таким образом, ни одна часть данных не теряется — это и является основной задачей алгоритмов сжатия без потерь. Цифровая аудио запись (такая как CD-Audio трэк), сжатая в формат FLAC может быть распакована в абсолютно идентичную копию аудио данных. Степень сжатия формата FLAC, как правило, варьируется от 50 до 60% от оригинального размера.

FLAC подходит как для ежедневного прослушивания записей, так и для архивирования, так как имеет поддержу тэгов, встроенных обложек и быстрого изменения места воспроизведения. Бесплатность и открытость формата делают его хорошо поддерживаемым различным программным обеспечением. Поддержка воспроизведения на различных устройствах достаточно ограничена на данный момент, но, тем не менее, формат поддерживается большим количеством аппаратных устройств по сравнению с конкурирующим форматом WavPack.

История

Разработка была начата в 2000-м году Джошем Колсоном. Формат битового потока был зафиксирован, когда FLAC вошел в бета стадию с версией 0.5, выпущенной 15 января 2001 года. Версия 1.0 была выпущена 20 июля 2001 года.

29 января 2003 года организация Xiph.Org и проект FLAC объявили о включении проекта FLAC под символ Xiph.Org.

17 сентября 2007 года была выпущена версия 1.2.1, в которой была добавлена возможность сохранять AIFF и RIFF цепочки метаданных при помощи ключа --keep-foreign-metadata.

Спустя 6 лет 26 мая 2013 года вышел следующий релиз 1.3.0 от новой команды Xiph.Org. В этот релиз вошли небольшие изменения и общие улучшения. В частности, проект переехал в git-репозиторий организации Xiph.Org и была добавлена поддержка форматов RF64 и Wave64.

После прошествия ещё полутора лет 25 ноября 2014 года вышел в свет релиз 1.3.1 с более серьезными изменениями. В этот раз была улучшена производительность кодирования при использовании SSE и AVX расширений. Также была улучшена производительность декодирования для всех разрядностей, но особенно для 24 бит в связке с архитектурой IA32.

Проект

Проект FLAC состоит из следующих частей:

  • Формата аудио-данных
  • Простой формат-контейнер для аудио-данных, также называемый FLAC (Нативный FLAC или Native FLAC)
  • libFLAC — библиотека эталонного кодека, а также интерфейс для метаданных
  • libFLAC++, являющейся объектно-ориентированной надстройкой над библиотекой libFLAC
  • flac — утилита командной строки, основанная на libFLAC для кодирования и декодирования потоков формата FLAC
  • metaflac — утилита командной строки, являющаяся редактором метаданных (тэгов) для файлов .flac
  • Входные плагины для различных музыкальных плееров (Winamp, foobar2000, XMMS, musikCube и многих других)
  • Учитывая слияние проекта с организацией Xiph.Org, контейнер Ogg также поддерживает аудио-данные формата FLAC (также называется Ogg FLAC)

Бесплатность формата означает то, что спецификация его потокового формата может быть реализована кем угодно, без каких либо прав на это (тем не менее, Xiph.Org оставляет за собой право устанавливать спецификации формата и сертифицировать их соблюдение). Также реализация любых методов кодирования / декодирования формата FLAC не может быть включена в патент. Это означает, что эталонная реализация является свободным программным обеспечением. Исходные коды libFLAC и libFLAC++ доступны под лицензией BSD, а утилиты командной строки — под GPL.

Одной из поставленных целей проекта FLAC является призыв разработчиков, не создавать какие бы то ни было функции защиты от копирования.

Сравнения

FLAC был разработан для эффективного сжатия аудио данных, в отличие от обычных алгоритмов, таких как DEFLATE (ZIP и gzip), которые используются в других кодеках без потерь. В то время как ZIP может сжать CD-Audio файл на 10-20%, FLAC достигает коэффициентов сжатия 30-50% для большинства музыки, и особенно хорошо сжатие FLAC показывает при работе с голосовыми записями. Для сравнения, кодеки с потерями могут достигать коэффициентов сжатия в 80% и более, отбрасывая часть данных из исходного звукового потока.

FLAC использует линейное прогнозирование для конвертации сэмплов в небольшие последовательности некоррелирующих чисел (известных как остаточные), которые хранятся используя эффективное кодирование Голомба-Райса. Также в формате FLAC используется кодирование блоков с идентичными сэмплами, таких, как тихие пассажи. Технической силой формата FLAC, по сравнению с другими кодеками без потерь, является его возможность быть потоковым и декодироваться за короткое время, которое не зависит от степени сжатия.

Будучи схемой сжатия без потерь, FLAC также является популярным форматом для хранения архивов у владельцев аудио дисков или других медиа-данных, стремящихся сохранить свою аудио коллекцию. Если оригинальная запись потеряется, повредится или износится, копия в формате FLAC дает гарантию того, что точный дубликат оригинальной записи может быть восстановлен в любое время. Точное восстановление из архива с потерями (например, MP3) невозможно. Являясь форматом без потерь, FLAC вполне может подвергаться транскодингу (например, в MP3) без потерь качества, как правило, свойственным транскодингу. Во время извлечения данных с CD может быть также создан CUE файл. Если данные с компакт диска были извлечены в формат FLAC успешно, то файл CUE позволяет восстановить копию диска, идентичную оригинальному, включая порядок треков, начальный зазор (pregap) и CD-Text данные. Однако, дополнительная информация, которая может присутствовать на некоторых аудио дисках, такая как тексты песен, графика CD+G будут находиться за полем видимости CUE файла и большинства извлекающего программного обеспечения, и, таким образом, эта информация не будет извлечена.

Европейский вещательный союз (EBU) принял на вооружение формат FLAC для распространения высококачественного звука через сеть «Еврорадио».

Технические детали

Формат FLAC поддерживает только целочисленные сэмплы. Это позволяет избежать неточностей нецелочисленной арифметики, таким образом, это дает гарантию сжатия без потерь. На вход кодировщик может принимать от 4 до 32 бит на сэмпл, любую частоту дискретизации от 1 Гц до 655 350 Гц с шагом в 1 Гц, а также любое количество каналов в диапазоне от 1 до 8. Каналы могут быть сгруппированы в случае стерео или 5.1 звука для извлечения выгода от межканальных корреляций и, тем самым, увеличивая степень сжатия звука. FLAC проверяет контрольные суммы CRC для обнаружения испорченных фреймов в тех случаях, когда формат используется в потоковом протоколе. Помимо этого, в тэге с заголовком STREAMINFO хранится полный MD5 хэш необработанных PCM аудио данных. FLAC допускает диапазон Rice параметра от 0 до 16. FLAC поддерживает ReplayGain.

FLAC реализован как ядро кодека в библиотеке libFLAC, которая слинкована с основной поставляемой программой flac, являющейся эталонной программой, использующей API libFLAC. Также API кодека доступно для C++ в библиотеке libFLAC++.

Эталонная реализация FLAC компилируется на многих платформах, включая системы Unix (такие как Solaris и Mac OS X) и Unix-подобные (включая Linux и BSD), Windows BeOS и OS/2. Проект настроен для сборки следующими утилитами: autoconf / automake, MSVC, Watcom C и Xcode. В настоящий момент FLAC не поддерживает многопоточность.

Для тэгов FLAC использует ту же систему, что и Vorbis-комментарии.

Организация API

libFLAC API организован для различных направлений: потоковое, потоковое с поддержкой смещения и файловое (перечислено в порядке увеличения уровня абстракции относительно базового битового FLAC потока). Большинство FLAC приложений ограничиваются кодированием / декодированием, используя интерфейс libFLAC лишь файлового уровня.

Плюсы

  • Портируется на многие системы и платформы
  • Исходный код открыт и легко лицензирован
  • Быстрое декодирование, высокая независимость от уровня сжатия
  • Аппаратная поддержка (PhatBox, Kenwood MusicKeg, Rio Karma и другие)
  • Поддержка стриминга
  • Испорченные файлы могут быть частично восстановлены

Минусы

  • Менее эффективное сжатие, чем у некоторых других современных кодеков (APE (Monkey's Audio), LPAC, OptimFROG)

Коэффициент производительность/сжатие приблизительно такой же как и у WavPack (однако, WavPack быстрее), и на 1%-2% хуже, чем у других современных кодеков, таких как APE (Monkey's Audio) и OptimFROG.

Декодирование формата FLAC очень нетребовательно к ресурсам процессора, что делает этот формат идеальным для воспроизведения на различных портативных устройствах.