.flac

Free Lossless Audio Codec
FLAC logo inverted.png
FLAC command line.png
Тип аудиоек, формат аудиофайлов
Разработчик Josh Coalson, Xiph.Org Foundation
Написана на Си[1]
Операционная система кроссплатформенный
Первый выпуск 20 июля 2001
Последняя версия 1.3.3(4 августа 2019)
Читаемые форматы файлов Free Lossless Audio Codec[d]
Создаваемые форматы файлов Free Lossless Audio Codec[d]
Лицензия GNU GPL; BSD (Parts)
Сайт xiph.org/flac
Commons-logo.svg Медиафайлы на Викискладе
FLAC
FLAC logo inverted.png
FLAC command line.png
Расширение .flac
MIME-тип audio/x-flac
Разработчик Xiph.Org[2]
Опубликован 20 июля 2001[3]
Тип формата аудио
Стандарт(ы) Спецификация
Сайт xiph.org/flac

FLAC (англ. Free Lossless Audio Codec) — популярный свободный ек, предназначенный для сжатия аудиоданных без потерь.

В отличие от аудиоеков, обеспечивающих сжатие с потерями (MP3, AAC, WMA, Ogg Vorbis, Opus), FLAC, как и любой другой lossless-ек, не удаляет никакой информации из аудиопотока и подходит как для прослушивания музыки на высококачественной звуковоспроизводящей аппаратуре, так и для архивирования аудиоколлекции.

Сегодня формат FLAC поддерживается множеством аудиоприложений, портативных аудиоплееров и специализированных аудиосистем и имеет большое число разнообразных аппаратных реализаций[4]


Сведения о формате[ | ]

Аудиопоток[ | ]

Основными частями потока являются:

Первые четыре байта идентифицируют поток FLAC. Следующие за ними метаданные содержат информацию о потоке, затем идут сжатые аудиоданные.

Метаданные[ | ]

По состоянию на 10.03.2010 в libflac-1.2.1 определены следующие типы блоков: StreamInfo, Padding, Application, SeekTable, VorbisComment, CueSheet, Picture, Unknown. Блоки метаданных могут быть любого размера, не представляет большого труда добавление новых блоков. Неизвестные блоки метаданных деер пропускает.

Блок STREAMINFO — обязательный. В нём содержатся данные, позволяющие дееру настроить буфера, частоту дискретизации, количество каналов, количество бит на семпл и количество семплов. Также в блок записывается подпись MD5 несжатых аудиоданных. Это полезно для проверки всего потока после его передачи.

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

Точное описание структур стандартных блоков можно найти в файле format.h библиотеки libflac, доступной на сайте формата.

Аудиоданные[ | ]

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

Разбиение на блоки[ | ]

Размер блока — очень важный параметр для ирования. Если он слишком мал, то в потоке будет чересчур много заголовков фреймов, что уменьшит уровень сжатия. Если же размер большой, то ер не сможет подобрать эффективную модель сжатия. Понимание процесса моделирования помогает увеличить уровень сжатия для некоторых типов входных данных. Обычно при использовании линейного прогнозирования на аудиоданных с частотой дискретизации 44,1 кГц оптимальный размер блока лежит в диапазоне 2-6 тыс. семплов.

Межканальная декорреляция[ | ]

Если на вход поступают стереоаудиоданные, они могут пройти через стадию межканальной декорреляции. Правый и левый канал преобразуются к среднему и разностному по формулам: средний = (левый + правый)/2, разностный = левый — правый. В отличие от joint stereo, используемом в lossy-ерах, в lossless-ировании этот процесс не приводит к потерям. Для данных с аудиодисков это обычно приводит к значительному увеличению уровня сжатия.

Моделирование[ | ]

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

  • подгонка простого полинома к сигналу
  • общее ирование с линейными предикторами (LPC).

Во-первых, постоянное полиномиальное предсказание (-l 0) работает значительно быстрее, но менее точно, чем LPC. Чем выше порядок LPC, тем медленнее, но лучше будет модель. Однако с увеличением порядка выигрыш будет всё менее значительным. В некоторой точке (обычно около 9) процедура ера, определяющая наилучший порядок, начинает ошибаться и размер получаемых фреймов возрастает. Чтобы преодолеть это, можно использовать полный перебор, что приведёт к значительному увеличению времени ирования.

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

Остаточное ирование[ | ]

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

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

Составление фреймов[ | ]

Аудиофрейму предшествует заголовок, который начинается с а синхронизации и содержит минимум информации, необходимой дееру для воспроизведения потока. Сюда также записывается номер блока или семпла и восьмибитная контрольная сумма самого заголовка. синхронизации, CRC заголовка фрейма и номер блока/семпла позволяют выполнять пересинхронизацию и поиск даже в отсутствие точек поиска. В конце фрейма записывается его шестнадцатибитная контрольная сумма. Если базовый деер обнаружит ошибку, то будет сгенерирован блок тишины.

Разное[ | ]

Чтобы поддерживать основные типы метаданных, базовый деер умеет пропускать теги ID3v1 и ID3v2, поэтому их можно свободно добавлять. Теги ID3v2 должны располагаться перед маркером «fLaC», а теги ID3v1 — в конце файла.

Существуют модификации FLAC ера: Improved FLAC encoder, Flake и FLACCL.

29 января 2003 г. Xiphophorus (сейчас называется Xiph.Org Foundation) анонсировали включение формата FLAC в линейку своих продуктов: Ogg Vorbis, Theora и Speex[5].

Примечания[ | ]

  1. The flac Open Source Project on Open Hub: Languages Page — 2006.
  2. https://xiph.org/flac/format.html
  3. FLAC 1.0 (20-Jul-2001)
  4. Links. FLAC. Дата обращения 6 октября 2015.
  5. FLAC Joins Xiph! (англ.) (недоступная ссылка). Дата обращения 30 октября 2008. Архивировано 30 июня 2007 года.

Ссылки[ | ]