FLAC(/ flæk / ; Free Lossless Audio Codec )は、Xiph.Org Foundationによって開発された、デジタルオーディオのロスレス圧縮のためのオーディオコーディングフォーマットであり、コーデック実装を含むリファレンスソフトウェアパッケージであるFLACツールを作成するフリーソフトウェアプロジェクトの名前でもあります。FLACのアルゴリズムによって圧縮されたデジタルオーディオは、通常、元のサイズの50~70パーセントに縮小でき[ 4 ]、元のオーディオデータとまったく同じコピーに解凍されます。
FLACは、ロイヤリティフリーのライセンスを持つオープンフォーマットであり、リファレンス実装はフリーソフトウェアです。FLACは、メタデータタグ付け、アルバムカバーアート、高速シークをサポートしています。
開発は2000年にジョシュ・コールソンによって開始されました。ビットストリーム形式は、2001年3月31日にリファレンス実装のバージョン0.9がリリースされた時点で確定しました。バージョン1.0は2001年7月20日にリリースされました。[ 5 ]
2003年1月29日、Xiph.Org財団とFLACプロジェクトは、FLACをXiph.orgの傘下に組み込むことを発表した。Xiph.orgは、Vorbis、Theora、Speex、Opusなどの他のフリー圧縮フォーマットの本拠地でもある。[ 5 ] [ 6 ] [ 7 ]
バージョン1.3.0は2013年5月26日にリリースされ、その時点で開発はXiph.orgのgitリポジトリに移管されました。[ 8 ]
2019年にFLACはIETF標準として提案された。[ 9 ]
2024年12月、FLACはRFC 9639で正式に規定され、公開された。[ 10 ]
FLACは線形パルス符号変調データのロスレス符号化である。[ 11 ]
FLACファイルは、マジックナンバーfLaC、メタデータ、エンコードされたオーディオで構成されています。[ 11 ]
エンコードされた音声はフレームに分割され、各フレームはヘッダー、データブロック、およびCRC16チェックサムで構成されます。各フレームは他のフレームとは独立してエンコードされます。フレームヘッダーは、有効なフレームの開始を識別するために使用される同期ワードで始まります。ヘッダーの残りの部分には、サンプル数、フレームの位置、チャネル割り当て、およびオプションでサンプルレートとビット深度が含まれます。データブロックには音声情報が含まれます。[ 11 ]
FLAC のメタデータはオーディオより前に記述されます。サンプル レートやチャンネル数などのプロパティは常にメタデータに含まれています。また、アルバム カバーなどの他の情報も含まれる場合があります。[ 11 ] FLAC では、トラック タイトルやアーティスト名などのテキスト メタデータにVorbis コメントを使用します。

flacコマンドラインソフトウェアのスクリーンショットFLAC エンコード アルゴリズムは複数のステージで構成されています。最初のステージでは、入力オーディオがブロックに分割されます。オーディオに複数のチャンネルが含まれている場合、各チャンネルはサブブロックとして個別にエンコードされます。エンコーダは、単純な多項式を当てはめるか、一般的な線形予測符号化を使用して、ブロックの適切な数学的近似を見つけようとします。数バイトの長さしかない近似の説明が書き込まれます。最後に、近似と入力の差である残差が、ライス コーディングを使用してエンコードされます。多くの場合、近似の説明とエンコードされた残差は、パルス符号変調を使用するよりも少ないスペースで済みます。[ 11 ]
デコード処理はエンコードの逆です。まず圧縮残差がデコードされます。[ 12 ] [ 13 ]次に、数学的近似の説明を使用して波形を計算します。結果は、残差と計算された波形を加算することによって形成されます。[ 14 ] [ 15 ] FLACはロスレス圧縮であるため、デコードされた波形はエンコード前の波形と同一です。
2チャンネルステレオの場合、エンコーダは音声をジョイントエンコードすることを選択する場合があります。チャンネルは、2つの入力チャンネルの差であるサイドチャンネルと、2つの入力チャンネルの合計であるミッドチャンネルに変換されます。ミッドチャンネルの代わりに、左チャンネルまたは右チャンネルをエンコードすることも可能で、その方がスペース効率が良い場合があります。[ 16 ]
参照エンコーダーはストリーム全体に単一のブロックサイズを使用するが、 [ 11 ] FLACではブロックごとにサンプルのブロックサイズが変化する。
圧縮率は、線形予測モデルの次数やブロックサイズなど、さまざまなパラメータによって決定されます。圧縮率に関わらず、元のデータは常に完全に復元可能です。
ユーザーの利便性のために、リファレンス実装では、エンコードアルゴリズムのより技術的なパラメータのプリセットである 9 つの圧縮レベルが定義されています。レベルは 0 から 8 までラベル付けされており、数値が大きいほど圧縮率が高くなりますが、圧縮速度は低下します。各圧縮レベルの意味は実装によって異なります。[ 17 ] [ 18 ]
FLACはエンコード速度を犠牲にしてデコード速度を最適化しています。ベンチマークによると、圧縮レベルが上がってもデコード速度にはほとんど変化がないものの、デフォルトの圧縮レベル5を超えると、エンコード処理はレベル5と比較して大幅に時間がかかり、節約できる容量はわずかであることが示されています。[ 19 ]
FLACプロジェクトには、フォーマットに加えて、libFLACと呼ばれるFLACの無料かつオープンソースのリファレンス実装も含まれています。libFLACには、FLACデータのエンコードとデコード、およびFLACファイルのメタデータの操作を行う機能が備わっています。C ++用のlibFLACのオブジェクト指向ラッパーであるlibFLAC++ 、およびコマンドラインプログラムも、リファレンス実装の一部です。flacmetaflac
FLACフォーマットおよびlibFLACは、特許で保護されているという情報はなく、誰でも自由に独自のFLAC実装を作成できます。
FLACは、 ZIPやgzipで使用されるDEFLATEなどの汎用ロスレスアルゴリズムとは異なり、オーディオデータの効率的なパッキングのために特別に設計されています。ZIPはCD品質のオーディオファイルのサイズを10~20%削減できますが、FLACはオーディオの特性を利用することでオーディオデータのサイズを40~50%削減できます[ 20 ] 。
FLACの他のロスレスフォーマットと比較した技術的な強みは、圧縮レベルに関係なく、ストリーミングとデコードが高速に行える点にある。[ 20 ]
FLACはロスレス方式であるため、CDやその他のメディアの所有者がオーディオコレクションを保存したい場合のアーカイブ形式として適しています。元のメディアが紛失、破損、または摩耗した場合でも、オーディオトラックのFLACコピーがあれば、元のデータの正確な複製をいつでも復元できます。同じデータのロッシーコピー(MP3など)からの正確な復元は不可能です。FLACはロスレスであるため、例えばMP3へのトランスコードに非常に適しています。通常、ロッシー形式間で発生するトランスコード品質の損失がありません。CDをリッピングする際に、オプションでCUEファイルを作成できます。CDが完全に読み込まれ、FLACファイルにリッピングされた場合、CUEファイルを使用すると、トラックの順序やプリギャップを含め、元のCDとオーディオデータが同一であるオーディオCDを後で書き込むことができます。ただし、歌詞やCD+Gグラフィックなどの追加データは除外されます。[ 21 ]しかし、使用する書き込みプログラムによっては、CUE シートに保存されているメタデータからCD-Text を復元し、空の CD-R メディアに新しいコピーを書き戻すことができます。
FLAC のリファレンス実装は、libFLACコアエンコーダーおよびデコーダーライブラリとして実装されており、配布可能なメインプログラムはflaclibFLAC API のリファレンス実装です。このコーデックAPI は、libFLAC++ として C++ でも利用可能です。FLAC のリファレンス実装は、ほとんどのUnix ( Solaris、BSDなど) およびUnix ライク( Linuxを含む)、Windows、BeOS、OS/2オペレーティングシステムを含む多くのプラットフォームでコンパイルできます。autotoolsおよびCMake [ 22 ]用のビルドシステムがあります。libFLAC には現在マルチコアのサポートはありませんが、 GNU parallelなどのユーティリティやさまざまなグラフィカル フロントエンドを使用して、エンコーダーの複数のインスタンスを起動できます。
FLAC の再生サポートは、ポータブルオーディオ機器や専用オーディオシステムでは MP3 [ 23 ]や非圧縮PCMなどのフォーマットに比べて限定的です。FLAC のサポートは、 Windows 10 [ 24 ] 、Android [ 25 ] 、macOS、iOS [ 26 ]にデフォルトで含まれています。
使用する再生ソフトウェアに応じて、使用するオペレーティングシステムとは無関係に、その他さまざまなコンテナがサポートされます。
FLAC フォーマットのRFC 9639への標準化プロセスは、アーカイブと保存という特定のユースケースを念頭に置いて推進されました。[ 30 ]米国国立公文書館は、FLAC をデジタルオーディオの推奨フォーマットとしてリストしています。[ 31 ]
「fLaC」は、ASCII での FLAC ストリームマーカーで、ストリームのバイト 0 は 0x66 であり、その後に 0x4C 0x61 0x43 が続きます。