Перекодирование одиночного lossless аудиофайла во FLAC по CUE-таблице: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Rain (обсуждение | вклад) м (переименовал «Перекодирование одиночного аудиофайла (APE, WAV, FLAC) во FLAC по CUE-таблице» в «[[Перекодирование одиночного lossless аудиофайла во FLAC) |
Rain (обсуждение | вклад) |
||
Строка 15: | Строка 15: | ||
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
# By Rain | # By Linuxoid Project. Authors: Rain, AntiChrist. | ||
direct='1' | direct='1' | ||
outdir="$HOME/Music" | |||
help() { | |||
echo -e "\e[1;34mИспользование: | |||
\t\e[1;32m$(basename $0) \e[1;33m\"Звуковой_файл (ape, flac и т.д.)\" \e[1;33m\"Таблица_Дорожек.cue\"\e[0m\n"; | |||
echo -e "\e[1;31mЗависимости\e[0m, необходимые для работы:\e[1;32m | |||
\tflac | |||
\tshntool | |||
\tcuetools | |||
\tenca\e[0m | |||
" | |||
echo -e "\e[1;33mДополнительно \e[0;33m(в зависимости от типов конвертируемых файлов)\e[0m: | |||
\t\e[1;32mmonkeys-audio \e[0;34m(Семейство Debian/*untu)\e[0m или \e[1;32mmac \e[0;34m(Остальные дистрибутивы)\e[0m | |||
\t\e[1;32mwavpack\e[0m | |||
\t\e[1;32malac_decoder\e[0m \e[34m(При отсутствии пакета в дистрибутиве качать отсюда: \e[36mhttp://craz.net/programs/itunes/alac.html\e[34m)\e[0m\n"; | |||
echo -e "\e[1;32mРезультат конвертации ищите в директории \e[36m$outdir\e[1;32m. | |||
\t\e[0;32mЕсли хотите изменить путь сохранения - запускайте скрипт, как | |||
\t\e[1;36mHOME='/путь/к/новому/месту' \e[1;32m$(basename $0) \e[1;33m[параметры]\e[0m. | |||
\t\e[32mИли же измените переменную \e[1;36moutdir \e[0;32mвнутри скрипта.\e[0m\n" | |||
} | |||
error() { | error() { | ||
echo -e "\e[31m${1}\e[0m" | echo -e "\e[1;31m${1}\e[0m" | ||
exit $2 | exit $2 | ||
} | } | ||
test $(which flac) || | ch_utils() { | ||
uts=''; | |||
uts=$uts"$@"; | |||
test $(which flac 2>/dev/null) || uts=$uts' flac' | |||
test $(which shnsplit 2>/dev/null) || uts=$uts' shntools' | |||
test $(which enconv 2>/dev/null) || uts=$uts' enca' | |||
test $(which cueprint 2>/dev/null) || uts=$uts' cuetools' | |||
if [[ $uts != '' ]] | |||
then | |||
echo -e "\e[1;31mУстановите, пожалуйста, следующие пакеты:" | |||
for i in ${uts} | |||
do | |||
echo -e "\e[1;32m$i" | |||
done | |||
echo -e "\e[1;31mОни необходимы для работы скрипта.\e[0m" | |||
exit 1 | |||
fi | |||
} | |||
if [[ "$(file -b "${1}")" =~ "Monkey's Audio" ]]; then | tag() { | ||
cf="$1" | |||
shift | |||
TN=1 | |||
n=$(cueprint -d '%N' "$cf") | |||
if [ $# -ne $n ]; then | |||
error "\e[1;31mВнимание\e[0m: Количество получившихся файлов не соответствует количеству треков в исходном файле." 1 | |||
fi | |||
fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC ARRANGER' | |||
TITLE='%t' | |||
VERSION='' | |||
ALBUM='%T' | |||
TRACKNUMBER='%n' | |||
TRACKTOTAL='%N' | |||
ARTIST='%c %p' | |||
PERFORMER='%p' | |||
COPYRIGHT='Free Media Distribution' | |||
LICENSE='CC' | |||
ORGANIZATION='' | |||
DESCRIPTION='%m' | |||
GENRE='%g' | |||
DATE='' | |||
LOCATION='' | |||
CONTACT='' | |||
ISRC='%i %u' | |||
ARRANGER='' | |||
for file in "$@"; do | |||
(for field in $fields; do | |||
value="" | |||
for conv in `eval echo \\$$field`; do | |||
value=$(cueprint -n "$TN" -t "$conv\n" "$cf") | |||
if [ -n "$value" ]; then | |||
echo -e "$field=$value"; break; | |||
fi | |||
done | |||
done) | metaflac --remove-all-tags --import-tags-from=- "$file" | |||
TN=$(($TN + 1)) | |||
done | |||
} | |||
# Сам скрипт | |||
# Проверка передачи нужного числа параметров | |||
if [ "${#}" -lt 1 ] || [ "${#}" -gt 2 ]; then | |||
help | |||
exit | |||
fi | |||
# Проверка наличия необходимых утилит | |||
ch_utils; | |||
# Проверка формата входного файла и проверка наличия декодеров | |||
if [[ "$(file -b "${1}")" =~ "Monkey's Audio" ]]; then | |||
test $(which mac 2>/dev/null) || ch_utils "monkeys-audio \e[1;34m(Семейство Debian/*untu)\e[0m или \e[1;32mmac \e[1;34m(Остальные дистрибутивы)\e[0m" | |||
fileformat='APE' | fileformat='APE' | ||
echo " | echo -e "\e[35mФормат файла - \e[36mMonkey's Audio \e[35m(\e[36mAPE\e[35m)\e[0m\n" | ||
elif [[ "$(file -b "${1}")" =~ "iTunes AAC-LC" ]]; then | |||
test $(which alac) || | elif [[ "$(file -b "${1}")" =~ "iTunes AAC-LC" ]]; then | ||
test $(which alac) || ch_utils "alac_decoder (запустите скрипт без параметров для справки)" | |||
if [ "$(alac -t "${1}" 2>/dev/null)" == 'file type: alac' ]; then | if [ "$(alac -t "${1}" 2>/dev/null)" == 'file type: alac' ]; then | ||
fileformat='ALAC' | fileformat='ALAC' | ||
echo " | echo -e "\e[35mФормат файла - \e[36mApple Lossless Audio Codec \e[35m(\e[36mALAC\e[35m)\e[0m\n" | ||
else | else | ||
error " | error "Формат файла M4A, но он не является ALAC. Перекодировка невозможна." 1 | ||
fi | fi | ||
elif [[ "$(file -b "${1}")" =~ "FLAC audio" ]]; then | elif [[ "$(file -b "${1}")" =~ "FLAC audio" ]]; then | ||
fileformat='FLAC' | fileformat='FLAC' | ||
echo " | echo -e "\e[35mФормат файла - \e[36mFree Lossless Audio Codec \e[35m(\e[36mFLAC\e[35m)\e[0m\n" | ||
elif [[ "$(file -b "${1}")" =~ "WAVE audio" ]]; then | elif [[ "$(file -b "${1}")" =~ "WAVE audio" ]]; then | ||
fileformat='WAV' | fileformat='WAV' | ||
echo " | echo -e "\e[35mФормат файла - \e[36mWAVE\e[0m\n" | ||
elif [ "${1##*.}" == 'wv' ]; then | elif [ "${1##*.}" == 'wv' ]; then | ||
test $(which wvunpack) || | test $(which wvunpack) || ch_utils "wavpack" | ||
fileformat='WV' | fileformat='WV' | ||
echo " | echo -e "\e[35mФормат файла - \e[36mWavPack\e[0m\n" | ||
else | else | ||
error " | error "Неизвестный формат входного аудио-файла \"${1}\" (возможно, работа с этим форматом еще не добавлена в скрипт)." 1 | ||
fi | fi | ||
# Проверка наличия внешнего или встроенного CUE-файла | |||
if [ ! -z "${2}" ]; then | if [ ! -z "${2}" ]; then | ||
cuefile="${2}" | cuefile="${2}" | ||
outdir="${outdir}/$(cueprint "${2}" -t "%P/%T\n"|uniq)" | |||
else | else | ||
if [ "${fileformat}" == 'FLAC' ]; then | if [ "${fileformat}" == 'FLAC' ]; then | ||
if [ "$(metaflac --list "${1}" | grep -qi cuesheet && echo 1)" ]; then | if [ "$(metaflac --list "${1}" | grep -qi cuesheet && echo 1)" ]; then | ||
echo " | echo -e "\e[1;32mНайдена CUE-таблица внутри файла... Извлекаем...\e[0m" | ||
metaflac "${1}" --export-tags-to=- | sed -e 's/CUESHEET=//g' -n -e '/^ *$/,//!p' > "${1%.*}.cue" | metaflac "${1}" --export-tags-to=- | sed -e 's/CUESHEET=//g' -n -e '/^ *$/,//!p' > "${1%.*}.cue" | ||
cuefile="${1%.*}.cue" | cuefile="${1%.*}.cue" | ||
else | else | ||
echo " | echo -e "\e[1;33mCUE-таблица не задана и не найдена в файле.\nКонвертируем ${1} в FLAC без разбивки на треки...\e[0m\n" | ||
direct='0' | direct='0' | ||
outdir="${outdir}/without_cue" | |||
fi | fi | ||
else | |||
echo -e "\e[1;33mCUE-таблица не задана и не найдена в файле.\n\e[0;35mКонвертируем \e[36m${1}\e[35m в \e[36mFLAC\e[35m без разбивки на треки.\e[0m\n" | |||
direct='0' | |||
outdir="${outdir}/without_cue" | |||
fi | fi | ||
fi | fi | ||
[ -e $outdir ] | # Создание каталога назначения и имени временного файла | ||
mkdir -p "$outdir" | if [ -e "$outdir" ]; then | ||
echo -e "\e[1;31mВнимание: каталог \e[1;34m${outdir} \e[1;31mуже существует. | |||
Возможно там находятся результаты предыдущей перекодировки этого альбома.\e[0m\n" | |||
else | |||
echo -e "\e[35mСоздаем каталог \e[36m${outdir}\e[35m,\nв который мы будем складывать переконвертированные файлы...\e[0m\n" | |||
fi | |||
mkdir -p "${outdir}" | |||
tempfile="$(date +tempfile.%s)" | tempfile="$(date +tempfile.%s)" | ||
# Декодирование файлов в случае пошаговых операций | |||
if [ "${direct}" == '0' ]; then | if [ "${direct}" == '0' ]; then | ||
case "${ | case "${fileformat}" in | ||
APE) | APE) | ||
echo " | echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n" | ||
mac "$1" "${outdir}/${tempfile}.wav" -d | mac "${1}" "${outdir}/${tempfile}.wav" -d | ||
;; | ;; | ||
ALAC) | ALAC) | ||
echo " | echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n" | ||
alac -f "${outdir}/${tempfile}.wav" "$1" | alac -f "${outdir}/${tempfile}.wav" "$1" | ||
;; | ;; | ||
FLAC) | FLAC) | ||
echo " | echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n" | ||
flac -d "${1}" -o "${outdir}/${tempfile}.wav" | flac -d "${1}" -o "${outdir}/${tempfile}.wav" | ||
;; | ;; | ||
WAV) | WAV) | ||
echo " | echo -e "\e[36m${1} \e[35mготов к обработке, создаем ссылку в \e[36m${outdir}\e[0m\n" | ||
ln "${1}" "${outdir}/${tempfile}.wav" | ln "${1}" "${outdir}/${tempfile}.wav" | ||
;; | ;; | ||
WV) | WV) | ||
echo " | echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36mWavPack\e[35m в \e[36mWAV\e[35m...\e[0m\n" | ||
wvunpack -m "${1}" | wvunpack -m "${1}" | ||
mv "${1%.*}.wav" "${outdir}/${tempfile}.wav" | mv "${1%.*}.wav" "${outdir}/${tempfile}.wav" | ||
Строка 107: | Строка 209: | ||
case "${fileformat}" in | case "${fileformat}" in | ||
WV) | WV) | ||
echo " | echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36mWavPack\e[35m в \e[36mWAV\e[35m...\e[0m\n" | ||
wvunpack -m "${1}" | wvunpack -m "${1}" | ||
mv "${1%.*}.wav" "${outdir}/${tempfile}.wav" | mv "${1%.*}.wav" "${outdir}/${tempfile}.wav" | ||
;; | ;; | ||
ALAC) | ALAC) | ||
echo " | echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n" | ||
alac -f "${outdir}/${tempfile}.wav" "$1" | alac -f "${outdir}/${tempfile}.wav" "$1" | ||
;; | ;; | ||
Строка 121: | Строка 223: | ||
fi | fi | ||
if [ -z "${cuefile}" ]; then | if [ -z "${cuefile}" ]; then | ||
echo " | # Кодирование WAV-файла в FLAC в случае отсутствия CUE | ||
flac --delete-input-file --best -V "${tempfile}.wav" -o "${1%.*}.flac" | echo -e "\n\e[35mКонвертация \e[36m${1}\e[35m в \e[36mFLAC\e[0m" | ||
flac --delete-input-file --best -V "${outdir}/${tempfile}.wav" -o "${outdir}/${1%.*}.flac" | |||
else | else | ||
# Конвертация CUE-таблицы | |||
cat | cat "$2" | enconv > "${outdir}/${cuefile}"; | ||
echo -e "\e[35mРазрезаем \e[36m"${1}" \e[35mпо композициям на отдельные FLAC-файлы...\e[0m\n" | |||
echo " | cd "${outdir}"; | ||
cat "$ | # Нарезка входного файла на треки | ||
cat "$cuefile" | shnsplit -o 'flac ext=flac flac --best -V - -o %f' -t "%n. %t" "${tempfile}"* | |||
# Удаление временного файла | |||
rm -f "${tempfile}"* | rm -f "${tempfile}"* | ||
echo " | echo -e "\n\e[35mПрописываем теги в файлы...\e[0m" | ||
# Заполнение тегов | |||
tag "$cuefile" *.flac | |||
fi | fi | ||
Версия 13:37, 5 июля 2009
Скрипт для преобразования одиночного файла, представляющего собой копию диска в отдельные FLAC-файлы с заполнением тегов и именованием файлов в соответствии с CUE-таблицой
- Работает с файлами в формате APE, WavPack, FLAC, WAV, ALAC
- В случае отсутствия CUE-файла просто конвертирует входной файл во FLAC
- Конвертирует CUE с национальными символами в utf-8 с использованием enca (автоматически определяет кодировку)
- Заполняет теги в выходных файлах из CUE
- Умеет экспортировать CUE, встроенный во FLAC-файл, после чего делает нарезку/заполнение тегов по этому CUE (если принудительно не указан внешний файл)
- Автоматически определяет тип файла по MIME-type
- Может обрабатывать входной файл двумя способами - стандартными утилитами для каждого формата (опция direct=0) с последующей нарезкой и напрямую средствами shnsplit (кроме формата WavPack, он в любом случае сначала конвертируется в WAV).
- Использование
- anycue2flac "AUDIO FILE.ape" "TEXT FILE.cue"
- Зависимости
- flac, shntool, cuetools, enca, monkeys-audio, wavpack, alac (в зависимости от того, с какими файлами надо будет работать)
#!/bin/bash
# By Linuxoid Project. Authors: Rain, AntiChrist.
direct='1'
outdir="$HOME/Music"
help() {
echo -e "\e[1;34mИспользование:
\t\e[1;32m$(basename $0) \e[1;33m\"Звуковой_файл (ape, flac и т.д.)\" \e[1;33m\"Таблица_Дорожек.cue\"\e[0m\n";
echo -e "\e[1;31mЗависимости\e[0m, необходимые для работы:\e[1;32m
\tflac
\tshntool
\tcuetools
\tenca\e[0m
"
echo -e "\e[1;33mДополнительно \e[0;33m(в зависимости от типов конвертируемых файлов)\e[0m:
\t\e[1;32mmonkeys-audio \e[0;34m(Семейство Debian/*untu)\e[0m или \e[1;32mmac \e[0;34m(Остальные дистрибутивы)\e[0m
\t\e[1;32mwavpack\e[0m
\t\e[1;32malac_decoder\e[0m \e[34m(При отсутствии пакета в дистрибутиве качать отсюда: \e[36mhttp://craz.net/programs/itunes/alac.html\e[34m)\e[0m\n";
echo -e "\e[1;32mРезультат конвертации ищите в директории \e[36m$outdir\e[1;32m.
\t\e[0;32mЕсли хотите изменить путь сохранения - запускайте скрипт, как
\t\e[1;36mHOME='/путь/к/новому/месту' \e[1;32m$(basename $0) \e[1;33m[параметры]\e[0m.
\t\e[32mИли же измените переменную \e[1;36moutdir \e[0;32mвнутри скрипта.\e[0m\n"
}
error() {
echo -e "\e[1;31m${1}\e[0m"
exit $2
}
ch_utils() {
uts='';
uts=$uts"$@";
test $(which flac 2>/dev/null) || uts=$uts' flac'
test $(which shnsplit 2>/dev/null) || uts=$uts' shntools'
test $(which enconv 2>/dev/null) || uts=$uts' enca'
test $(which cueprint 2>/dev/null) || uts=$uts' cuetools'
if [[ $uts != '' ]]
then
echo -e "\e[1;31mУстановите, пожалуйста, следующие пакеты:"
for i in ${uts}
do
echo -e "\e[1;32m$i"
done
echo -e "\e[1;31mОни необходимы для работы скрипта.\e[0m"
exit 1
fi
}
tag() {
cf="$1"
shift
TN=1
n=$(cueprint -d '%N' "$cf")
if [ $# -ne $n ]; then
error "\e[1;31mВнимание\e[0m: Количество получившихся файлов не соответствует количеству треков в исходном файле." 1
fi
fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC ARRANGER'
TITLE='%t'
VERSION=''
ALBUM='%T'
TRACKNUMBER='%n'
TRACKTOTAL='%N'
ARTIST='%c %p'
PERFORMER='%p'
COPYRIGHT='Free Media Distribution'
LICENSE='CC'
ORGANIZATION=''
DESCRIPTION='%m'
GENRE='%g'
DATE=''
LOCATION=''
CONTACT=''
ISRC='%i %u'
ARRANGER=''
for file in "$@"; do
(for field in $fields; do
value=""
for conv in `eval echo \\$$field`; do
value=$(cueprint -n "$TN" -t "$conv\n" "$cf")
if [ -n "$value" ]; then
echo -e "$field=$value"; break;
fi
done
done) | metaflac --remove-all-tags --import-tags-from=- "$file"
TN=$(($TN + 1))
done
}
# Сам скрипт
# Проверка передачи нужного числа параметров
if [ "${#}" -lt 1 ] || [ "${#}" -gt 2 ]; then
help
exit
fi
# Проверка наличия необходимых утилит
ch_utils;
# Проверка формата входного файла и проверка наличия декодеров
if [[ "$(file -b "${1}")" =~ "Monkey's Audio" ]]; then
test $(which mac 2>/dev/null) || ch_utils "monkeys-audio \e[1;34m(Семейство Debian/*untu)\e[0m или \e[1;32mmac \e[1;34m(Остальные дистрибутивы)\e[0m"
fileformat='APE'
echo -e "\e[35mФормат файла - \e[36mMonkey's Audio \e[35m(\e[36mAPE\e[35m)\e[0m\n"
elif [[ "$(file -b "${1}")" =~ "iTunes AAC-LC" ]]; then
test $(which alac) || ch_utils "alac_decoder (запустите скрипт без параметров для справки)"
if [ "$(alac -t "${1}" 2>/dev/null)" == 'file type: alac' ]; then
fileformat='ALAC'
echo -e "\e[35mФормат файла - \e[36mApple Lossless Audio Codec \e[35m(\e[36mALAC\e[35m)\e[0m\n"
else
error "Формат файла M4A, но он не является ALAC. Перекодировка невозможна." 1
fi
elif [[ "$(file -b "${1}")" =~ "FLAC audio" ]]; then
fileformat='FLAC'
echo -e "\e[35mФормат файла - \e[36mFree Lossless Audio Codec \e[35m(\e[36mFLAC\e[35m)\e[0m\n"
elif [[ "$(file -b "${1}")" =~ "WAVE audio" ]]; then
fileformat='WAV'
echo -e "\e[35mФормат файла - \e[36mWAVE\e[0m\n"
elif [ "${1##*.}" == 'wv' ]; then
test $(which wvunpack) || ch_utils "wavpack"
fileformat='WV'
echo -e "\e[35mФормат файла - \e[36mWavPack\e[0m\n"
else
error "Неизвестный формат входного аудио-файла \"${1}\" (возможно, работа с этим форматом еще не добавлена в скрипт)." 1
fi
# Проверка наличия внешнего или встроенного CUE-файла
if [ ! -z "${2}" ]; then
cuefile="${2}"
outdir="${outdir}/$(cueprint "${2}" -t "%P/%T\n"|uniq)"
else
if [ "${fileformat}" == 'FLAC' ]; then
if [ "$(metaflac --list "${1}" | grep -qi cuesheet && echo 1)" ]; then
echo -e "\e[1;32mНайдена CUE-таблица внутри файла... Извлекаем...\e[0m"
metaflac "${1}" --export-tags-to=- | sed -e 's/CUESHEET=//g' -n -e '/^ *$/,//!p' > "${1%.*}.cue"
cuefile="${1%.*}.cue"
else
echo -e "\e[1;33mCUE-таблица не задана и не найдена в файле.\nКонвертируем ${1} в FLAC без разбивки на треки...\e[0m\n"
direct='0'
outdir="${outdir}/without_cue"
fi
else
echo -e "\e[1;33mCUE-таблица не задана и не найдена в файле.\n\e[0;35mКонвертируем \e[36m${1}\e[35m в \e[36mFLAC\e[35m без разбивки на треки.\e[0m\n"
direct='0'
outdir="${outdir}/without_cue"
fi
fi
# Создание каталога назначения и имени временного файла
if [ -e "$outdir" ]; then
echo -e "\e[1;31mВнимание: каталог \e[1;34m${outdir} \e[1;31mуже существует.
Возможно там находятся результаты предыдущей перекодировки этого альбома.\e[0m\n"
else
echo -e "\e[35mСоздаем каталог \e[36m${outdir}\e[35m,\nв который мы будем складывать переконвертированные файлы...\e[0m\n"
fi
mkdir -p "${outdir}"
tempfile="$(date +tempfile.%s)"
# Декодирование файлов в случае пошаговых операций
if [ "${direct}" == '0' ]; then
case "${fileformat}" in
APE)
echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n"
mac "${1}" "${outdir}/${tempfile}.wav" -d
;;
ALAC)
echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n"
alac -f "${outdir}/${tempfile}.wav" "$1"
;;
FLAC)
echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n"
flac -d "${1}" -o "${outdir}/${tempfile}.wav"
;;
WAV)
echo -e "\e[36m${1} \e[35mготов к обработке, создаем ссылку в \e[36m${outdir}\e[0m\n"
ln "${1}" "${outdir}/${tempfile}.wav"
;;
WV)
echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36mWavPack\e[35m в \e[36mWAV\e[35m...\e[0m\n"
wvunpack -m "${1}"
mv "${1%.*}.wav" "${outdir}/${tempfile}.wav"
;;
esac
else
case "${fileformat}" in
WV)
echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36mWavPack\e[35m в \e[36mWAV\e[35m...\e[0m\n"
wvunpack -m "${1}"
mv "${1%.*}.wav" "${outdir}/${tempfile}.wav"
;;
ALAC)
echo -e "\e[35mКонвертирование \e[36m"${1}"\e[35m из \e[36m"${fileformat}"\e[35m в \e[36mWAV\e[35m...\e[0m\n"
alac -f "${outdir}/${tempfile}.wav" "$1"
;;
*)
ln "${1}" "${outdir}/${tempfile}.${1##*.}"
;;
esac
fi
if [ -z "${cuefile}" ]; then
# Кодирование WAV-файла в FLAC в случае отсутствия CUE
echo -e "\n\e[35mКонвертация \e[36m${1}\e[35m в \e[36mFLAC\e[0m"
flac --delete-input-file --best -V "${outdir}/${tempfile}.wav" -o "${outdir}/${1%.*}.flac"
else
# Конвертация CUE-таблицы
cat "$2" | enconv > "${outdir}/${cuefile}";
echo -e "\e[35mРазрезаем \e[36m"${1}" \e[35mпо композициям на отдельные FLAC-файлы...\e[0m\n"
cd "${outdir}";
# Нарезка входного файла на треки
cat "$cuefile" | shnsplit -o 'flac ext=flac flac --best -V - -o %f' -t "%n. %t" "${tempfile}"*
# Удаление временного файла
rm -f "${tempfile}"*
echo -e "\n\e[35mПрописываем теги в файлы...\e[0m"
# Заполнение тегов
tag "$cuefile" *.flac
fi
exit 0
ToDo: для варианта FLAC->FLAC без CUE сделать сохранение тегов