FLAC: Difference between revisions
FLACの可逆圧縮、stream構造、metadata、compression levelを詳説 |
NekoDensen (talk | contribs) 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の基本構造は、
- 4 byteの
fLaCsignature - STREAMINFO metadata block
- 0個以上の追加metadata block
- 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として採用する。