Понадобилось мне однажды перекодировать некоторое количество музыкальных композиций из формата 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.dev/tips/info/1881.shtml
или так#!/bin/bash
# Copyright (C) 2007-2008 Vladimir V. Kamarzin <vvk@altlinux.org>
#
# Split one big audiofile (cdimage) to separate tracks
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.#. shell-error
renice 19 -p $$ > /dev/null 2>&1 ||:
while read cuefile
do
# get cuesheet filename
cue="${cuefile##*/}"# object (filename without extension)
obj=${cue%.cue}# relative path to object's directory
objdir="${cuefile%/*}"pushd "$objdir"
# First, find all files that need decoding before process and decode it
if [ -f "$obj".mp3 ]; then
lame --decode "$obj".mp3 "$obj".wav || fatal "cannot decode $obj.mp3, exiting"elif [ -f "$obj".ogg ]; then
oggdec "$obj".ogg || fatal "cannot decode $obj.ogg, exiting"
fi# Next, split one-big-file. Use flac for loseless and ogg for lossy
if [ -f "$obj".ape ]; then
cuebreakpoints "$cue" | shnsplit -o 'flac flac --best -o %f -' -t %n "$obj".ape \
|| fatal "failed to split $obj.ape"elif [ -f "$obj".flac ]; then
cuebreakpoints "$cue" | shnsplit -o 'flac flac --best -o %f -' -t %n "$obj".flac \
|| fatal "failed to split $obj.flac"elif [ -f "$obj".wav ]; then
cuebreakpoints "$cue" | shnsplit -o 'cust ext=ogg oggenc -q 7 -o %f -' -t %n "$obj".wav \
|| fatal "failed to split $obj.wav"else
fatal "$obj file not found, exiting"
fi# Recode tags. Assume that russian tags has windows-1251 encoding
case "$LANG" in
ru_RU.KOI8-R) recode_to=koi8-r
;;
ru_RU.CP1251) recode_not_needed=1
;;
*) recode_to=utf8
esac[ "$recode_not_needed" = 1 ] && ln -s "$cue" tmp.cue || recode -f 1251.."$recode_to" < "$cue" > tmp.cue \
|| fatal "cannot recode cue: $cue"# Embed tags into tracks, rename tracks
for (( i=1 ; i <= $(cueprint -d '%N' tmp.cue) ; ++i ))
do
NN=$(printf '%02d' $i)[ -s "$NN.flac" ] && {
# Prepare track tags, filter out empty tags, embed the rest
cueprint -n $i -t \
'ARRANGER=%A\nCOMPOSER=%C\nGENRE=%G\nMESSAGE=%M\nTRACKNUMBER=%n\nARTIST=%p\nTITLE=%t\nALBUM=%T\n' \
tmp.cue | egrep -v '=$' | metaflac --import-tags-from=- $NN.flac
# rename NN.flac to "NN - TrackTitle.flac"
mv $NN.flac "$NN - $(cueprint -n $i -t %t tmp.cue | sed -e "s,/,,g").flac"
}[ -s "$NN.ogg" ] && {
cueprint -n $i -t \
'ARRANGER=%A\nCOMPOSER=%C\nGENRE=%G\nCOMMENT=%M\nTRACKNUMBER=%n\nARTIST=%p\nTITLE=%t\nALBUM=%T\n' \
tmp.cue | egrep -v '=$' > tags.tmp
vorbiscomment -a -c tags.tmp "$NN.ogg"
mv $NN.ogg "$NN - $(cueprint -n $i -t %t tmp.cue | sed -e "s,/,,g").ogg"
}done
rm -f tmp.cue "$cue" "$obj".{flac,ape,mp3,ogg,wav} tags.tmp
popddone < <(find . -type f -iname "*.cue")
я давно использую soundconverter, хотя не уверен что он поддерживает ape
каждый для себя сам напишет скрипт если надо, универсальным скрипт все равно не сделать, лучше юзать самаю обычную софтину конвертер, там хоть драг-н-дроп, и не недо пути прописывать.
+1
для себя сделал скрипт который из (ape|flac|mv + cue) режет на треки в flac|ogg|mp3 с заполнением тегов
поделись плиз
Дайте скрипт по перекодированию названий из KOI-R и windows-1251 в UTF-8! Желательно чтобы сам определял.
>Дайте скрипт по перекодированию названий из KOI-R и windows-1251 в UTF-8! Желательно
>чтобы сам определял.python-mutagen поможет.
>>Дайте скрипт по перекодированию названий из KOI-R и windows-1251 в UTF-8! Желательно
>>чтобы сам определял.
>
>python-mutagen поможет.Не поможет. Перепробовал все, что есть. Закончилось все равно дополнительной правкой руками...
>Дайте скрипт по перекодированию названий из KOI-R и windows-1251 в UTF-8! Желательно
>чтобы сам определял.convmv
Но сам не определяет. А надо ли?
Нашёл скрипт "shntool split -f "Flac.cue" -o flac "music.flac" -t %p_%a_%n_%t". Он, типа, сохраняет файл с нужным названием.
Ну, называет shntool его правильно. А тэги что-то ему не даёт!
Вроде бы такая простая задача... А вместо реализации - какой-то дебилизм 2004 года программирования!
oggenc -q 7 "~/file.flac" "~/file.ogg"
Конвентирует ВСЁ, и тэги сохраняет тоже, и НИКАКОГО WAV НЕ НАДО!!! Ну неужели и здесь трудно так сделать???
Кривой скрипт.
Проверить перед тем как запостить нет привычки?