WAVEファイルとして保管していた音楽データをmp3とflacに変換するスクリプトを作った。
メタデータを予め冒頭部で準備しておき、while文で一気にmp3とflacを作成する。
キモは下記青字部の、「ifile01」〜「ifilexx」の変数名を作って、さらにその値を参照するところ。
`eval echo '$'"ifile"$track` → $ifile01
などとなり string_ifile変数に代入される。 evalする時に$が先に解釈されないようシングルコーテーションでくくっておくことが必要。
Windowsだったら変数を配列にするしかないと思うが、シェルスクリプトではこんなことも出来る。最初から配列にしておけば苦労しなかったが、シェルスクリプトの勉強になった。
スクリプトのファイル名「ffmpeg_wav.sh」
#!/bin/bash
music_path="/media/mobile/FAT32/Sound/○○"
m_ar="アーチスト名"; m_al="アルバム名"; m_da="2000"; m_ge="JPop"
tracks="14"
ifile01="01 曲1.wav"; m_ti01="曲1";
ifile02="02 曲2.wav"; m_ti02="曲2";
(中略)
ifile14="14 曲14.wav"; m_ti14="曲14";
i=1
while [ $i -le $tracks ]
do
track=`printf "%02d" $i`
#インプットファイル名、タイトル名取り出し
string_ifile=`eval echo '$'"ifile"$track`
string_title=`eval echo '$'"m_ti"$track`
#mp3変換
ffmpeg -i "$music_path/$string_ifile" -acodec libmp3lame -ab 192k -ar 44100 -metadata "artist"="$m_ar" -metadata "album"="$m_al" -metadata "genre"="$m_ge" -metadata "date"="$m_da" -metadata "track"="$i" -metadata "title"="$string_title" "$music_path/$track"_"#$string_title.mp3"
#flac変換
ffmpeg -i "$music_path/$string_ifile" -acodec flac -metadata "artist"="$m_ar" -metadata "album"="$m_al" -metadata "genre"="$m_ge" -metadata "date"="$m_da" -metadata "track"="$i" -metadata "title"="$string_title" "$music_path/$track"_"$string_title.flac"
i=`expr $i + 1`
done
音楽CDからのリッピングにはAsunderを使用。使い勝手はまずまずだが、CDDBからのデータ取得が1回しかできなかった。