Pull to refresh

Преобразование APE+CUE в ogg vorbis или FLAC из командной строки Linux

На торрент-трекерах часто выкладывают очень хорошую музыку в lossless, причем именно в виде APE + CUE. Все бы ничего, но
  • lossless в плеере — это перебор; к тому же плеер с поддердкой lossless еще надо купить
  • с проигрыванием CUE в линуксе у многих плееров имеются проблемы

В итоге появилась необходимость преобразовать APE+CUE во что-то более удобоиграемое с сохранением метаинформации. Как ни странно, но в гугле быстро найтись нужного не удалось: скрипт то просто не работает, то некорректно обрабатывает апострофы «'» в тегах. В итоге пришлось написать два скрипта для преобразования в vorbis и во FLAC.

Для работы необходимы: mac, shntool, cuetools, vorbis-tools или flac.

Vorbis


Первый скрипт преобразует APE+CUE в ворбис треки с копированием метаинформации из cue-файла. Преобразование происходит в текущей директории с созданием промежуточных wav-файлов, которые удаляются по мере конвертации.

#! /bin/bash
APE="$1"
CUE="$2"
QUALITY=6

cuebreakpoints "${CUE}" | shnsplit -o wav "${APE}" || exit 1
GENRE="$(sed -nre 's/^REM GENRE ([^\r]*)$/\1/p' "${CUE}")"
for i in `seq -f %02g $(cueprint -d '%N' "${CUE}")`;
do
in="split-track$i.wav"
out="$i - $(cueprint -t "%t" -n$i "${CUE}" | sed -e 's:/: :g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//').ogg"
oggenc -q$QUALITY "${in}" -o "${out}"
cueprint -t "ALBUM=%T\nARTIST=%p\nDATE=1999\nGENRE=${GENRE}\nTOTALTRACKS=%N\nTRACKNUMBER=%n\nTITLE=%t\n" -n$i "${CUE}" \
| vorbiscomment -w -c /dev/stdin "${out}"
rm -f "${in}"
done


FLAC


Вариация на тему FLAC tracks (без промежуточных wav, спасибо shntool):
#! /bin/bash
APE="$1"
CUE="$2"

cuebreakpoints "${CUE}" | shnsplit -o flac "${APE}" || exit 1
GENRE="$(sed -nre 's/^REM GENRE ([^\r]*)$/\1/p' "${CUE}")"
for i in `seq -f %02g $(cueprint -d '%N' "${CUE}")`;
do
in="split-track$i.flac"
out="$i - $(cueprint -t "%t" -n$i "${CUE}" | sed -e 's:/: :g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//').flac"
cueprint -t "ALBUM=%T\nARTIST=%p\nDATE=1999\nGENRE=${GENRE}\nTOTALTRACKS=%N\nTRACKNUMBER=%n\nTITLE=%t\n" -n$i "${CUE}" \
| metaflac --remove-all-tags --import-tags-from=- "${in}"
mv -f "${in}" "${out}"
done


Использование:
ape2vorbis file.ape file.cue

или
ape2flac file.ape file.cue


P. S. cueprint в моем дистрибутиве почему-то некорректно обрабатывает GENRE, поэтому его пришлось выдирать sed'ом.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.