2013/01/02(水)CDexで作成したflacファイルの演奏時間(Duration)がおかしい
CDexで作成したflacファイルの演奏時間(Duration)がおかしい
CDex*1でExternal Encoderにflac.exeを指定したときに、うまくflacファイルが作れなかったので対策とかをメモ。
現象と原因
- 現象: 作成したflacファイルのDuration(演奏時間)が3:22:53.943 (536870902 samples)になってしまう。
- metaflac --list の出力
METADATA block #0 type: 0 (STREAMINFO) is last: false length: 34 minimum blocksize: 4096 samples maximum blocksize: 4096 samples minimum framesize: 0 bytes maximum framesize: 0 bytes sample_rate: 44100 Hz channels: 2 bits-per-sample: 16 total samples: 536870902 MD5 signature: 00000000000000000000000000000000
- metaflac --list の出力
- 発生条件: CDexのオプション>設定>エンコーダを以下のように設定していると発生
- エンコーダ: External Encoder
- WAVヘッダーを標準出力へ送る: チェック
- オンザフライエンコード: チェック
- エンコーダパス: flac.exe
- パラメータ配列
-T "Artist=%a" -T "Title=%t" -T "Album=%b" -T "Date=%y" -T "Tracknumber=%tn" -T "Genre=%g" -V -8 -o "%2" -
- 原因: CDexが送るWAVヘッダー内のサンプル数情報がおかしいため。
対策
対策は、「オンザフライエンコード」をやめるか、「WAVヘッダーを標準出力へ送る」をやめるか。今回は後者で対策。
- 対策: CDexのオプション>設定>エンコーダを以下のように設定
- エンコーダ: External Encoder
- WAVヘッダーを標準出力へ送る: チェックしない
- オンザフライエンコード: チェック
- エンコーダパス: flac.exe
- パラメータ配列(WAVEヘッダーに載っていたフォーマット情報を追加する)
--force-raw-format --endian=little --channels=2 --sign=signed --sample-rate=44100 --bps=16 -T "Artist=%a" -T "Title=%t" -T "Album=%b" -T "Date=%y" -T "Tracknumber=%tn" -T "Genre=%g" -V -8 -o "%2" -
- 対策後のmetaflac --list の出力
METADATA block #0 type: 0 (STREAMINFO) is last: false length: 34 minimum blocksize: 4096 samples maximum blocksize: 4096 samples minimum framesize: 14 bytes maximum framesize: 14586 bytes sample_rate: 44100 Hz channels: 2 bits-per-sample: 16 total samples: 9064448 MD5 signature: b39e15237a351fd155da06ee8d7a4e3c
すでに作成してしまったflacファイルの修正
STREAMINFOだけ書き換えられると再エンコード不要で早そうなのですが、方法が見つからなかったので再エンコードすることにしました。再エンコードするとタグ情報が消えるので、metaflacを使って元ファイルからコピーします。
- flac2flac.bat
flac -d -F -c %1 | flac -V -8 -o %2 - metaflac --export-tags-to - %1 | metaflac --import-tags-from - %2
- 使い方
flac2flac.bat 元ファイル.flac 再エンコード後.flac
- 使い方