Довольно много lossless контента в сети встречается в формате Monkey's Audio. По моему мнению, этот формат, как пятое колесо... Я предпочитаю FLACи из прошлогоднего скрипта
alac2flac набросала конвертер с сохранением тэгов
ape2flac на базе функционала
ffmpeg.
Собственно, нам понадобятся пакеты
ffmpeg flac и экстрактор ape тэгов apeinfo. Если у вас Ubuntu, то просто устанавливаем пакеты, скачиваем утилу
apeinfo и ставим её в
/usr/local/bin/ (я исхожу от x64 системы, хотя 32 битная версия тоже будет в ней работать. параноики могут скомпилировать из исходников apeinfo и mac свою версию). В общем, задача на три трубки команды:
$ sudo apt-get install ffmpeg flac
$ sudo wget http://legroom.net/files/software/apeinfo_64 -O /usr/local/bin/apeinfo
$ sudo chmod a+x /usr/local/bin/apeinfo
Собственно, вот скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
#!/bin/bash # ape2flac 0.2 # convert APE files to FLAC with keeping tags # # you need apeinfo to extract ape tags, just google for it!
# немножко цветов, я люблю цветы RED='\e<1;31m' BLUE='\e<1;34m' NC='\e<0m' # no color
f_flag=0 # флаг параметра переименования, 0 = флаг не поставлен d_flag=0 # флаг параметра удаления входящего файла, 0 = флаг не поставлен
# функция, которая оповещает о использовании и выходит с EX_USAGE usage(){ echo "ape2flac version 0.2" echo echo "usage: ape2flac <option> INPUTFILE" echo echo "options:" echo -e " -f rename output file to '"$BLUE"TRACKNUMBER - ARTIST - TITLE.flac$NC'" echo " -d delete input file" exit 64 # EX_USAGE }
# функция, которая обрабатывает переменные связанные с файлами setFileVars(){ INPUTFILE=${1} OUTPUTFILE=$(echo $INPUTFILE | sed "s/.ape$/.flac/i") FILEPATH=${INPUTFILE%/*}
# а если аргументе INPUTFILE нет родительских директорий? if < "$FILEPATH" = "$INPUTFILE" > then FILEPATH="."; fi }
# начнём пилить всё, что пришло с командной строки. if (($# > 0)) # если существуют аргументы, then while < $# -gt 1 > # пока не останется лишь один, машина будет трудится. do case $1 in -f) f_flag=1;; # если "первый" аргумент параметр -f, поставим флаг -d) d_flag=1;; # если "первый" аргумент параметр -d, поставим флаг esac shift # сдвинем аргументы $2->$1, $3->$2, $4->$3,... done if < -f "$1" > # если "последний" аргумент файл, then setFileVars "$1" # обрабатываем. else # нет? намекаем, как этим пользоваться. echo -e "Bad news, Harry! There is$RED no file in arguments!$NC" echo usage fi else usage # матёрый пользователь напросился на помощь fi
echo $INPUTFILE
# собсвенно, перекодировка произходит в этой строке ffmpeg -y -i "$INPUTFILE" "$OUTPUTFILE" 2> /dev/null
ffmpeg_EXITCODE=$?
if (($ffmpeg_EXITCODE)) then # если мы облажались, это отличное место для лога #echo $INPUTFILE >> failtoconvert.log echo -e "Bad news, Harry! Snape spelled Levicorpus, your$RED ffmpeg goes wrong! ${NC}" exit $ffmpeg_EXITCODE fi
# убираем возможные излишки наших прежних стараний rm -f "${INPUTFILE}".tag
# прочитаем все тэги в форме vorbis и сохраним их в пустой файл apeinfo -t "$INPUTFILE" > "${INPUTFILE}".tag
# импортируем vorbis тэги из файла metaflac --import-tags-from="${INPUTFILE}".tag "$OUTPUTFILE"
# код для параметра -d, чтоб удалить файл на входе if (($d_flag)) then rm -f "$INPUTFILE" fi
# код для параметра -f, чтоб переименовать файл на выходе. if (($f_flag)) then
TRACKNUMBER=$(sed -n "s/^TRACKNUMBER=//p" "${INPUTFILE}".tag) ARTIST=$(sed -n "s/^ARTIST=//p" "${INPUTFILE}".tag) TITLE=$(sed -n "s/^TITLE=//p" "${INPUTFILE}".tag) mv "$OUTPUTFILE" "$FILEPATH/$TRACKNUMBER - $ARTIST - $TITLE.flac" OUTPUTFILE="$TRACKNUMBER - $ARTIST - $TITLE.flac" fi
# подчистим за собой rm -f "${INPUTFILE}".tag
echo -e "$FILEPATH/$OUTPUTFILE ${BLUE}..done! ${NC}"
exit 0 </option>
|
Приятного конвертирования!
потом юзал cue2tracks для того что бы он разбил треки
из описания к вашему скрипту не совсем понятно может ли он сделать это же...
к сожалению cp1251 в cue файлах не кушает cue2tracks и остальную коллекцию я ещё не перегнал)