Перекодирование одиночного аудиофайла (APE, WAV, FLAC) во FLAC по CUE-таблице

Скрипт для преобразования одиночного файла, представляющего собой копию диска в отдельные FLAC-файлы с заполнением тегов и именованием файлов в соответствии с CUE-таблицой

  • Работает с файлами в формате APE, WavPack, FLAC, WAV
  • В случае отсутствия 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 (в зависимости от того, с какими файлами надо будет работать)

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
#!/bin/bash
# By Rain ;)
# Usage: anycue2flac "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

Тэги: , , , , , ,

Эта запись была оставлена Пятница, июня 12, 2009 в 20:01 и относится к категориям: Console, Scripts. Вы можете отслеживать комментарии по RSS 2.0 ленте. Вы можете оставить комментарий или trackback с Вашего сайта.

Оставить комментарий

Надо-бы залогиниться, чтоб оставить комментарий.