Перекодирование одиночного lossless аудиофайла во FLAC по CUE-таблице: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Rain (обсуждение | вклад) |
Rain (обсуждение | вклад) (добавлено вытягивание CUE из FLAC) |
||
Строка 2: | Строка 2: | ||
; Использование: cueape2flac "AUDIO FILE.ape" "TEXT FILE.cue" | ; Использование: cueape2flac "AUDIO FILE.ape" "TEXT FILE.cue" | ||
; Зависимости: | ; Зависимости: flac, shntool, cuetools, enca, monkeys-audio, wavpack | ||
---- | ---- | ||
Строка 9: | Строка 9: | ||
# By Rain ;) | # By Rain ;) | ||
# Usage: cueape2flac "AUDIO FILE.ape" "TEXT FILE.cue" | # Usage: cueape2flac "AUDIO FILE.ape" "TEXT FILE.cue" | ||
# Depends on monkeys-audio, | # Depends on flac, if needed - shntool, cuetools, enca, monkeys-audio, wavpack | ||
outdir='output' | outdir='output' | ||
direct=' | direct='1' | ||
error() { | error() { | ||
echo "$1" | echo -e "\e[31m${1}\e[0m" | ||
exit $2 | exit $2 | ||
} | } | ||
Строка 25: | Строка 25: | ||
test $(which enconv) || error "Please, install enca first" 1 | test $(which enconv) || error "Please, install enca first" 1 | ||
test $(which cuetag) || error "Please, install cuetools first" 1 | test $(which cuetag) || error "Please, install cuetools first" 1 | ||
cuefile="${2}" | |||
else | else | ||
if [[ "$(file -b "${1}")" =~ "FLAC audio" ]]; then | |||
if [ "$(metaflac --list "${1}" | grep -qi cuesheet && echo 1)" ]; then | |||
echo "Founded build-in CUE-sheet, extracting..." | |||
metaflac "${1}" --export-tags-to=- | sed -e 's/CUESHEET=//g' -n -e '/^ *$/,//!p' > "${1%.*}.cue" | |||
cuefile="${1%.*}.cue" | |||
else | |||
echo "CUE-sheet not specified, so we simply convert ${1} to FLAC format" | |||
direct='0' | |||
fi | |||
fi | |||
fi | fi | ||
Строка 69: | Строка 78: | ||
cd "${outdir}" | cd "${outdir}" | ||
if [ -z "${ | if [ -z "${cuefile}" ]; then | ||
flac --best -V "${tempfile}.wav" -o "${1%.*}.flac" | echo "Converting "${1}" to FLAC" | ||
flac --delete-input-file --best -V "${tempfile}.wav" -o "${1%.*}.flac" | |||
else | else | ||
# Converting CUE-sheet | # Converting CUE-sheet | ||
cat ../"${ | cat ../"${cuefile}" | enconv > "${cuefile}" | ||
echo "Splitting "${1}" to multiple FLAC files" | echo "Splitting "${1}" to multiple FLAC files" | ||
cat "${ | cat "${cuefile}" | shnsplit -o 'flac ext=flac flac --best -V - -o %f' -t %n-%p-%a-%t "${tempfile}"* | ||
rm -f "${tempfile}"* | |||
cuetag "${ | echo "Tagging files" | ||
cuetag "${cuefile}" *.flac | |||
fi | fi | ||
exit 0 | exit 0 | ||
</source> | </source> | ||
---- | ---- | ||
{{ToDo|для варианта FLAC->FLAC без CUE сделать сохранение тегов | {{ToDo|для варианта FLAC->FLAC без CUE сделать сохранение тегов}} | ||
[[Category:FLAC]][[Category:APE]][[Category:CUE]][[Category:Bash-скрипт]][[Category:Конвертация]][[Category:Скрипт]] | [[Category:FLAC]][[Category:APE]][[Category:CUE]][[Category:Bash-скрипт]][[Category:Конвертация]][[Category:Скрипт]] |
Версия 19:22, 6 марта 2009
Скрипт для преобразования одиночного ape-файла, представляющего собой копию диска в отдельные FLAC-файлы с заполнением тегов и именованием файлов в соответствии с CUE-таблицой
- Использование
- cueape2flac "AUDIO FILE.ape" "TEXT FILE.cue"
- Зависимости
- flac, shntool, cuetools, enca, monkeys-audio, wavpack
#!/bin/bash
# By Rain ;)
# Usage: cueape2flac "AUDIO FILE.ape" "TEXT FILE.cue"
# Depends on flac, if needed - shntool, cuetools, enca, monkeys-audio, wavpack
outdir='output'
direct='1'
error() {
echo -e "\e[31m${1}\e[0m"
exit $2
}
test $(which flac) || error "Error: FLAC convertor not found" 1
if [ ! -z "${2}" ]; then
test $(which shnsplit) || error "Please, install shntool first" 1
test $(which enconv) || error "Please, install enca first" 1
test $(which cuetag) || error "Please, install cuetools first" 1
cuefile="${2}"
else
if [[ "$(file -b "${1}")" =~ "FLAC audio" ]]; then
if [ "$(metaflac --list "${1}" | grep -qi cuesheet && echo 1)" ]; then
echo "Founded build-in CUE-sheet, extracting..."
metaflac "${1}" --export-tags-to=- | sed -e 's/CUESHEET=//g' -n -e '/^ *$/,//!p' > "${1%.*}.cue"
cuefile="${1%.*}.cue"
else
echo "CUE-sheet not specified, so we simply convert ${1} to FLAC format"
direct='0'
fi
fi
fi
if [[ "$(file -b "${1}")" =~ "Monkey's Audio" ]]; then
test $(which mac) || error "Error: Monkey Audio convertor not found" 1
elif [ "${1##*.}" == 'wv' ]; then
test $(which wvunpack) || error "Error: WavPack decompressor not found" 1
fi
[ -e $outdir ] && echo "Warning: $outdir already exist" || echo "Creating output directory"
mkdir -p "$outdir"
tempfile="$(date +tempfile.%s)"
if [ "${direct}" == '0' ]; then
if [[ "$(file -b "${1}")" =~ "Monkey's Audio" ]]; then
echo "Converting "$1" from APE to WAV-format"
mac "$1" "${outdir}/${tempfile}.wav" -d
elif [[ "$(file -b "${1}")" =~ "FLAC audio" ]]; then
echo "Converting "$1" from FLAC to WAV-format"
flac -d "${1}" -o "${outdir}/${tempfile}.wav"
elif [[ "$(file -b "${1}")" =~ "WAVE audio" ]]; then
echo "Ok, ${1} ready to splitting, linking to ${outdir}"
ln "${1}" "${outdir}/${tempfile}.wav"
elif [ "${1##*.}" == 'wv' ]; then
echo "Converting "$1" from WavPack to WAV-format"
wvunpack -m "${1}"
mv "${1%.*}.wav" "${outdir}/${tempfile}.wav"
else
error "Can't recognize input file format" 1
fi
else
if [ "${1##*.}" == 'wv' ]; then
echo "Converting "$1" from WavPack to WAV-format"
wvunpack -m "${1}"
mv "${1%.*}.wav" "${outdir}/${tempfile}.wav"
else
ln "${1}" "${outdir}/${tempfile}.${1##*.}"
fi
fi
cd "${outdir}"
if [ -z "${cuefile}" ]; then
echo "Converting "${1}" to FLAC"
flac --delete-input-file --best -V "${tempfile}.wav" -o "${1%.*}.flac"
else
# Converting CUE-sheet
cat ../"${cuefile}" | enconv > "${cuefile}"
echo "Splitting "${1}" to multiple FLAC files"
cat "${cuefile}" | shnsplit -o 'flac ext=flac flac --best -V - -o %f' -t %n-%p-%a-%t "${tempfile}"*
rm -f "${tempfile}"*
echo "Tagging files"
cuetag "${cuefile}" *.flac
fi
exit 0
ToDo: для варианта FLAC->FLAC без CUE сделать сохранение тегов