Понадобилось мне однажды перекодировать некоторое количество музыкальных композиций из формата FLAC/APE/WAV в MP3.encode_list.txt - содержит полные пути до директорий с исходными файлами (путь не должен оканчиватся на "\")
В системе должны быть установлены утилиты flac, mac, lame.
Приветствуется улучшенная версия скрипта. Хотя лично мне он понадобился всего один раз...
но после небольших изменений он может стать еще полезнее, в некоторых случаях.
#!/bin/bash
# шаманское заклинание
IFS="
";
# конец шаманского заклинания
# чего и куда класть
ENCODE_PATH=`pwd`;
ENCODE_LIST="encode_list.txt"
for i in `cat $ENCODE_LIST`; do
FLAC_count=`find "$i" -name "*.flac" | wc -l`
APE_count=`find "$i" -name "*.ape" | wc -l`
WAV_count=`find "$i" -name "*.wav" | wc -l`
echo "dir = '$i'";
if [ $WAV_count -lt $FLAC_count ] && [ $APE_count -lt $FLAC_count ]
then
echo "FLAC detected";
for j in "$i"/*.flac; do
out_name=`basename ${j/.flac/.mp3}`;
out_dir=`basename $i`
out_full="$ENCODE_PATH/$out_dir/$out_name";
mkdir "$ENCODE_PATH/$out_dir";
echo `date +"%T %y/%m/%d"` encoding "'"$out_name"'" >> $ENCODE_PATH/$out_dir/encode.log;
flac -d "$j" -o - | lame -ms -v -V0 -h - "$out_full"; #>> $ENCODE_PATH/$out_dir/encode.log 2>> $ENCODE_PATH/$out_dir/encode.log;
done;
elif [ $FLAC_count -lt $APE_count ] && [ $WAV_count -lt $APE_count ]
then
echo "APE detected";
for j in "$i"/*.ape; do
out_name=`basename ${j/.ape/.mp3}`;
out_dir=`basename $i`
out_full="$ENCODE_PATH/$out_dir/$out_name";
mkdir "$ENCODE_PATH/$out_dir";
echo `date +"%T %y/%m/%d"` encoding "'"$out_name"'" >> $ENCODE_PATH/$out_dir/encode.log;
mac "$j" - -d | lame -ms -v -V0 -h - "$out_full"; #>> $ENCODE_PATH/$out_dir/encode.log 2>> $ENCODE_PATH/$out_dir/encode.log;
done;
else [ $FLAC_count -le $WAV_count ] && [ $APE_count -le $WAV_count ]
echo "WAV detected";
for j in "$i"/*.wav; do
out_name=`basename ${j/.wav/.mp3}`;
out_dir=`basename $i`
out_full="$ENCODE_PATH/$out_dir/$out_name";
mkdir "$ENCODE_PATH/$out_dir";
echo `date +"%T %y/%m/%d"` encoding "'"$out_name"'" >> $ENCODE_PATH/$out_dir/encode.log;
lame -ms -v -V0 -h "$j" "$out_full"; #>> $ENCODE_PATH/$out_dir/encode.log 2>> $ENCODE_PATH/$out_dir/encode.log;
done;
fi;
done
URL:
Обсуждается: http://www.opennet.ru/tips/info/1881.shtml