Як виявилося тема ця не нова. Найпростіший шлях такий. Встановлюємо:
Але є певна проблема, у отриманих файлах відсутня інформація про виконавця, альбом, тощо. Це не зовсім зручно, якщо збираємося додати ці файли у сучасні медіаплеєри, які вміють читати ці метадані.
Покроково.
Кількість композицій:
Метадані по композиції №1:Далі, припустимо у нас є наступні файли:sudo aptitude install cuetools shntool flac
Тоді розбити оригінальний flac на окремі композиції можна так:$ ls -1 Океан\ Ельзи\ -\ Без\ меж.* Океан Ельзи - Без меж.cue Океан Ельзи - Без меж.flac
Після чого отримуємо наступний список файлів:$ cuebreakpoints Океан\ Ельзи\ -\ Без\ меж.cue | \ shnsplit -o flac Океан\ Ельзи\ -\ Без\ меж.flac
Окремий файл - окрема композиція.$ ls -1 split-track* split-track01.flac split-track02.flac split-track03.flac split-track04.flac split-track05.flac split-track06.flac split-track07.flac split-track08.flac split-track09.flac split-track10.flac split-track11.flac
Але є певна проблема, у отриманих файлах відсутня інформація про виконавця, альбом, тощо. Це не зовсім зручно, якщо збираємося додати ці файли у сучасні медіаплеєри, які вміють читати ці метадані.
Покроково.
Кількість композицій:
$ cueprint -d '%N' Океан\ Ельзи\ -\ Без\ меж.cue 11
або у заданому форматі:$ cueprint -n 1 Океан\ Ельзи\ -\ Без\ меж.cue | iconv -f cp1251 Track 1 Information arranger: composer: genre: ISRC: message: track number: 1 perfomer: Океан Ельзи title: Віддай мені (свою любов) ISRC (CD-TEXT):
$ cueprint -n 1 -t \ 'ARRANGER=%A\nCOMPOSER=%C\nGENRE=%G\nMESSAGE=%M\nTRACKNUMBER=%n\nARTIST=%p\nTITLE=%t\nALBUM=%T\n' \ Океан\ Ельзи\ -\ Без\ меж.cue | \ iconv -f cp1251 ARRANGER= COMPOSER= GENRE= MESSAGE= TRACKNUMBER=1 ARTIST=Океан Ельзи TITLE=Віддай мені (свою любов) ALBUM=Без меж
Всі ці моменти можна об'єднати у скрипт.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
############################# | |
# зависимости: | |
# media-sound/shntool | |
# app-cdr/cuetools | |
# media-libs/flac | |
# media-sound/mac | |
# media-sound/ttaenc | |
# media-sound/wavpack | |
############################# | |
while read cuefile | |
do | |
cue="${cuefile##*/}" | |
obj=${cue%.cue} | |
objdir="${cuefile%/*}" | |
pushd "$objdir" | |
if [ -f "$obj".flac ]; then | |
shntool split -i "flac" -o "flac" -f "$cue" -t %n "$obj".flac || echo "Не удалось разделить $obj.flac" \ | |
exit 1 | |
elif [ -f "$obj".ape ]; then | |
shntool split -i "ape" -o "flac" -f "$cue" -t %n "$obj".ape || echo "Не удалось разделить $obj.ape" \ | |
exit 1 | |
elif [ -f "$obj".tta ]; then | |
shntool split -i "tta" -o "flac" -f "$cue" -t %n "$obj".tta || echo "Не удалось разделить $obj.tta" \ | |
exit 1 | |
elif [ -f "$obj".wv ]; then | |
shntool split -i "wv" -o "flac" -f "$cue" -t %n "$obj".wv || echo "Не удалось разделить $obj.wv" \ | |
exit 1 | |
else | |
echo "Файл $obj не найден, выходим." | |
exit 1 | |
fi | |
ln -s "$cue" tmp.cue | |
for (( i=1 ; i <= $(cueprint -d '%N' tmp.cue) ; ++i )); do | |
NN=$(printf '%02d' $i) | |
[ -s "$NN.flac" ] && { | |
cueprint -n $i -t \ | |
'ARRANGER=%A\nCOMPOSER=%C\nGENRE=%G\nMESSAGE=%M\nTRACKNUMBER=%n\nARTIST=%p\nTITLE=%t\nALBUM=%T\n' \ | |
tmp.cue | iconv -f cp1251 | egrep -v '=$' | metaflac --import-tags-from=- $NN.flac | |
mv $NN.flac "$NN - $(cueprint -n $i -t %t tmp.cue | iconv -f cp1251 | sed -e "s,/,,g").flac" | |
} | |
done | |
rm -f tmp.cue "$cue" "$obj".{flac,ape,tta} tags.tmp | |
popd | |
done < <(find . -type f -iname "*.cue") |
UPDATE:
Був отримав помилку:
shnsplit: error: m:ss.ff format can only be used with CD-quality files
Таблетка:
cuebreakpoints *.cue | sed s/$/0/ | shnsplit -t %n -o flac *.flac