wav ファイル + cue シート(以下、wav+cue とする)で構成されたオーディオファイルから任意のオーディオフォーマットに変換する。cue シートで定義する wav は単一または複数とする。変換時にタグ情報を付加し、画像ファイルがあればコピーする。
Windows 環境で CD-DA からリッピングして再生するなら wav+cue 形式は使い勝手が良く、かれこれ 2000年 ぐらいから全てこの形式で管理している。であるが、Windows 以外で扱おうとすると(例えば、ラズパイでメディアサーバーを立ち上げる、とか)、とたんに具合が悪いことになってしまう。cue シートに対応してないので、ただのタグ情報のないオーディオファイルになってしまうのだ。
そこでオリジナルは wav+cue 形式で保存しつつ、必要に応じてフォーマットを変換することにした。
yarn install
cue シートの内容をトラック順に表示する。
node analyze.js cuesheet
cue シートを指定したフォーマットで出力する。
node convert.js cuesheet output [extent] [ffmpeg-options]
出力は下記の階層構造・名称とする。 パスが長くなりすぎるのを避けるため、トラックのファイル名称は必要最低限とした。
{output}
├ {genre}
├ {album_artist}
├ {album}
├ {disc}-{track}.flac
例)flac で出力する。
node convert.js "oasis - (WHAT'S THE STORY) MORNING GLORY?.cue" 音楽フォルダー flac
例)mp3 で出力する。
node convert.js "oasis - (WHAT'S THE STORY) MORNING GLORY?.cue" 音楽フォルダー mp3 "-c:a libmp3lame -b:a 256k"
例)aac で出力する。
node convert.js "oasis - (WHAT'S THE STORY) MORNING GLORY?.cue" 音楽フォルダー mp4 "-c:a aac -b:a 256k"
例)HE-AAC で出力する。
node convert.js "oasis - (WHAT'S THE STORY) MORNING GLORY?.cue" 音楽フォルダー mp4 "-c:a libfdk_aac -profile:a aac_he_v2 -signaling implicit -vbr 3"
例)指定フォルダーの cue シートから変換する。 ※ シングルクォート、ブラケットなどをパスに含まないこと。
find WAV音楽フォルダー -iname \*.cue -type f | xargs -I {} node convert.js {} 音楽フォルダー flac
cue コマンド | ExactAudioCopy v1.5 | fre:ac v1.1.6(macOS) |
---|---|---|
REM GENRE | ✓ | ✓ |
REM DATE | ✓ | ✓ |
REM DISCID | ✓ | - |
REM DISCNUMBER ※ | - | - |
REM TOTALDISCS ※ | - | - |
REM COMMENT | ✓ | ✓ |
REM COMPOSER | ✓ | - |
REM CONDUCTOR ※ | - | - |
SONGWRITER ※ | - | - |
PERFORMER | ✓ | ✓ |
TITLE | ✓ | ✓ |
REM COMPOSER | ✓ | - |
TRACK / TITLE | ✓ | ✓ |
TRACK / PERFORMER | ✓ | ✓ |
TRACK / REM COMPOSER | ✓ | - |
TRACK / REM CONDUCTOR ※ | - | - |
TRACK / SONGWRITER ※ | - | - |
TRACK / ISRC | - | ✓ |
TRACK / REM COMMENT | - | ✓ |
※ cue シートファイルを編集して追加する。
cue コマンド | 内部プロパティ | デフォルト |
---|---|---|
REM GENRE | genre | |
REM DATE | date | |
REM DISCID | discid | |
REM DISCNUMBER | discnumber | '1' |
REM TOTALDISCS | totaldiscs | '1' |
REM COMMENT | comment | |
REM CONDUCTOR | conductor | |
SONGWRITER | songwriter | 'unknown' |
PERFORMER | album_artist,track_artist | 'unknown' |
TITLE | album_title | 'unknown' |
REM COMPOSER | composer | |
TRACK / TITLE | track_title | 'unknown' |
TRACK / PERFORMER | track_artist ※ | 'unknown' |
TRACK / REM COMPOSER | composer ※ | |
TRACK / REM CONDUCTOR | conductor ※ | |
TRACK / SONGWRITER | songwriter ※ | 'unknown' |
TRACK / ISRC | isrc | 'unknown' |
TRACK / REM COMMENT | comment ※ |
※ トラックの方が優先、上書きする
内部プロパティ | ffmpeg metadata |
---|---|
album_title | album |
album_artist | album_artist |
track_artist | artist |
comment | comment |
date | date |
discid | discid |
discnumber | disc |
genre | genre |
songwriter | songwriter |
track_title | title |
totaldiscs | disctotal |
composer | composer |
tracktotal ※ | tracktotal |
track_number | track |
※ プログラム内で生成する
- Cue sheet Hydrogenaudio Knowledgebase
- Ogg Vorbis I format specification: comment field and header specification Ogg Vorbis Documentation