| 無料のロスレスオーディオコーデック | |
|---|---|
| 開発者 | Xiph.Org Foundation、Josh Coalson、Erik de Castro Lopo |
| 初回リリース | 2001年7月20日 (2001年7月20日) |
| 安定版リリース | 1.5.0 [ 1 ] / 2025年2月11日 (2025年2月11日) |
| リポジトリ | |
| 書かれた | C、C++ |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | コーデック |
| ライセンス | コマンドラインツール: GNU GPLライブラリ: BSD |
| Webサイト | xiph |
| 無料のロスレスオーディオコーデック | |
|---|---|
| ファイル名拡張子 | .flac |
| インターネットメディアの種類 | オーディオ/flac |
| 統一型識別子(UTI) | org.xiph.flac |
| 魔法の数字 | fLaC [ 2 ] |
| フォーマットの種類 | ロスレスオーディオ |
| 標準 | RFC 9639 |
| オープンフォーマット? | はい[ 3 ] |
| フリーフォーマット? | はい |
FLAC(/ f l æ 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エンコードアルゴリズムは複数の段階から構成されています。第1段階では、入力音声がブロックに分割されます。音声に複数のチャンネルが含まれている場合、各チャンネルはサブブロックとして個別にエンコードされます。次に、エンコーダは、単純な多項式を当てはめるか、一般線形予測符号化によって、ブロックの適切な数学的近似値を見つけようとします。近似値の記述は数バイトの長さで、書き込まれます。最後に、近似値と入力値の差(残差)がライス符号化を使用してエンコードされます。多くの場合、近似値とエンコードされた残差の記述は、パルス符号変調を使用する場合よりも少ないスペースを占めます。[ 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 はロスレスであるため、通常は1 つの非可逆形式から別の形式へのトランスコードで発生する品質の低下がなく、MP3 などへのトランスコードに非常に適しています。CD をリッピングするときに、オプションでCUE ファイルを作成できます。CD が読み込まれ、FLAC ファイルに完全にリッピングされた場合、CUE ファイルを使用して、トラック順やプリギャップなど、元の CD とオーディオデータが同一のオーディオ CD を後で書き込むことができますが、歌詞やCD+Gグラフィックなどの追加データは除きます。 [ 21 ]しかし、使用する書き込みプログラムによっては、 CUEシートに保存されているメタデータからCD-Textを復元し、空のCD-Rメディアに新しいコピーとして書き込むことができる。
FLAC のリファレンス実装は、libFLACコアエンコーダ&デコーダライブラリとして実装されており、主な配布プログラムはflaclibFLAC API のリファレンス実装です。このコーデックAPI は、C++ でも libFLAC++ として利用できます。FLAC のリファレンス実装は、ほとんどのUnix ( Solaris、BSDなど) およびUnix 系( Linuxを含む)、Windows、BeOS、OS/2オペレーティングシステムなど、多くのプラットフォームでコンパイルできます。autoconf / automake、MSVC、Watcom C、Xcode用のビルドシステムがあります。libFLAC は現在マルチコアをサポートしていませんが、 GNU parallelなどのユーティリティやさまざまなグラフィカルフロントエンドを使用して、エンコーダの複数のインスタンスを起動できます。
FLACの再生サポートは、MP3 [ 22 ]や非圧縮PCMなどのフォーマットに比べてポータブルオーディオ機器や専用オーディオシステムでは限られています。FLACのサポートは、 Windows 10、[ 23 ] Android、[ 24 ] macOS、iOS [ 25 ]にデフォルトで含まれています。
| マイクロソフトウィンドウズ | macOS | アンドロイド | iOS | |
|---|---|---|---|---|
| コーデックのサポート | はい | はい | はい | はい |
| コンテナサポート | FLAC (.flac)マトロスカ(.mka、.mkv) Ogg (.oga) [ 26 ] | FLAC (.flac)コアオーディオ形式(.caf) | FLAC (.flac) | FLAC (.flac)コアオーディオ形式(.caf) |
| 注記 | Windows 10でサポートが導入されました。 Windows Media Player(2022)は、ライブストリーム( Icecastインターネットラジオなど)用のOggコンテナ内のFLACもサポートしています。[ 27 ] | macOS 10.13 High Sierraでサポートが導入されました。 | Android 3.1 でサポートが導入されました。 Androidはネイティブで通常のFLAC(.flac)をサポートしていますが、Ogg FLAC(.oga)はサポートしていません。[ 28 ]ただし、通常のFLACとOgg FLACの両方のサポートが、後にFiles(Google)ファイルマネージャーに追加されました。 | iOS 11 でサポートが導入されました (ただし、ハードウェアによって異なります)。 |
使用される再生ソフトウェアに応じて、使用されるオペレーティング システムとは関係なく、さまざまな他のコンテナーがサポートされます。
FLAC形式のRFC 9639への標準化プロセスは、アーカイブと保存という特定のユースケースを念頭に置いて進められました。[ 29 ]米国国立公文書記録管理局は、FLACをデジタルオーディオの推奨形式として挙げています。 [ 30 ]
「fLaC」は、ASCIIのFLACストリームマーカーで、ストリームのバイト0が0x66で、その後に0x4C 0x61 0x43が続くことを意味します。