2009-06-18

FLACからMP3変換シェルスクリプト

自分は普段CDを吸い出す際はEACでFLACエンコードして保存しているのですが
携帯ミュージックプレイヤーなどで持ち運ぶ際は容量の関係上MP3にせざるを得ません。
その時、いちいち自分のFLACとMP3のライブラリーを同期するのが面倒だったので
自宅サーバ(Atom330搭載CentOS機)でCRONで夜中にディレクトリ構造を維持したまま
自動変換して、ID3タグも埋め込んでくれるスクリプトを作成したので公開したいと思います。


<解説>
FLAC_BASE_DIRとMP3_BASE_DIRをそれぞれセットすると
FLAC_BASE_DIRのディレクトリ以下のflacファイルをMP3_BASE_DIR以下に変換して保存します。
MP3_BASE_DIR以下の同じ階層に同名のMP3ファイルが存在する場合は変換しません。
(その際、Linuxの仕様上、大文字小文字は区別されるので注意。
 例:ABCDEF.flacを変換する際、AbCdEF.mp3というファイルが既に存在していてもABCDEF.mp3ができあがる)

#!/bin/sh
FLAC_BASE_DIR=”/mnt/common_hdd/Lossless Mix”
MP3_BASE_DIR=”/mnt/common_hdd/MP3 Mix”
flac2mp3() {
FLAC_FILE=$1
MP3_FILE=$2
NKF=”nkf –ic=UTF-8 –oc=CP932”
TITLE=`metaflac “${FLAC_FILE}” –show-tag=TITLE | sed s/.*=//g | ${NKF}`
ARTIST=`metaflac “${FLAC_FILE}” –show-tag=ARTIST | sed s/.*=//g | ${NKF}`
ALBUM=`metaflac “${FLAC_FILE}” –show-tag=ALBUM | sed s/.*=//g | ${NKF}`
TRACKNUMBER=`metaflac “${FLAC_FILE}” –show-tag=TRACKNUMBER | sed s/.*=//g | ${NKF}`
DATE=`metaflac “${FLAC_FILE}” –show-tag=DATE | sed s/.*=//g | ${NKF}`
GENRE=`metaflac “${FLAC_FILE}” –show-tag=GENRE | sed s/.*=//g | ${NKF}`
flac -sdc “${FLAC_FILE}” |
lame -v -b 192
–replaygain-accurate
–silent
–tt “${TITLE}”
–ta “${ARTIST}”
–tl “${ALBUM}”
–tn “${TRACKNUMBER}”
–ty “${DATE}”
–tg “${GENRE}”
–add-id3v2 /dev/stdin “${MP3_FILE}”
}
find “$FLAC_BASE_DIR” -type f -name *.flac > /tmp/tmp-$$
cat /tmp/tmp-$$ | while read INPUT
do
OUTPUT=`echo “$INPUT” | sed “s#$FLAC_BASE_DIR##”`
OUTPUT=`echo “${MP3_BASE_DIR}${OUTPUT}” | sed -e “s/.[^.]*$//”`.mp3
if [ ! -f “$OUTPUT” ]; then
echo -n “– $OUTPUT is Encoding…”
mkdir -p “${OUTPUT%/*}”
flac2mp3 “$INPUT” “$OUTPUT”
echo “Done! –”
fi
done
rm /tmp/tmp-$$

管理者用