FLACによる可逆音声圧縮

mp3やOgg Vorbisなどの音声圧縮の場合、一度エンコードで劣化した信号はデコードしても復活することはないが、その代わりに驚異的な圧縮率を実現している。このような圧縮は、元の情報に戻すことができないことから「非可逆圧縮」あるいは「不可逆圧縮」と呼ばれる。画像情報のJPEG圧縮、動画のMPEG圧縮などもこれに該当する。

これに対し、デコード時に元の情報を完全に復元することができる圧縮を「可逆圧縮」と呼ぶ。ZIP、LHAなどのファイル圧縮や、画像のPNG圧縮などがこれに当たる。

可逆音声圧縮は非可逆音声圧縮に比べて圧縮率で大きく劣るが、元の情報と変わりないクオリティーでの再生が可能であるため最高音質での音楽鑑賞やデータ保存用などの目的で使われるケースが多い。近年では、ハードディスク、フラッシュメモリや、その他の記憶媒体の容量が増大しているため、可逆圧縮形式での保存も、一般的になりつつある。

可逆音声圧縮の形式は様々だが、ここではFLAC(Free Lossless Audio Codec)という可逆音声圧縮コーデックを用い、CDexなどでのエンコード方法、及びオプション設定を紹介する。

1. 音楽CD から FLACファイルへの変換(CDex)

1.1. 必要なソフトウェア

*ファイル名はバージョンなどによって異なる。

FLAC
(flac-1.2.1-win.zip)
FLACの変換プログラムを配布している.
CDex
(cdex_151.zip)
音楽CDからの音声エンコードまでの作業を一括して行うソフトウェア.
英語ソフトウェアだが,次項のLanguageFileを適用することで日本語化できる.
CDexの日本語LanguageFile
(japanese151.zip)
CDexの公式日本語LanguageFileを配布している.
また,CDexの使い方を丁寧に説明している.

1.2. インストール

  • CDex,CDexの日本語LanguageFile,FLACをダウンロードする.
  • CDexを適切なフォルダに解凍する.(例 c:\Application\cdex\)
  • CDex用の日本語LanguageFileを解凍し,japanese.cdex.langを,CDexの「lang」フォルダにコピーする.
  • FLACを適切なフォルダに解凍する.(例 c:\Application\flac\)

1.3. 設定

  • CDexを起動し,メニューより[Option][Select Language][japanese]を選択する.
  • メニューから[オプション][設定]を選択し,[一般]タブを開き,ID3タグバージョンを「None」とする.
  • [オプション][設定]の[エンコーダ]タブを開く.

    ![](http://yamaken.tokyo/wp-content/uploads/2019/03/flac_cdex-300x195.png)

  • 上図にように,エンコーダを「External Encoder」とし,エンコーダパスにflac.exeのパスを指定する.
  • flacの変換パラメータを入力する.
    例「-T "Artist=%a" -T "Title=%t" -T "Album=%b" -T "Date=%y" -T "Tracknumber=%tn" -T "Genre=%g"-V --fast -o "%2" -」オプションの詳細
  • 「拡張子」をflacとする.
  • 「WAVヘッダーを標準入力へ送る」にチェックを入れる.
  • 「オンザフライエンコード」にチェックを入れる.

--replay-gain スイッチを使用する場合は,上記設定例の場合エラーで変換処理ができないため,
「オンザフライエンコード」のチェックを外し,
オプション指定例の最後の「-」を「"%1"」に変更する.

例:-T "Artist=%a" -T "Title=%t" -T "Album=%b" -T "Date=%y" -T "Tracknumber=%tn" -T "Genre=%g" -V --fast --replay-gain -o "%2" "%1"


また,音楽CDのアルバム名,曲名,アーティスト名の情報を日本語で取得するための
データベースサーバが公開されているので,これを利用するために以下の設定をしておく.

  • [オプション][設定]の[リモートCDDB]タブを開く.

    ![](http://yamaken.tokyo/wp-content/uploads/2019/03/cdex_cddb-300x187.png)

  • 「サーバーを追加」ボタンを押し,サーバーアドレスとして「freedbtest.dyndns.org」を入力,
    E-mailアドレスの欄に適当なアドレスを入力する.

CDexの起動の際に

「Failed to load the wnaspi32.dll driver!

Use the "Native NT SCSI library" driver option instead?」

のメッセージ(下図)が出る場合は「はい」を選べばよい.



1.4. エンコード手順

  • CDexを起動する.
  • 音楽CDをCD-ROMドライブに挿入する.自動的にトラックが読み込まれる.
  • メニューから[CDDB][リモートCDDBから読み込み]を実行する.
    CDDBデータベースに存在するCDであれば,自動的に曲名などのデータが表示される.
  • メニューから[変換][CDをMPEGに]を実行すると,変換処理が始まる.

2. FlacDropによるwav→FLAC/ FLAC→wav変換

2.1. 変換に必要なソフトウェア

*ファイル名はバージョンなどによって異なる.

FLAC
(flac-1.2.1-win.zip)
FLACの変換プログラムを配布している.
FlacDrop
(flacdrop.zip)
FLACをGUIで利用するためのフロントエンド.


2.2. インストール

  • FLAC,FlacDropをダウンロードする.
  • FLACを適切なフォルダに解凍する.(例 c:\Application\flac\)
  • FlacDropを適切なフォルダに解凍する.(例 c:\Application\flacdrop\)

2.3. 設定

  • FlacDrop.exeを起動する.(白いWindowが出る)
  • Window内で右クリック[Options][FLAC...]を開き,flac.exeの場所を指定する.

(wav→FLAC変換の場合)

  • Window内で右クリック[Setting]より,変換パラメータを選択する.
    0:高速低圧縮,8:低速高圧縮

(FLAC→wav変換の場合)

  • Window内で右クリック[Setting][Custom...]を開き,Switches:の入力欄に「--decode」と入力してOKする.

2.4. 変換手順

  • 白いWindowに入力ファイル(wav or FLAC)をドロップすると,変換処理が始まる.

FLACのオプション設定

-v, --version FLACのバージョン情報を表示する.
-h, --help FLACの基本的な使用法とオプションリストを表示する.
-H, --explain FLACの詳細なヘルプを表示する.
-d, --decode デコード処理の場合に指定する(デフォルトはエンコード).
MD5チェックサムがデコードファイルと一致しないなど,何らかのエラーがある場合
終了コードが「1」となり,それ以外の場合は「0」となる.
-t, --test テストモードの指定.
-dのデコード処理と同じように終了コードを出力する.
ただしデコードファイルの出力はされない.
-a, --analyze 解析モードの指定.
-dのデコード処理と同じように終了コードを出力する.
ただしデコードファイルの出力はされない.
このオプションは主に開発者向けであり,各々のフレーム,サブフレームに関する
解析データ(テキストファイル)を出力する.

-c, --stdout 出力を標準出力へ書き出す.
-s, --silent エンコード/デコード時に進捗状況などを表示しない.
--totally-silent エラー,警告を含めて何も表示しない.終了コードのみ出力する.
--no-utf8-convert 文字セットをUTF-8に変換しない.このオプションは,他のどのオプションよりも前に指定しなければならない.
-w, --warnings-as-errors 全ての警告をエラーとして扱う.
-f, --force 出力ファイルを強制的に上書きする.
デフォルトでは同名ファイルがある場合に警告を出す.
-o filename, --output-name=filename 出力ファイル名を指定する.
--output-prefix=string
--delete-input-file エンコード/デコード処理が成功した場合に
入力ファイルを削除する.
ただし,ベリファイエラーを含めて何らかのエラーが出た場合は削除されない.
--keep-foreign-metadata
--skip={#|mm:ss.ss}
--until={#|[+|-]mm:ss.ss}
--ogg Ogg FLAC形式で出力する.
--serial-number=#
--residual-text
--residual-gnuplot
--cue=[#.#][-[#.#]]
-F, --decode-through-errors
-V, --verify オリジナルとのベリファイ(比較)処理を行なう.
--lax
--replay-gain リプレイゲイン値を計算しFLACタグに書き込む.ただし
標準入力を介したコマンド指定の場合には使用できない.
--cuesheet=FILENAME
--picture={FILENAME|SPECIFICATION}
--sector-align
-S {#|X|#x|#s}, --seekpoint={#|X|#x|#s}
-P #, --padding=#
-T FIELD=VALUE, --tag=FIELD=VALUE 曲名,アーティスト名などの情報をtagに入力する.
--tag-from-file=FIELD=FILENAME
-b #, --blocksize=#
-m, --mid-side
-M, --adaptive-mid-side
-0 .. -8, --compression-level-0 .. --compression-level-8 圧縮レベルを指定する.-0は最高速度/最低圧縮率,-8は最低速度/最高圧縮率.
-0, --compression-level-0 「-l 0 -b 1152 -r 3」と同じ.
-1, --compression-level-1 「-l 0 -b 1152 -M -r 3」と同じ.
-2, --compression-level-2 「-l 0 -b 1152 -m -r 3」と同じ.
-3, --compression-level-3 「-l 6 -b 4096 -r 4」と同じ.
-4, --compression-level-4 「-l 8 -b 4096 -M -r 4」と同じ.
-5, --compression-level-5 「-l 8 -b 4096 -m -r 5」と同じ.
-6, --compression-level-6 「-l 8 -b 4096 -m -r 6」と同じ.
-7, --compression-level-7 「-l 8 -b 4096 -m -e -r 6」と同じ.
-8, --compression-level-8 「-l 12 -b 4096 -m -e -r 6」と同じ.
--fast 最高速度で出力する.「-0」と同じ.
--best 最高の圧縮率で出力する.「-8」と同じ.
-e, --exhaustive-model-search
-A "function", --apodization="function"
-l #, --max-lpc-order=#
-q #, --qlp-coeff-precision=#
-p, --qlp-coeff-precision-search
-r [#,]#, --rice-partition-order=[#,]#
--endian={big|little}
--channels=#
--bps=#
--sample-rate=#
--sign={signed|unsigned}
--input-size=#
--force-aiff-format
--force-raw-format