Во-первых, почему FLAC — его играет любой говноплеер. А мой COWON E2 играет его так, что ноутбук лишь жалобно похрипывает в уголке в сравнении =). Посему я стараюсь хранить свою коллекцию во FLAC или mp3’320 (ну невиноватая я, не все альбомы есть во flac’e).
Первая же проблема с которой я столкнулся — все релизеры считают APE почему-то хорошими форматом. А мне от этого грустно. И даже те, кто не считает ape хорошим — не удосуживаются нарезать flac на отдельные песни.
Посему запишу себе на память и вам на радость решение двух проблем —
1) конвертация APE во FLAC
2) нарезание FLAC на треки.
Начнем с установки всего нужного:
root@laptop:~# apt-get install ffmpeg flac shntool cuetools
Посмотрим на побоище, с которым будем работать:
user@laptop:~$ cd lyriel/2005\ -\ Prisonworld/ && ls
audiochecker.log pics Prisonworld.ape Prisonworld.cue Prisonworld.log
Собственно, для тех, кто не понял — конвертировать в примере я буду альбом Prisonworld группы Lyriel. Нужные нам файлы — Prisonworld.ape и Prisonworld.cue
Для начала сконвертируем, если у нас ещё не FLAC:
user@laptop:~/lyriel/2005 - Prisonworld$ ffmpeg Prisonworld.flac -i Prisonworld.ape
На выходе мы получим Prisonworld.flac. Но этого нам ещё недостаточно. Перематывать огромный файл на час, чтобы найти песню… фи. Порежем его:
user@laptop:~/lyriel/2005 - Prisonworld$ cuebreakpoints Prisonworld.cue | shnsplit -o flac Prisonworld.flac
В идеальном случае вы получите нарезанный на треки flac. В случае, если вас обманули и подсунули запись ниже CD качества, то увидите такую ошибку:
shnsplit: error: m:ss.ff format can only be used with CD-quality files
В целом, ничего страшного. Но у вас ненастоящий flac, да =) В случае, если вас всё же обманули и альтернатив нет (хотя я всё же настоятельно советую пойти и поискать другую раздачу, если самоцель — именно loseless, а не формат flac — мне вот не повезло, я нарвался на такой альбом, звучит ужасно), то используем такую команду:
user@laptop:~/lyriel/2005 - Prisonworld$ cuebreakpoints Prisonworld.cue | sed 's/$/0/g' | shnsplit Prisonworld.flac -o flac
В итоге этих мучений мы получим пачку файлов split-trackXX.flac. Только они без тегов и с бредоназваниями. Починим теги:
user@laptop:~/lyriel/2005 - Prisonworld$ cuetag Prisonworld.cue split-track*flac
Теперь у нас кошерные файлики. Дальше встаёт вопрос о переименовании. Я это делаю руками (чтобы быть точно уверенным, что у файлов будет правильное название, соответствующее песне, если в тегах напортачили). Но раз уж мы админы, то прибегнем к магии:
user@laptop:~/lyriel/2005 - Prisonworld$ for i in `ls split-track*flac`; do mv $i "$(echo -n $i | sed 's/split-track//' | sed 's/\.flac//'; echo -n " - "; metaflac --show-tag=TITLE $i | sed 's/.*=//'| tr "\r\n" " "; echo -n "("; metaflac --show-tag=ALBUM $i | sed 's/.*=//' | tr "\r\n" ")"; echo -n ".flac")"; done
Осталось почистить только ненужный нам мусор (учтите, что не нужен он только для коллекции ;):
user@laptop:~/lyriel/2005 - Prisonworld$ rm *.log *.ape *.cue Prisonworld.flac
И у нас есть аккуратно сложенный альбом:
01 - At the Midnightsgate (Prisonworld).flac
02 - Prisonworld (Prisonworld).flac
03 - The Crown of the Twilight (Prisonworld).flac
04 - Symmetry of Disfiguration (Prisonworld).flac
05 - The singing Nightingale (Prisonworld).flac
06 - Lind E-Huil (Prisonworld).flac
07 - There's a Rainbow in the Rain (Prisonworld).flac
08 - The Judgment of my Harvest Heart (Prisonworld).flac
09 - Fate of Knowledge (Prisonworld).flac
10 - Day in June (Prisonworld).flac
11 - The Spring and the Flight (Prisonworld).flac
12 - Symmetry of Disfiguration (acoustic) (Prisonworld).flac
13 - The Crown of the Twilight (acoustic) (Prisonworld).flac
Осталось только переименовать папку правильно и сделать scp куда-нибудь в район /storage/music/collection/Lyriel/2005-Prisonworld =)
dude, use cat
what for ) ?
Политика партии такая в блоге — никогда его не использовать.
> Но раз уж мы админы, то прибегнем к магии:
> user@laptop:~/lyriel/2005 — Prisonworld$ for i in `ls split-track*flac`; do
Используя «магию» сто́ит учитывать, что формат вывода у `ls что-то_там` может быть абсолютно любой, т. к. многие используют алиасы (например, у меня ls = /bin/ls -hlApF).
Да и вообще, слышал, что в таких случаях рекомендуется более простая и «непробиваемая» конструкция:
for i in split-track*flac; do …
Ну, и ещё можно избавиться от лишнего пайпа и echo тут:
>
sed 's/split-track//' | sed 's/\.flac//'; echo -n " - ";
используя sed:
sed 's/split-track//;s/\.flac/ - /';
или переписав регексп в другую сторону (не выбрасывая лишнее, а выделяя нужное):
sed sed 's/split-track\([0-9]\+\)\.flac/\1 - /';
В реальной команде, которую я использую, sed вызывается один раз. Я пишу как можно нагляднее, сами понимаете, чтобы без проблем можно было понять, что именно делается (поэтому на каждое действие — запуск бинарника).
В любом случае, спасибо за ценную информацию) И я тег /code у вас проставил.
Давно и не без успеха пользуюсь https://github.com/ftrvxmtrx/split2flac
А еще переименовать файлы согласно тегам можно через утилиту lltag
например вот так:
lltag —yes —no-tagging —rename «%n — %t» split*.flac
Это если теги есть, а то они редковаты на торрентах =)