FLAC (Free Lossless Audio Codec)とは、オープンソースソフトウエアとして開発されているフリー且つオープンな可逆圧縮音声フォーマット、ならびにフリーソフトウエア(自由なソフトウエア)である
※。
※主にWindows向けの、ただ無料なだけのソフトを指す「フリーウエア(フリーソフト)」とは異り、FLACはソフトウエアのソースコードとそのデータ仕様が修正版BSDライセンスにて公開された「フリーソフトウエア」である。
可逆圧縮なので、元の音声データを損なうことなく圧縮及び展開が可能である。
展開(デコード)しても、元の情報が損なわれたり変化が起きたり、あるいはノイズ成分が入ったりだとか内容が変わることは無い。デジタルデータの可逆圧縮・展開の大原則である。
標準で概ね50%前後の圧縮率を誇る。
汎用のデジタルデータ圧縮方法であるgzipやbzip2を用いた場合、音声データはその仕組み上圧縮の効果が期待できないが、FLACは音声データの可逆圧縮処理に特化することで、高い圧縮率を誇る。
オープンソース・ソフトウエアとして開発されており、そのフォーマットも公開されたものであり、ライセンス料は発生せず商用・非商用問わず利用できる。
限りあるメディア資源で、生のWAV(PCM)ファイルでは幾つも保存するのはキツイので、可逆圧縮である「FLAC」で圧縮保存する。
導入方法
大抵のLinuxディストリビューションや各種BSDにはデフォルトで導入されていることが多いが、無い場合は、これも大抵のディストリビューションや各種BSDであればパッケージ(FreeBSDではports)が用意されているので、これを利用して導入するのが適当。
ソースコードはFLACの公式サイトにあるので、そこから入手されたい。
MacOS Xについては、FLACの公式サイトにバイナリがある。
ヘルプの表示
$ flac --help
WAV(PCM)から変換
$ flac hoge.wav
同一ディレクトリに"hoge.flac"が出来る。
実際の運用ではベリファイ(オリジナルとの比較処理)をした方が良いので、
$ flac -V hoge.wav
とするのが無難。
ただし、処理は遅くなる。
圧縮率を指定することもできる。
$ flac -8 hoge.wav
オプションの後に数字を指定する。
-8 が最も圧縮され、最低は -0 である。指定しない場合は -6 と同等である。
圧縮率が高くなるにつれてCPU使用量も増え、処理時間も増す。
ベリファイと併用する場合は
$ flac -V8 hoge.wav
とする。
FLACからWAV(PCM)へ変換
"-d"オプションを使う。
hoge.flacを変換
$ flac -d hoge.flac
同一ディレクトリに"hoge.wav"が出来る。
既に有る"hoge.wav"に上書きしたい場合は"-f"オプションを使う。
$ flac -df hoge.flac
同一ディレクトリにある複数のflacファイルを変換
$ flac -d *.flac
ワイルドカードが使える。
※シェルによっては、ワイルドカードが利用できない場合がある。
出力先ディレクトリ(と出力ファイル名)を指定する
$ flac -d hoge.flac -o /hoge/hoge/hoge.wav
flacからmp3に変換 (LAMEを使用)
標準出力オプション"-c"を利用し、パイプでLAMEに渡す。
$ flac -dc hoge.flac | lame - -b 128 hoge.mp3
LAMEのオプションは要求と好みで。
mp3以外のものに変換する場合は、他のコマンドに置き換えれば応用が効く。
flacとlameの間にSoX(SOund eXchange)を介せば、様々なエフェクトやリサンプル処理等ができる。
$ flac -dsc hoge.glac | sox -t wav - -t wav - lowpass 10000 rate -h 64000 | lame - -b 96 --resample 32000 hoge.mp3
上記の例では、SoXでローパスフィルタ処理をしてサンプリング周波数64kHzに変換、それをLAMEにパイプで渡し、96kbps,32kHzのmp3にしている。
(注・上記はあくまで例題で、
音質等を考慮したものではない)
Unixシェルでは、LAMEに柔軟なオプションを与えつつ、パイプで他のプログラムによりLAMEの前段に処理を加えられ連続処理ができる。これぞUnix的な方法と言っていいだろう。
また、試聴もLAMEの出力をパイプでplayコマンド等に渡せば、オンザフライで(ファイルへ都度記録することなく)リアルタイムで確認できる。
FLACでオンザフライ録音 (SoXを使用)
recは、その実態はsoxのシンボリックリンクであり、soxがrecという名で呼ばれた時は、入力はサウンドデバイスとなって録音用コマンドとして機能する。
出力ファイル名と形式を指定すれば、ファイルに記録される。サンプリングレート等の設定はsoxと同様である。
recの結果を標準出力に出すのも、soxと同様 "-" である。
recの標準出力をflacの標準入力に送れば、ハードディスク等へのリアルタイム圧縮録音ができる。
flacの標準入力からの受取は "-" となる。出力先は"-o"オプションで明示する。
古い文献(2008年以前程度)だとrecコマンドはパワーが必要等の記述があるが、今時の環境では問題無い。むしろ、FLACの処理のほうがCPU資源を要する。
(といっても、最近のハイパワーなパソコン・ワークステーションでは微々たるものだが)
不具合があるようなら、recコマンドでバッファ値を調整されたい。
$ rec -t wav - | flac - -o hoge.flac
この場合、サンプリング周波数はシステムのデフォルト値となる。大抵のシステムでは48000Hzであろう。何もオプションを指定しなければデフォルト値での録音となるので、各自確認のこと。
次の例は、出力サンプリング周波数を44100Hzに変換、かつ総時間を指定して録音するもの。
下記では最初(ゼロ)から360秒間録音する。
$ rec -t wav - rate 44100 trim 0 360 | flac - -o hoge.flac
時間の指定は、"hh:mm:ss" (時間:分:秒)の形式でも指定できる。
下記では最初(ゼロ)から1時間20分30秒間録音する。
$ rec -t wav - rate 44100 trim 0 1:20:30 | flac - -o hoge.flac
これを利用すれば自動停止やオートリバースのできるカセットテーププレイヤー・デッキや、同じく自動停止するレコードプレイヤーから手間をかけずに時間キッチリな録音ができるが、テープやレコードでは再生速度が不正確な場合もあるので、遅い場合を考慮して時間を2〜5分程度余分に取ると良い。
(速度の修正はsoxで可能であるが、ここでは割愛する)
CDからFLACへオンザフライ変換 (cdpranoiaを使用)
CDからのリッピングデータを標準出力に書き出すコマンドと組み合わせれば、オンザフライでflacに変換することもできる。
ここでは、cdparanoiaを利用する。
例えば、1曲目をオンザフライでflacにしたい場合は
$cdparanoia 1 -w - | flac - -o hoge.flac
となる。
標準出力を介するので、別のコマンドを組み合わせれば自由自在なエフェクトが可能である。
例えば、cdparanoiaからの出力をsoxによるコンプレッサを介し、flacにする場合は
$cdparanoia 1 -w - | sox -t wav - -t wav - compand 0.3,1 6:-70,-60,-20 -5 -90 0.2 | flac - -o hoge.flac
となる。
(soxのcompandオプションの値は、soxのマニュアル例題から引用)
余談になるが
$cdparanoia 1- -w - | lame -b 128 -m j - - | play -t mp3 -
とすると、1トラック目から全部をオンザフライで(ディスクに書き出す事無く)mp3にして、即それを聞く事ができる。
FLACの再生
soxでFLACライブラリを使えるようコンパイルしてあれば、playコマンドで再生できる。
再生できるファイル形式はplayコマンドのヘルプを参照のこと。
$ play -t flac hoge.flac
soxでFLACライブラリを使えない場合は下記のようにする。
"-s"は画面表示無しのオプション。
$ flac -dsc hoge.flac | play -t wav -
データを扱う上では、上記は下記と同等である。
$ flac -d hoge.flac
$ cat hoge.wav | play -t wav -
FLAC化された音声データの品質は、元のWAV(PCM)データと同じである。
これは、冒頭でも述べたように、可逆圧縮の圧縮・展開の大原則である。
※元のwavファイルが、一部のWindows用アプリケーション等により細工されたイレギュラーなwavヘッダを用いている場合は、その部分で異る結果が出るかもしれないが、PCMデータそのものは可逆で復元される。
しばしWindows利用者に多い誤解(迷信)なのだが、FLAC化で音質が異って聞こえるという話がある。
Windowsのお手軽なアプリケーションの殆どはGUIであるので、GUIによってその処理と流れが渾然一体となって判らずに(隠蔽されて)誤解される向きが多い。
実際に起こっているとすれば、それは復元されたPCMデータをアナログ化する処理段階とそれ以降における問題であり、WAV(PCM)データを可逆復元するFLACが関与するレベルでの話ではない。
何処に原因があり何処を改善しなければならないのかは、上記のコマンドの流れを理解すれば、自ずと答えを導き出す事が出来るだろう。
ここまで、FLACのLinux/UNIX系コマンドシェルにおける利用方法を記した。
2013.1.29追補