FLAC

無料のロスレスオーディオコーデック
開発者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日
リポジトリ
書かれたCC++
オペレーティング·システムクロスプラットフォーム
タイプコーデック
ライセンスコマンドラインツール: GNU GPLライブラリ: BSD
Webサイトxiph .org /flac
無料のロスレスオーディオコーデック
ファイル名拡張子
.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は、VorbisTheoraSpeexOpusといった他の無料圧縮フォーマットも管理しています。[ 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は、 ZIPgzipで使用されている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 ( SolarisBSDなど) およびUnix 系( Linuxを含む)、WindowsBeOSOS/2オペレーティングシステムなど、多くのプラットフォームでコンパイルできます。autoconf / automakeMSVCWatcom CXcode用のビルドシステムがあります。libFLAC は現在マルチコアをサポートしていませんが、 GNU parallelなどのユーティリティやさまざまなグラフィカルフロントエンド使用して、エンコーダの複数のインスタンスを起動できます。

ハードウェアとソフトウェア

FLACの再生サポートは、MP3 [ 22 ]や非圧縮PCMなどのフォーマットに比べてポータブルオーディオ機器や専用オーディオシステムでは限られています。FLACのサポートは、 Windows 10[ 23 ] Android[ 24 ] macOSiOS [ 25 ]にデフォルトで含まれています。

さまざまなオペレーティングシステムによるFLACのサポート
マイクロソフトウィンドウズ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 ] 

参照

参考文献

  1. ^ 「FLAC 1.5、ついにマルチスレッドエンコーディングを実現」 2025年2月11日。 2025年2月11日閲覧
  2. ^ Coalson, Josh. 「FLAC – フォーマット」 . Xiph.Org Foundation . 2013年3月11日時点のオリジナルよりアーカイブ。 2013年4月4日閲覧「fLaC」は、ASCIIのFLACストリームマーカーで、ストリームのバイト0が0x66で、その後に0x4C 0x61 0x43が続くことを意味します。
  3. ^ "PlayOgg!" .フリーソフトウェア財団. 2010年3月17日. 2013年10月1日閲覧
  4. ^ 「FLAC圧縮率の考察」 Steven Pigeon、2012年2月7日。 2018年5月10日閲覧
  5. ^ a b「特集」 . Xiph.Org Foundation . 2023年11月23日閲覧
  6. ^ 「FLACがXiph.orgに参加」 Xiph.org Foundation、2003年1月29日。 2009年8月31日閲覧
  7. ^ Plant, Emmett. 「FLACがXiphに加わる!」 Xiph.org Foundation . 2008年5月29日時点のオリジナルよりアーカイブ。 2009年8月31日閲覧
  8. ^ 「FLAC – changelog」 . Xiph.org Foundation . 2013年10月15日閲覧
  9. ^ファン・ビューデン、マルティン;ウィーバー、アンドリュー。無料のロスレスオーディオコーデック。 ID ドラフト-ietf-cellar-flac 2023 年5 月 14 日に取得
  10. ^ Coalson, Josh. 「FLAC - FLACは現在RFC 9639で正式に規定されています」 . xiph.org . 2025年2月12日閲覧
  11. ^ a b c d e f Coalson, Josh. 「FLACフォーマットについて」 . 2022年2月13日閲覧
  12. ^ "stream_decoder.c" . libFLAC . 2022年2月19日閲覧
  13. ^ libFLAC/stream_decoder.c、2734行目。
  14. ^ "lpc.c" . libFLAC . 2022年2月19日閲覧
  15. ^ libFLAC/lpc.c、813~820行目。
  16. ^ 「FLACフォーマット仕様」 . FLAC . 2022年2月19日閲覧
  17. ^ 「CUETools FLACエンコーダー比較」 . CUETools Wiki . 2013年5月27日閲覧
  18. ^ 「エンコーディング設定」 . JRiver Media Centre . 2013年5月27日閲覧
  19. ^ 「ロスレスコーデックの比較」 Synthetic-soul.co.uk 2009年2月2日時点のオリジナルよりアーカイブ2016年11月26日閲覧。
  20. ^ a b「ロスレスオーディオコーデック比較リビジョン6 - CDDAパート」 。 2025年12月27日閲覧
  21. ^ 「FAQ」 . FLAC . 2014年9月23日閲覧
  22. ^ "Links" . FLAC . 2009年3月24日閲覧
  23. ^ 「オーディオ愛好家歓喜:Windows 10はシステム全体でFLACをサポートする」 PC World 2015年7月10日閲覧
  24. ^ 「Androidでサポートされているメディア形式」 . Android.com . 2024年9月27日. 2024年12月20日閲覧
  25. ^ 「iOS 11ではiPhoneとiPadでロスレスFLACオーディオ再生が可能に」 idownloadblog.com 2017年6月9日. 2017年9月26日閲覧
  26. ^ 「MIME タイプとファイル拡張子 - XiphWiki」
  27. ^ 「FLAC と Ogg FLAC」
  28. ^ 「Android プラットフォームは OGG コンテナ形式 (OGA) を完全にサポートしていません [36906426] - 一般公開 - 問題トラッカー」
  29. ^ 「ロスレスアーカイブとリアルタイム伝送のためのコーデックエンコーディング」
  30. ^ 「付録A: ファイル形式の表 | 国立公文書館」