# Free Lossless Audio Codec

Free Lossless Audio Codec (FLAC, englisch für Freier verlustfreier Audio-Kodierer/-Dekodierer) ist ein Codec zur verlustfreien Audiodatenkompression, der im Rahmen der Xiph.Org Foundation entwickelt wird. Er ist frei verfügbar und in seiner Nutzung nicht durch Softwarepatente beschränkt.

## Geschichte

Die Entwicklung von FLAC begann im Jahr 2000. Das Format wurde zu Beginn des Beta-Stadiums durch Veröffentlichung von Version 0.5 der Referenz-Implementierung am 15. Januar 2001 festgelegt. Am 20. Juli 2001 wurde Version 1.0 veröffentlicht. Im Februar 2002 gab der erste Hersteller, PhatNoise, die Unterstützung von FLAC in seinem Audio-System bekannt. 2003 kündigte die Xiph.Org Foundation an, FLAC in ihr Container-Format zu integrieren, um so neben Vorbis auch verlustfreie Kompression zu ermöglichen. Im Jahr 2004 wurde eine größere Öffentlichkeit auf FLAC aufmerksam, als die Band Metallica bekannt gab, ihre Konzertmitschnitte künftig nicht nur im verlustbehafteten und damals noch patentierten Format MP3 zu verkaufen, sondern für Musikliebhaber die Aufzeichnungen auch im FLAC-Format anzubieten. Seit Mai 2006 existiert neben der Referenzimplementierung von Xiph/Coalson ein alternativer Encoder namens Flake von Justin Ruggles, der in FFmpeg aufgenommen wurde.
Zwischen 2007 und 2013 ruhte die Entwicklung von FLAC vollständig, bis am 26. Mai 2013 auf der offiziellen Website bekanntgegeben wurde, dass ein neues Entwicklerteam zusammengestellt worden sei und fortan wieder an FLAC gearbeitet werde. Zur gleichen Zeit wurde Version 1.3.0 veröffentlicht.
Seit 2017 arbeiten Andrew Weaver und Martijn van Beurden, einer der FLAC-Hauptentwickler, an einer IETF-Spezifikation (d. h. RFC) des Formats, die sich auf die ursprüngliche Xiph-Spezifikation stützt. Stand Ende 2023 ist diese Spezifikation noch nicht veröffentlicht.

## Das Projekt

Das Projekt widmet sich folgenden Themen:
* dem Streaming-Format,
* libFLAC, einer Bibliothek mit Referenz-Encoder und -Decoder und einer Metadaten-Schnittstelle,
* libFLAC++, einem Objekt-Wrapper für libFLAC,
* flac, einem Kommandozeilenwerkzeug zum Kodieren und Dekodieren von .flac-Dateien mit libFLAC,
* metaflac, einem Kommandozeilenwerkzeug zum Editieren der Metadaten von .flac-Dateien, und
* Eingabefilter als Plug-ins für verschiedene Musikspieler (Winamp, XMMS, …).
libFLAC und libFLAC++ sind unter einer angepassten Version der BSD-Lizenz, flac, metaflac und die Erweiterungen unter der GPL verfügbar.

## Formate

FLAC-Dateien werden standardmäßig im FLAC-eigenen Container gespeichert und können einen Datenstrom enthalten. Das Containerformat ist genauso wie der gesamte Standard darauf ausgelegt, ganze Audio-CDs oder deren Titel vollständig zu sichern, d. h. einschließlich der Metadaten.
Der FLAC-Container besteht zu Beginn aus einer Abfolge beliebig vieler sogenannter Metadatenblöcke, welche als Header dienen. Dabei ist der STREAMINFO-Block der erste und einzige vorgeschriebene Metadatenblock, welcher Informationen über den FLAC-Datenstrom selbst enthält. Weitere Blöcke sind optional und müssen weder von Enkodern noch Dekodern unterstützt werden. Sie enthalten beispielsweise Titelinformationen im Metadatenformat Vorbis comment, Sprungtabellen für das schnellere Ansteuern bestimmter Zeitpunkte im Datenstrom, Padding als Platzhalter für weitere zukünftige Header, oder Bilddaten wie ein Album-Cover.
In Ogg- und Matroska-Containern können mehrere FLAC-komprimierte Audiodaten nebeneinander in dieselbe Datei gespeichert werden, meistens zusammen mit einem Videodatenstrom für mehrsprachige Filme.

## Vergleich mit anderen Formaten

Technisch gesehen zeichnet sich FLAC vor allen Dingen dadurch aus, dass es gestreamt werden kann und Mehrkanal-, Replay-Gain- sowie Cuesheet-Unterstützung mit sich bringt. Außerdem können RIFF- und AIFF-Metadaten in FLAC-Dateien eingebettet werden, welche beim Dekodieren wiederhergestellt werden. Die Kompressionsstärke liegt, verglichen mit anderen verlustfreien Audio-Codecs, im Mittelfeld.
Größenvergleich verlustfreier Audioformate beim Bad Apple!!-Remix (ungekürzte 5:14-Version, 16 bit, 48kHz) :
| Format | Größe | Kompressionsstärke |
| FLAC | 44,5 MiB | 77% |
| WAV | 57,6 MiB | (100%) |
| ALAC | 45,7 MiB | 79% |
FLAC ist darauf ausgelegt, mit dem etwa zehn Jahre älteren MP3-Format insofern kompatibel zu sein, als dass FLAC-Frames in einem Datenstrom eindeutig von MP3-Frames unterschieden werden können. Weiterhin ähnelt das Bilddatenformat des FLAC-Containers dem Format des APIC-Frames in ID3v2, welches in MP3 zum Einsatz kommt.
Bei FLAC handelt es sich außerdem um einen sogenannten asymmetrischen Codec, d. h. der Rechenaufwand für das Kodieren ist deutlich höher als der für das Dekodieren. Der Rechenaufwand für das Dekodieren ist sogar geringer als der für viele andere verlustfreie Codecs. Hintergrund ist die Überlegung, dass eine Datei üblicherweise nur einmal kodiert, aber sehr viel häufiger (meist zum Abspielen) dekodiert wird. Dadurch stellt das Format vergleichsweise geringe Anforderungen an die Rechenleistung von Abspielgeräten oder -Programmen. Da es nur eine Komplexitätsstufe gibt, bleibt der Aufwand beim Dekodieren immer der gleiche – unabhängig von der Enkodereinstellung. Dies ist einer der Gründe, warum FLAC neben Apple Lossless, dem verlustfreien Kompressionsformat von Apple, auf Abspielgeräten eine gewisse Verbreitung erlangt hat.

## Kompression

Laut Angaben der Entwickler erreicht FLAC durchschnittlich eine Komprimierung auf rund 50 Prozent der Ausgangsgröße, der Unterschied zu anderen verlustfreien Audio-Kompressionsverfahren liegt demnach in einem Bereich einiger Prozentpunkte. Andere Tests legen aber eher eine Komprimierung auf etwa 60 Prozent nahe.
Verschiedene Faktoren haben einen erheblichen Einfluss auf die Kompressionsrate:
* Abtastrate: Je höher die Abtastrate ist, umso stärker ist die erzielte Kompression, da das Signal bezogen auf die Abtastrate weniger hohe Frequenzen enthält und insgesamt vorhersagbarer wird.
* Das kodierte Signal selbst hat einen erheblichen Einfluss:
** Höhere Atonalität macht das Signal weniger vorhersagbar.
** Höhere Aussteuerung des Signals macht das Signal weniger vorhersagbar.
* Bittiefe: Je mehr Bittiefe das Signal hat, umso schlechter ist es komprimierbar. Prinzipiell ist es daher eine aussagekräftigere Messgröße, statt der Kompressionsrate die absolute Zahl durchschnittlich eingesparter Bits je Sample anzugeben, da diese weitgehend unabhängig von der Bittiefe ist.

### Verfahren

FLAC nutzt für Kodierung und Dekodierung ausschließlich Festkommaarithmetik, wodurch insbesondere Hardwareimplementierungen vereinfacht werden. Hinsichtlich des Eingangssignals ist der Codec sehr flexibel: Auflösungen zwischen 4 und 32 Bit pro Sample, Abtastfrequenzen zwischen 1 Hz und rund 655 kHz und 1 bis 8 Kanäle werden unterstützt. Das verwendete Dateiformat unterstützt die Speicherung von Metadaten mittels Vorbis comment und kann auch Replay-Gain-Daten hinterlegen. Bei der Komprimierung verarbeitet FLAC die Eingangsdaten in mehreren Schritten:
* Blocking: FLAC unterteilt die Audiodaten stets in Blöcke zu je 16 bis 65535 ($2^{16}$) Samples. Die Subblöcke, also die verschiedenen Kanäle eines Blocks, werden gemeinsam in einem Frame untergebracht, d. h. komprimiert und enkodiert. Dabei werden Subblöcke eventuell in eine Mid-Side-Kodierung (s. u.) überführt, aber danach separat als Subframes enkodiert.
* Inter-Channel Decorrelation: Sofern ein Stereo-Signal anliegt, kann es aus der vorliegenden Links-Rechts-Kodierung (d. h. jeder Kanal ist separat codiert) in eine Mid-Side-Kodierung überführt werden. Dies geschieht entweder fest (also immer bei L/R belassen bzw. immer in M/S umwandeln) oder adaptiv in jedem Frame (der Encoder wählt die günstigere Kodierung).
* Modeling: Der Werteverlauf jedes Subblocks wird entweder mittels einer Polynomfunktion oder mit dem Verfahren Linear Predictive Coding angenähert. Einige übliche Kombinationen an Koeffizienten sind verfügbar, oder diese werden direkt im Frame gespeichert.
* Residual Coding: Das Fehlersignal, also der Unterschied zwischen dem tatsächlichen Signal und dem modellierten Signal, wird mittels Rice-Kodierung verlustfrei im Subframe gespeichert.
* Framing: Zuletzt werden die entstandenen Frames mit Header und Footer versehen, die unter anderem für Fehlererkennung mittels CRC und Synchronisierbarkeit sorgen.
Die Dekompression und Dekodierung geschieht in umgekehrter Reihenfolge, wobei insbesondere eine Zwischenspeicherung von Daten kaum nötig ist: Bei sofortiger Wiedergabe müssen lediglich die Daten eines Blocks (üblicherweise wenige Kilobyte) im Speicher gehalten werden. Da ein Frame alle Informationen über das Tonsignal, wie Abtastrate, Bittiefe und Kanalformat, eigenständig beinhalten kann, ist es möglich, Frames unabhängig voneinander und unabhängig von einem Container zu dekodieren.

### Kompressionsstufen

Die Parameter des Enkoders regeln unter anderem die Blockgröße, den Grad der Linear-Predictive-Kodierung oder den Einsatz der Mid-Side-Kodierung. Um die Handhabung zu vereinfachen, verfügt die Referenzimplementierung über 9 wählbare Kompressionsstufen, die jeweils für eine bestimmte Auswahl an Parameterkombinationen stehen. Die höheren Stufen wirken sich nur gering auf die Reduzierung der Dateigröße aus, dafür steigt jedoch die benötigte Rechenzeit überproportional an; die Dekodiergeschwindigkeit bleibt hingegen nahezu konstant.
* Die Stufen 0 bis 2 arbeiten mit recht kleinen Blöcken und fixen LPC-Koeffizienten, um die Kodiergeschwindigkeit zu erhöhen.
* Die Stufen 3 bis 6 benutzen größere Blöcke und einen LPC-Grad bis zu acht, um platzsparender zu komprimieren.
* Die Stufen 7 und 8 versuchen zusätzlich, durch ausgiebige Suche nach den optimalen Kodierungsparametern (exhaustive model search) die Zieldatei auf eine minimale Größe zu komprimieren, was die Enkodiergeschwindigkeit deutlich verlangsamt.
Als Standard verwendet die Referenzimplementierung Stufe 5.

## Verbreitung

Da FLAC auch zum Ogg-Framework der Xiph.Org Foundation gehört, kommt die Bekanntheit anderer Formate der Stiftung, wie zum Beispiel Vorbis, auch FLAC zugute. Zusätzlich gibt es entsprechende Bemühungen, den Codec auf alle Plattformen zu portieren, die Ogg unterstützen.

### Soft- und Hardwareunterstützung

Da FLAC freie Software ist, darf jedes beliebige Programm und jedes Gerät es nutzen. So wird es standardmäßig von den meisten Linux-Distributionen unterstützt. Für viele weitere Betriebssysteme stehen FLAC-Plug-ins sowie Abspielprogramme zur Verfügung, die FLAC unterstützen – Beispiele sind VLC media player, Quod Libet, Songbird, Winamp, Clementine, AIMP, The KMPlayer, Media Player Classic und foobar2000. Die freie libavcodec-Bibliothek des FFmpeg-Projekts unterstützt FLAC und somit auch die große Zahl an freier und kommerzieller Software, welche auf libavcodec aufbaut. Beispiele hierfür sind Videoschnittprogramme wie DaVinci Resolve oder Audioeditoren wie Audacity.
Seit etwa 2003 gibt es Geräte auf dem Markt, auch zunehmend tragbare Player, die das freie Audioformat abspielen können. Für viele Player, bei denen die Firmware aktualisiert werden kann, gibt es zusätzlich Open-Source-Projekte, die FLAC-Wiedergabe unterstützen, beispielsweise Rockbox. Für Mobiltelefone mit Android sind verschiedene Programme zum Abspielen von FLAC verfügbar. Ab der Version 3.1 bietet Android native FLAC-Unterstützung. Unter Symbian kann beispielsweise die Freeware OggPlay verwendet werden. In Webbrowsern wird FLAC Playback nativ bei Firefox seit Version 51 und in Chrome ab Version 56 voll unterstützt.

### Online-Vertrieb

Einige Online-Shops bieten Audiomaterial zusätzlich im Format FLAC an oder haben sich generell auf verlustfreie Audioformate spezialisiert, beispielsweise bietet GOG.com DRM-freie Computerspiel-Soundtracks im FLAC-Format an. Besonders Anbieter hochauflösender Musikaufnahmen sind auf eine verlustfreie Audiokomprimierung angewiesen.
Viele Musikstreamingdienste, die ihren Kunden Musik verlustfrei zur Verfügung stellen, setzen FLAC ein. Dazu gehören beispielsweise Tidal und Deezer.