FLAC: Difference between revisions

From daw.wiki
Jump to navigation Jump to search
DawWriter (talk | contribs)
FLACの可逆圧縮、stream構造、metadata、compression levelを詳説
 
Marked this version for translation
 
Line 2: Line 2:


<translate>
<translate>
<!--T:1-->
'''FLAC'''(Free Lossless Audio Codec)は、可逆音声圧縮codecおよびそのnative bitstream/file formatである。通常のファイル拡張子は<code>.flac</code>である。
'''FLAC'''(Free Lossless Audio Codec)は、可逆音声圧縮codecおよびそのnative bitstream/file formatである。通常のファイル拡張子は<code>.flac</code>である。


<!--T:2-->
FLACは復号時に元のPCMサンプル列を完全に復元でき、音楽ライブラリ、アーカイブ、配布、バックアップなどで広く用いられる。
FLACは復号時に元のPCMサンプル列を完全に復元でき、音楽ライブラリ、アーカイブ、配布、バックアップなどで広く用いられる。


<!--T:3-->
== 可逆圧縮 ==
== 可逆圧縮 ==
FLACは[[<tvar name=1>Special:MyLanguage/可逆圧縮音声ファイル</tvar>|可逆圧縮]]である。
FLACは[[<tvar name=1>Special:MyLanguage/可逆圧縮音声ファイル</tvar>|可逆圧縮]]である。


<!--T:4-->
非可逆圧縮のように聴覚上不要な情報を捨てるのではなく、PCM中の予測可能性や統計的冗長性を利用してデータ量を減らす。
非可逆圧縮のように聴覚上不要な情報を捨てるのではなく、PCM中の予測可能性や統計的冗長性を利用してデータ量を減らす。


<!--T:5-->
decode後のPCMは元データと一致する。
decode後のPCMは元データと一致する。


<!--T:6-->
== 基本構造 ==
== 基本構造 ==
Xiph.OrgによるFLAC streamの基本構造は、
Xiph.OrgによるFLAC streamの基本構造は、


<!--T:7-->
# 4 byteの<code>fLaC</code> signature
# 4 byteの<code>fLaC</code> signature
# STREAMINFO metadata block
# STREAMINFO metadata block
Line 21: Line 28:
# 1個以上のaudio frame
# 1個以上のaudio frame


<!--T:8-->
である。<ref name="xiph-flac-overview">[https://xiph.org/flac/documentation_format_overview.html Xiph.Org, ''FLAC Format overview'']</ref>
である。<ref name="xiph-flac-overview">[https://xiph.org/flac/documentation_format_overview.html Xiph.Org, ''FLAC Format overview'']</ref>


<!--T:9-->
== STREAMINFO ==
== STREAMINFO ==
STREAMINFOは必須metadata blockである。
STREAMINFOは必須metadata blockである。


<!--T:10-->
サンプルレート、channel数、bits per sample、総sample数などの情報を含む。
サンプルレート、channel数、bits per sample、総sample数などの情報を含む。


<!--T:11-->
またunencoded audio dataのMD5 signatureを保持でき、decode後データの完全性確認に利用できる。<ref name="xiph-flac-streaminfo">[https://xiph.org/flac/api/structFLAC____StreamMetadata__StreamInfo.html Xiph.Org, ''FLAC STREAMINFO'']</ref>
またunencoded audio dataのMD5 signatureを保持でき、decode後データの完全性確認に利用できる。<ref name="xiph-flac-streaminfo">[https://xiph.org/flac/api/structFLAC____StreamMetadata__StreamInfo.html Xiph.Org, ''FLAC STREAMINFO'']</ref>


<!--T:12-->
== metadata block ==
== metadata block ==
FLACでは複数種類のmetadata blockが定義される。
FLACでは複数種類のmetadata blockが定義される。


<!--T:13-->
Xiph.Orgのreference APIでは、
Xiph.Orgのreference APIでは、


<!--T:14-->
* STREAMINFO
* STREAMINFO
* PADDING
* PADDING
Line 43: Line 57:
* PICTURE
* PICTURE


<!--T:15-->
などが定義されている。<ref name="xiph-flac-meta">[https://xiph.org/flac/api/group__flac__format.html Xiph.Org, ''FLAC format components'']</ref>
などが定義されている。<ref name="xiph-flac-meta">[https://xiph.org/flac/api/group__flac__format.html Xiph.Org, ''FLAC format components'']</ref>


<!--T:16-->
== Vorbis Comment ==
== Vorbis Comment ==
FLACのtaggingにはVORBIS_COMMENT blockが一般的に用いられる。
FLACのtaggingにはVORBIS_COMMENT blockが一般的に用いられる。


<!--T:17-->
artist、album、title、track number等のmetadataをkey/value形式で保持できる。
artist、album、title、track number等のmetadataをkey/value形式で保持できる。


<!--T:18-->
== PICTURE ==
== PICTURE ==
PICTURE blockを使うことでalbum artwork等の画像を埋め込める。
PICTURE blockを使うことでalbum artwork等の画像を埋め込める。


<!--T:19-->
== SEEKTABLE ==
== SEEKTABLE ==
SEEKTABLEは長いFLAC streamで任意位置へseekする際の効率を高めるために利用できる。
SEEKTABLEは長いFLAC streamで任意位置へseekする際の効率を高めるために利用できる。


<!--T:20-->
== 圧縮方式 ==
== 圧縮方式 ==
FLACでは入力信号をblockへ分割し、予測器を使ってsample値を予測する。
FLACでは入力信号をblockへ分割し、予測器を使ってsample値を予測する。


<!--T:21-->
予測値との差であるresidualは、Rice coding等を用いて効率的に符号化される。
予測値との差であるresidualは、Rice coding等を用いて効率的に符号化される。


<!--T:22-->
信号が予測しやすいほど高い圧縮効果を得やすい。
信号が予測しやすいほど高い圧縮効果を得やすい。


<!--T:23-->
== 圧縮レベル ==
== 圧縮レベル ==
FLAC encoderには複数のcompression levelを持つ実装が多い。
FLAC encoderには複数のcompression levelを持つ実装が多い。


<!--T:24-->
compression levelを高くするとencoderがより多くの探索や計算を行い、ファイルが少し小さくなる場合がある。
compression levelを高くするとencoderがより多くの探索や計算を行い、ファイルが少し小さくなる場合がある。


<!--T:25-->
重要なのは、'''圧縮レベルが変わっても復号後PCMの音質は変わらない'''ことである。
重要なのは、'''圧縮レベルが変わっても復号後PCMの音質は変わらない'''ことである。


<!--T:26-->
FLACはすべてlosslessであり、compression levelは情報を捨てるquality parameterではない。
FLACはすべてlosslessであり、compression levelは情報を捨てるquality parameterではない。


<!--T:27-->
== decode負荷 ==
== decode負荷 ==
一般にFLACは比較的軽量にdecodeできるよう設計されている。
一般にFLACは比較的軽量にdecodeできるよう設計されている。


<!--T:28-->
音楽再生では保存容量を減らしながら元PCMを保持できるため、lossless music libraryに適する。
音楽再生では保存容量を減らしながら元PCMを保持できるため、lossless music libraryに適する。


<!--T:29-->
== サポート範囲 ==
== サポート範囲 ==
Xiph.Orgの現行format APIは最大8 channel、最大32 bits per sampleなどのformat componentを定義している。<ref name="xiph-flac-limits">[https://xiph.org/flac/api/format_8h.html Xiph.Org, ''FLAC format.h reference'']</ref>
Xiph.Orgの現行format APIは最大8 channel、最大32 bits per sampleなどのformat componentを定義している。<ref name="xiph-flac-limits">[https://xiph.org/flac/api/format_8h.html Xiph.Org, ''FLAC format.h reference'']</ref>


<!--T:30-->
実際に利用できるparameterはdecoder、container、Subset等の制約にも依存する。
実際に利用できるparameterはdecoder、container、Subset等の制約にも依存する。


<!--T:31-->
== FLACとWAV ==
== FLACとWAV ==
[[<tvar name=2>Special:MyLanguage/WAV</tvar>|WAV]]/PCMとFLACは、正しく変換すれば同一PCMを相互に保持できる。
[[<tvar name=2>Special:MyLanguage/WAV</tvar>|WAV]]/PCMとFLACは、正しく変換すれば同一PCMを相互に保持できる。


<!--T:32-->
違いは、
違いは、


<!--T:33-->
* FLACは圧縮される
* FLACは圧縮される
* FLACはdecode処理が必要
* FLACはdecode処理が必要
Line 92: Line 125:
* software/hardware compatibilityが異なる
* software/hardware compatibilityが異なる


<!--T:34-->
点にある。
点にある。


<!--T:35-->
FLACからWAVへdecodeしても、lossless sourceであれば品質劣化は発生しない。
FLACからWAVへdecodeしても、lossless sourceであれば品質劣化は発生しない。


<!--T:36-->
== FLACとALAC ==
== FLACとALAC ==
FLACとALACはいずれも可逆音声圧縮である。
FLACとALACはいずれも可逆音声圧縮である。


<!--T:37-->
ALACはApple製品・M4Aとの関係が強く、FLACは独立したnative file formatとして広く利用される。
ALACはApple製品・M4Aとの関係が強く、FLACは独立したnative file formatとして広く利用される。


<!--T:38-->
== FLACとMP3 ==
== FLACとMP3 ==
[[<tvar name=3>Special:MyLanguage/MP3</tvar>|MP3]]は非可逆圧縮であり、元PCMを完全復元できない。
[[<tvar name=3>Special:MyLanguage/MP3</tvar>|MP3]]は非可逆圧縮であり、元PCMを完全復元できない。


<!--T:39-->
FLACは一般にMP3よりファイルサイズが大きいが、元音声データを保持できる。
FLACは一般にMP3よりファイルサイズが大きいが、元音声データを保持できる。


<!--T:40-->
== アーカイブ ==
== アーカイブ ==
FLACは、
FLACは、


<!--T:41-->
* checksum
* checksum
* metadata
* metadata
Line 114: Line 155:
* 公開されたformat documentation
* 公開されたformat documentation


<!--T:42-->
を持つため、archive用途でも利用される。
を持つため、archive用途でも利用される。


<!--T:43-->
ただし組織やワークフローによってはBroadcast WAVなど非圧縮形式をmasterとして採用する。
ただし組織やワークフローによってはBroadcast WAVなど非圧縮形式をmasterとして採用する。


<!--T:44-->
== 関連項目 ==
== 関連項目 ==
* [[<tvar name=4>Special:MyLanguage/音声ファイル</tvar>|音声ファイル]]
* [[<tvar name=4>Special:MyLanguage/音声ファイル</tvar>|音声ファイル]]
Line 127: Line 171:
* [[<tvar name=10>Special:MyLanguage/Codec</tvar>|コーデック]]
* [[<tvar name=10>Special:MyLanguage/Codec</tvar>|コーデック]]


<!--T:45-->
== 参考資料 ==
== 参考資料 ==
<references />
<references />
</translate>
</translate>

Latest revision as of 06:40, 9 October 2026

FLAC(Free Lossless Audio Codec)は、可逆音声圧縮codecおよびそのnative bitstream/file formatである。通常のファイル拡張子は.flacである。

FLACは復号時に元のPCMサンプル列を完全に復元でき、音楽ライブラリ、アーカイブ、配布、バックアップなどで広く用いられる。

可逆圧縮

FLACは可逆圧縮である。

非可逆圧縮のように聴覚上不要な情報を捨てるのではなく、PCM中の予測可能性や統計的冗長性を利用してデータ量を減らす。

decode後のPCMは元データと一致する。

基本構造

Xiph.OrgによるFLAC streamの基本構造は、

  1. 4 byteのfLaC signature
  2. STREAMINFO metadata block
  3. 0個以上の追加metadata block
  4. 1個以上のaudio frame

である。[1]

STREAMINFO

STREAMINFOは必須metadata blockである。

サンプルレート、channel数、bits per sample、総sample数などの情報を含む。

またunencoded audio dataのMD5 signatureを保持でき、decode後データの完全性確認に利用できる。[2]

metadata block

FLACでは複数種類のmetadata blockが定義される。

Xiph.Orgのreference APIでは、

  • STREAMINFO
  • PADDING
  • APPLICATION
  • SEEKTABLE
  • VORBIS_COMMENT
  • CUESHEET
  • PICTURE

などが定義されている。[3]

Vorbis Comment

FLACのtaggingにはVORBIS_COMMENT blockが一般的に用いられる。

artist、album、title、track number等のmetadataをkey/value形式で保持できる。

PICTURE

PICTURE blockを使うことでalbum artwork等の画像を埋め込める。

SEEKTABLE

SEEKTABLEは長いFLAC streamで任意位置へseekする際の効率を高めるために利用できる。

圧縮方式

FLACでは入力信号をblockへ分割し、予測器を使ってsample値を予測する。

予測値との差であるresidualは、Rice coding等を用いて効率的に符号化される。

信号が予測しやすいほど高い圧縮効果を得やすい。

圧縮レベル

FLAC encoderには複数のcompression levelを持つ実装が多い。

compression levelを高くするとencoderがより多くの探索や計算を行い、ファイルが少し小さくなる場合がある。

重要なのは、圧縮レベルが変わっても復号後PCMの音質は変わらないことである。

FLACはすべてlosslessであり、compression levelは情報を捨てるquality parameterではない。

decode負荷

一般にFLACは比較的軽量にdecodeできるよう設計されている。

音楽再生では保存容量を減らしながら元PCMを保持できるため、lossless music libraryに適する。

サポート範囲

Xiph.Orgの現行format APIは最大8 channel、最大32 bits per sampleなどのformat componentを定義している。[4]

実際に利用できるparameterはdecoder、container、Subset等の制約にも依存する。

FLACとWAV

WAV/PCMとFLACは、正しく変換すれば同一PCMを相互に保持できる。

違いは、

  • FLACは圧縮される
  • FLACはdecode処理が必要
  • metadata構造が異なる
  • software/hardware compatibilityが異なる

点にある。

FLACからWAVへdecodeしても、lossless sourceであれば品質劣化は発生しない。

FLACとALAC

FLACとALACはいずれも可逆音声圧縮である。

ALACはApple製品・M4Aとの関係が強く、FLACは独立したnative file formatとして広く利用される。

FLACとMP3

MP3は非可逆圧縮であり、元PCMを完全復元できない。

FLACは一般にMP3よりファイルサイズが大きいが、元音声データを保持できる。

アーカイブ

FLACは、

  • checksum
  • metadata
  • lossless compression
  • 公開されたformat documentation

を持つため、archive用途でも利用される。

ただし組織やワークフローによってはBroadcast WAVなど非圧縮形式をmasterとして採用する。

関連項目

参考資料