音楽ファイル用のコードを書く
前に検討したとおり、FLACによる圧縮をする。
しかしFLACを試したときにcmpコマンドで元のファイルとFLACでエンコード→デコードしたファイルを比較すると一致しないときがあったから、こういうときはアラートを出すようにした。
ファイル名: music2fla.sh
#!/bin/sh
echo "Usage : sh $0 (option)[(0|1):force]"
DIR0="/Music" # 変換元のファイルがあるディレクトリ
DIR1="/FLAC" # 圧縮したファイルを入れるディレクトリ
TMP="/tmp"
FORCE=0
if [ $1 = 1 ]; then
FORCE=1
fi
if [ ! -d "$DIR1" ]; then
mkdir -p "$DIR1"
fi
main() {
IFS_BACKUP=$IFS
IFS=$'\n'
cd "$DIR0"
FILES=`find \( -name *.WAV -o -name *.Wav -o -name *.wav \)`
cd "$DIR1"
for FILE in ${FILES}; do
if [ -f "$DIR0/$FILE" ]; then
FLAC="$DIR1/${FILE%.*}.fla"
if [ $FORCE -eq 1 -o ! -e "$FLAC" ]; then
DIR=`dirname "$FLAC"`
if [ ! -d "$DIR" ]; then
mkdir -p "$DIR"
fi
echo "Encoding '$DIR0/$FILE' to '$FLAC'"
`flac -s -8 "$DIR0/$FILE" -o "$FLAC"`
MD5=`md5sum -b "$FLAC" | cut -d " " -f 1`
WAV="$TMP/$MD5"
`flac -s -d "$FLAC" -o "$WAV"`
ERR=`cmp "$DIR0/$FILE" "$WAV"`
if [ $ERR ]; then
echo " [Alert!] Decoded file of '$FLAC' differs from '$DIR0/$FILE'"
fi
rm -f "$WAV"
fi
fi
done
IFS=$IFS_BACKUP
return 0
}
main $@ || exit $?
使い方は
sh ./music2fla.sh
2013/03/12 22:32