FLAC

Free lossless audio codec
Тип аудіо-кодек, звуковий формат
Розробник Xiph.Org Foundation, Джош Коалсон
Перший випуск 20 липня 2001
Стабільний випуск 1.3.3 (4 серпня 2019; 4 роки тому (2019-08-04))
Платформа Багатоплатформність
Операційна система кросплатформова програма
Мова програмування C[1]
Ліцензія утиліти командного рядка: GNU GPL
бібліотеки: BSD
Репозиторій gitlab.xiph.org/xiph/flac
Вебсайт xiph.org/flac
Free lossless audio codec
Розширення файлу: .flac
MIME-тип: audio/x-flac
Тип формату: Аудіо
Стандарт(и): Специфікація

FLAC (англ. Free Lossless Audio Codec — вільний аудіокодек без втрат) — аудіокодек для стиснення аудіо зі 100% збереженням оригінального звукового потоку. На відміну від таких кодеків, як MP3, WMA чи Ogg Vorbis, FLAC забезпечує т.зв. стиснення без втрат (англ. lossless), тобто під час розпакування звукові дані залишаються повністю ідентичним до початкового файлу перед стисненням. FLAC також включає можливість перевірки точності даних завдяки збереженню у файлі відбитку MD5 оригінальних даних[2].

FLAC є вільним форматом: його використання не вимагає виплат роялті, специфікації є відкритими та його основна реалізація є вільним програмним забезпеченням[3].

Розвиває цей кодек Xiph.Org Foundation.

Відомості про формат

Аудіопотік

Основними частинами потоку є:

Перші чотири байти ідентифікують потік 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 дозволяє вказати, як потрібно проводити розбиття. Залишок може бути розбитий на 2 n розділів.

Складання фреймів

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

Різне

Щоб підтримувати основні типи метаданих, базовий декодер вміє пропускати теги ID3v1 і ID3v2, тому їх можна вільно додавати. Теги ID3v2 повинні розташовуватися перед маркером «fLaC», а теги ID3v1 - в кінці файлу.

Існують модифікації FLAC кодера: Improved FLAC encoder і Flake.

Підтримка FLAC

Файли з розширенням .flac можна відкрити на комп'ютері, зокрема за допомогою таких програм:

Апаратно підтримується, зокрема, такими пристроями (список не повний):

  • DUNE HD
  • Weiss Minerva
  • Blackberry
  • Blacknote DSS 30
  • Cowon
  • DIGMA (Insomnia 5)
  • Rio Karma
  • ICONBIT HD390DVD; HD400L; HD400DVD
  • iRiver, Gigabeat (Toshiba) (через прошивку RockBox)
  • iAudio (Cowon)
  • Ritmix (Meizu)
  • SANSA
  • TeXet (T-900, T-890, T-860, T-790, T-660, T-589, T-590, T-560)
  • Transcend (MP 870, MP 860, MP 330)
  • iPod (через прошивку RockBox)
  • Networked Media Tank (Popcorn Hour — A100, A110, B110, C200)
  • Explay
  • Nationite S:Flo 2 (Teclast T51)
  • Philips Xenium K700
  • Hifiman HM-801
  • Sony Ericsson W20i Zylo
  • Samsung Galaxy S
  • Samsung Galaxy S II
  • Samsung Galaxy R
  • Samsung Wave
  • Samsung Wave II
  • Sony Ericsson W20(Zylo)
  • Sony Ericsson Xperia x10i
  • Sony Ericsson Xperia Arc
  • Oysters PMP-200
  • Sony Ericsson Xperia Play
  • Nokia N900 з пакетом OGG support
  • Meizu M8
  • Mystery MMD-584U
  • Nokia N8, C7, C6-01, E7 (смартфони на Symbian^3, використовуючи FolderPlay 1.8)
  • Nokia 5800 (смартфони на S60, використовуючи FolderPlay 1.8)

Примітки

  1. The flac Open Source Project on Open Hub: Languages Page — 2006.
    d:Track:Q124688
  2. Flac Features. Архів оригіналу за 17 липня 2013. Процитовано 11 липня 2013.
  3. FLAC - license. Архів оригіналу за 11 вересня 2013. Процитовано 11 липня 2013.

Посилання

  • FLAC (рос.). Архів оригіналу за 10 лютий 2012. Процитовано 12 січень 2017.
  • Xiph.Org: QuickTime Components (англ.). Архів оригіналу за 10 лютого 2012. Процитовано 12 січня 2017.
Програмне забезпечення Це незавершена стаття про програмне забезпечення.
Ви можете допомогти проєкту, виправивши або дописавши її.
  • п
  • о
  • р
Проєкти Ogg
Daala · Vorbis · Theora · FLAC · Speex · Tremor · OggUVS · OggPCM · Ogg Writ
Інші проєкти
XSPF · Annodex · Xiph QuickTime Components · cdparanoia · Icecast · IceShare · Opus
Пов'язані статті
Chris Montgomery · CMML · Ogg Media · Ogg page · Ogg Squish
  • п
  • о
  • р
Стиснення відео
ISO/IEC
ITU-T
SMPTE[en]
  • VC-1[en]
  • VC-2[en]
  • VC-3[en]
  • VC-5[en]
AOMedia[en]
IETF
SAC
  • AVS[en]
Інші
  • Apple Video[en]
  • Bink[en]
  • Cinepak[en]
  • Daala
  • DVI
  • FFV1[en]
  • HuffYUV
  • Indeo[en]
  • Lagarith[en]
  • Microsoft Video 1[en]
  • MSU Lossless[en]
  • OMS Video[en]
  • Pixlet[en]
  • ProRes 422[en]
  • ProRes 4444[en]
  • QuickTime
    • Animation[en]
    • Graphics[en]
  • RealVideo
  • RTVideo[en]
  • SheerVideo[en]
  • Smacker[en]
  • Sorenson Video, Spark[en]
  • Theora
  • Thor[en]
  • VP3[en]
  • VP6[en]
  • VP7[en]
  • VP9
  • WMV
  • XEB[en]
  • YULS[en]
Стиснення аудіо
ISO/IEC
ITU-T
IETF
  • Opus
  • iLBC[en]
  • Speex[en]
  • Vorbis
3GPP
  • AMR
  • AMR-WB[en]
  • AMR-WB+[en]
  • EVRC[en]
  • EVRC-B[en]
  • EVS[en]
  • GSM-HR
  • GSM-FR
  • GSM-EFR
ETSI
SAC
  • AVS[en]
  • DRA[en]
Інші
  • ACELP[en]
  • ALAC
  • Asao[en]
  • ATRAC
  • CELT[en]
  • Codec2[en]
  • FLAC
  • iSAC[en]
  • Monkey's Audio
  • TAK
  • TTA
    • True Audio
  • MT9
  • Musepack
  • OptimFROG[en]
  • OSQ[en]
  • QCELP[en]
  • RCELP[en]
  • RealAudio[en]
  • RTAudio[en]
  • SD2[en]
  • SHN
  • SILK[en]
  • Siren[en]
  • SMV[en]
  • SVOPC[en]
  • TwinVQ
  • VMR-WB[en]
  • VSELP[en]
  • WavPack
  • WMA
  • MQA[en]
  • aptX[en]
  • LDAC[en]
Стиснення зображень
IEC, ISO,
ITU-T, W3C, IETF
Інші
Контейнери
ISO/IEC
  • MPEG-ES[en]
    • MPEG-PES
  • MPEG-PS[en]
  • MPEG-TS
  • ISO base media file format[en]
  • MPEG-4 Part 14 (MP4)
  • Motion JPEG 2000[en]
  • MPEG-21 Part 9[en]
  • MPEG media transport[en]
ITU-T
IETF
SMPTE[en]
3GPP
Інші
Співробітництво
  • NETVC[en]
  • MPEG-LA[en]
  • п
  • о
  • р
Архіватори з
стисненням
(порівняння[en])
Вільні
  • 7-Zip
  • Archive Manager[en]
  • Ark
  • AFreeArc[en]
  • Info-ZIP[en]
  • KGB Archiver[en]
  • PAQ
  • PeaZip
  • The Unarchiver[en] (тільки декомпресія)
  • tar
  • Xarchiver
  • Zipeg[en]
  • ZPAQ[en]
Безплатні
  • Filzip[en]
  • LHA[en]
  • StuffIt Expander[en] (тільки декомпресія)
  • TUGZip[en]
  • ZipGenius[en]
Комерційні
Неархівне
стиснення
Загальні
Для коду[en]
UPX[en]
Стиснення
аудіо
(порівняння[en])
З втратами
  • Fraunhofer FDK AAC[en]
  • Nero AAC Codec[en]
  • Freeware Advanced Audio Coder (FAAC)[en]
  • Helix DNA Producer[en]
  • l3enc[en]
  • LAME
  • TooLAME[en]
  • libavcodec
  • libcelt[en]
  • libopus
  • libspeex[en]
  • Musepack
  • libvorbis
  • Windows Media Encoder[en]
Без втрат
Стиснення
відео
(порівняння[en])
З втратами
MPEG-4 ASP[en]
H.264 /
MPEG-4 AVC
HEVC
Інші
  • CineForm[en]
  • Cinepak[en]
  • Daala
  • DNxHD[en]
  • Helix DNA Producer[en]
  • Indeo[en]
  • libavcodec
  • Schrödinger (Dirac)[en]
  • SBC[en]
  • Sorenson[en]
  • VP7[en]
  • libtheora
  • libvpx[en]
  • Windows Media Encoder[en]
Без втрат
  • FFV1[en]
  • HuffYUV
  • Lagarith[en]
  • MSU Lossless[en]
  • YULS[en]
  • Див. також: методи стиснення та формати стиснення