FLAC ( / f læ k / ; Free Lossless Audio Codec ) — формат аудиокодирования для сжатия цифрового звука без потерь , разработанный Xiph.Org Foundation , а также название проекта бесплатного программного обеспечения, создающего инструменты FLAC, эталонный пакет программного обеспечения, включающий реализацию кодека . Цифровое аудио, сжатое алгоритмом FLAC, обычно может быть уменьшено до 50–70 процентов от исходного размера [4] и распаковано до идентичной копии исходных аудиоданных.
FLAC — это открытый формат с лицензией , не требующей лицензионных отчислений, и эталонной реализацией , которая является бесплатным программным обеспечением . FLAC поддерживает теги метаданных , обложки альбомов и быстрый поиск.
Разработка была начата в 2000 году Джошем Коулсоном. Формат битового потока был заморожен с выпуском версии 0.9 эталонной реализации 31 марта 2001 г. Версия 1.0 была выпущена 20 июля 2001 г. [5]
29 января 2003 года фонд Xiph.Org и проект FLAC объявили о включении FLAC под баннер Xiph.org. Xiph.org является домом для других бесплатных форматов сжатия, таких как Vorbis , Theora , Speex и Opus . [5] [6] [7]
Версия 1.3.0 была выпущена 26 мая 2013 года, после чего разработка была перенесена в git-репозиторий Xiph.org. [8]
В 2019 году FLAC был предложен в качестве стандарта IETF. [9]
FLAC — это кодирование данных линейной импульсно-кодовой модуляции без потерь . [10]
Файл FLAC состоит из магического числа fLaC
, метаданных и закодированного звука. [10]
Закодированный звук делится на кадры, которые состоят из заголовка, блока данных и контрольной суммы CRC16 . Каждый кадр кодируется независимо друг от друга. Заголовок кадра начинается со слова синхронизации , используемого для идентификации начала действительного кадра. Остальная часть заголовка содержит количество выборок, положение кадра, назначение канала и, при необходимости, частоту дискретизации и разрядность . Блок данных содержит аудиоинформацию. [10]
Метаданные в FLAC предшествуют аудио. Такие свойства, как частота дискретизации и количество каналов, всегда содержатся в метаданных. Он также может содержать другую информацию, например обложку альбома . [10] FLAC использует комментарии Vorbis для текстовых метаданных, таких как название трека и имя исполнителя.
Алгоритм кодирования FLAC состоит из нескольких этапов. На первом этапе входной звук разбивается на блоки. Если звук содержит несколько каналов , каждый канал кодируется отдельно как подблок. Затем кодер пытается найти хорошую математическую аппроксимацию блока, либо путем подбора простого полинома , либо с помощью общего линейного прогнозирующего кодирования . Затем записывается описание аппроксимации длиной всего несколько байт. Наконец, разница между аппроксимацией и входными данными, называемая остатком, кодируется с помощью кодирования Райса . Во многих случаях описание аппроксимации и кодированного остатка занимает меньше места, чем при использовании импульсно-кодовой модуляции . [10]
Процесс декодирования является обратным процессу кодирования. Сжатый остаток сначала декодируется. [11] [12] Затем описание математической аппроксимации используется для расчета формы сигнала. Результат формируется путем сложения остатка и рассчитанной формы сигнала. [13] [14] Поскольку FLAC сжимает без потерь , декодированная форма сигнала идентична форме сигнала до кодирования.
Для двухканального стереокодер может выбрать совместное кодирование звука. Каналы преобразуются в боковой канал, который представляет собой разницу между двумя входными каналами, и средний канал, представляющий собой сумму двух входных каналов. Вместо среднего канала может быть закодирован левый или правый канал, что иногда более эффективно с точки зрения использования пространства. [15]
Несмотря на то, что эталонный кодер использует один размер блока для всего потока, [10] FLAC позволяет размеру блока в выборках варьироваться в зависимости от блока.
Степень сжатия определяется различными параметрами, включая порядок модели линейного прогнозирования и размер блока. Независимо от степени сжатия исходные данные всегда можно идеально восстановить.
Для удобства пользователя эталонная реализация определяет 9 уровней сжатия, которые являются предустановками более технических параметров алгоритма кодирования. Уровни обозначены от 0 до 8, причем более высокие числа приводят к более высокой степени сжатия за счет скорости сжатия. Значение каждого уровня сжатия зависит от реализации. [16] [17]
FLAC оптимизирован для скорости декодирования за счет скорости кодирования. Тестирование показало, что, хотя при повышении уровня сжатия разница в скорости декодирования незначительна, за пределами уровня сжатия по умолчанию 5 процесс кодирования занимает значительно больше времени с небольшой экономией места по сравнению с уровнем 5. [18]
Помимо формата, проект FLAC также содержит бесплатную эталонную реализацию FLAC с открытым исходным кодом под названием libFLAC. libFLAC содержит средства для кодирования и декодирования данных FLAC, а также для управления метаданными файлов FLAC. libFLAC++, объектно-ориентированная оболочка libFLAC для C++ , а также программы командной строки flac
и metaflac
также являются частью эталонной реализации.
Формат FLAC, как и libFLAC, не защищен какими-либо патентами , и каждый волен писать свои собственные реализации FLAC.
FLAC специально разработан для эффективной упаковки аудиоданных, в отличие от алгоритмов общего назначения без потерь, таких как DEFLATE , которые используются в ZIP и gzip . В то время как ZIP может уменьшить размер аудиофайла качества компакт-диска на 10–20%, FLAC может уменьшить размер аудиоданных на 40–50%, используя преимущества характеристик звука.
Технические преимущества FLAC по сравнению с другими форматами без потерь заключаются в его способности быстро передаваться и декодироваться независимо от уровня сжатия.
Поскольку FLAC представляет собой схему без потерь, он подходит в качестве формата архива для владельцев компакт-дисков и других носителей, желающих сохранить свои аудиоколлекции. Если исходный носитель утерян, поврежден или изношен, копия аудиодорожек в формате FLAC гарантирует, что точную копию исходных данных можно будет восстановить в любое время. Точное восстановление из копии тех же данных с потерями (например, MP3 ) невозможно. Отсутствие потерь в формате FLAC означает, что он отлично подходит для перекодирования , например, в MP3, без потери качества, обычно связанной с перекодированием между одним форматом с потерями и другим. Файл CUE может быть дополнительно создан при копировании компакт-диска. Если компакт-диск прекрасно читается и копируется в файлы FLAC, файл CUE позволяет позднее записать аудио-CD, который по аудиоданным идентичен исходному компакт-диску, включая порядок дорожек и промежутки , но исключает CD-текст и другие дополнительные данные, такие как тексты песен и графика CD+G . [19]
Эталонная реализация FLAC реализована как базовая библиотека кодировщика и декодера libFLAC , при этом основная распространяемая программа flac
является эталонной реализацией API libFLAC. Этот API кодека также доступен на C++ как libFLAC++. Эталонная реализация FLAC компилируется на многих платформах, включая большинство операционных систем Unix (таких как Solaris , BSD ) и Unix-подобных (включая Linux ), Microsoft Windows , BeOS и OS/2 . Существуют build-системы для autoconf / automake , MSVC , Watcom C и Xcode . В настоящее время в libFLAC нет поддержки многоядерности , но такие утилиты, как GNU Parallel и различные графические интерфейсы, можно использовать для запуска нескольких экземпляров кодировщика.
Поддержка воспроизведения FLAC в портативных аудиоустройствах и специализированных аудиосистемах ограничена по сравнению с такими форматами, как MP3 [20] или несжатый PCM . Поддержка FLAC включена по умолчанию в устройствах Windows 10 , Android , BlackBerry 10 и Jolla .
В 2014 году несколько компаний, производящих послепродажное обслуживание мобильной электроники, представили мультимедийные решения, включающие поддержку FLAC. К ним относятся серия NEX от Pioneer Electronics, а также VX404 и NX404 от Clarion.
Европейский вещательный союз (EBU) принял формат FLAC для распространения высококачественного звука по своей сети Еврорадио. [21] Операционная система Windows поддерживает встроенную интеграцию FLAC с момента появления Windows 10. [22] Операционная система Android поддерживает встроенное воспроизведение FLAC, начиная с версии 3.1. [23] [24] В macOS High Sierra и iOS 11 добавлена встроенная поддержка воспроизведения FLAC. [25]
Помимо прочего, музыкальный проигрыватель и потоковый сервис Pono использовали формат FLAC. [26] [27] Bandcamp настаивает на формате загрузки без потерь и предлагает FLAC в качестве варианта загрузки. [28] Фонд Викимедиа спонсировал бесплатный онлайн- инструмент ECMAScript FLAC с открытым исходным кодом для браузеров, поддерживающих необходимые функции HTML5 . [29]
Поддерживаются различные другие контейнеры независимо от используемой операционной системы и используемого программного обеспечения для воспроизведения.
«fLaC», маркер потока FLAC в ASCII, что означает, что байт 0 потока равен 0x66, за которым следует 0x4C 0x61 0x43.