FLAC

音声コーデック

予測および残差符号化によってPCMデータの容量を削減し、復号後に元のサンプリングデータを復元できる、オープンなロスレス音声符号化およびファイル形式である。

詳細説明

FLAC(Free Lossless Audio Codec、自由无损音频编解码器)は、デジタルオーディオ向けのオープンなロスレス符号化フォーマットであり、Josh Coalson によって提唱され、2001年に初めてリファレンス実装が公開され、その後 Xiph.Org によってメンテナンスされている。FLACのストリーム仕様は現在、RFC 9639に完全に記述されています。これは、オーディオ符号化方式を指すと同時に、ネイティブの`.flac`ファイルで採用されているストリームおよびメタデータ構造も指します。

「ロスレス」とは、復号後のPCMサンプリングがエンコーダの入力と一致することを意味しますが、ファイルが圧縮されていないことを示すものではありません。FLACはオーディオをフレームとサブフレームに分割し、各チャンネルに対して定数、逐次保存、固定予測、または線形予測などの方式を選択し、予測残差をRice符号化で保存します。ステレオの場合、左右、センター・サイド、または差分チャンネルの割り当てを使用して、チャンネル間の冗長性を低減することもできます。エンコードレベルは主に予測検索、ブロック分割、および圧縮にかかる時間を変更するものであり、正しくデコードされた後のオーディオデータ自体を変更してはなりません。

ネイティブストリームは `fLaC` 識別子で始まり、その後に必須の STREAMINFO ブロック、オプションのメタデータブロック、そしてオーディオフレームが続きます。STREAMINFOには、サンプリングレート、チャンネル数、有効ビット数、総サンプル数などの情報が格納され、非圧縮オーディオのMD5チェックサムを含めることもできます。その他のブロックには、Vorbis Commentタグ、カバーアート、インデックスポイント、CUEシート、およびパディングを格納できます。フレーム自体には同期情報とチェックサム情報が含まれており、ストリーミングデコードや一定程度のエラー位置特定を容易にします。

FLACはWAVEやZIPの別名ではありません。WAVEはPCMやその他の符号化形式をカプセル化できるRIFFファイルですが、FLACはオーディオサンプルに対して予測モデルを構築します。一般的な圧縮アルゴリズムでは、オーディオの連続的な相関性を活用することは通常困難です。FLACはOggやMatroskaコンテナにマッピングすることも可能で、その場合はファイル構造がネイティブの`.flac`とは異なりますが、内部のオーディオは依然としてFLACのルールに従ってデコードされます。

ロスレスFLACを異なる圧縮レベルで再エンコードすることで、サンプリングデータを変更することなく、ファイルサイズやエンコード速度を変更することができます。MP3やAACなどのロス有源をFLACに変換しても、すでにデコードされた結果がロスレスで保存されるだけであり、元のストリームから削除された内容を復元することはできません。また、ファイルサイズが大きくなったからといって、そのソースがロスレスのマスターテープであることを証明するものではありません。チェックサムはデータの変更を検出することはできますが、録音、マスターテープ、またはそれ以前の処理が本物であるかどうかを判断することはできません。