
.ape
У меня есть папка с файлами CD на 44 ГБ (да, сорок четыре) . Каждый из них .ape
— полноценный CD, и обычно .cue
с каждым идет файл .ape
. Мне нужно преобразовать, но не разделить их, так как нет данных о метках, по которым можно было бы ориентироваться. Там также есть некоторые .jpg
s и .log
s, которые мне не нужны. Если tree
вывод команды поможет визуализировать это, вот:
├── Philips Mozart Collection - 180 CD
│ │ ├── box01-Symphonies
│ │ │ ├── 1B.jpg
│ │ │ ├── 1F.jpg
│ │ │ ├── cd01
│ │ │ │ ├── CDImage.ape
│ │ │ │ ├── CDImage.ape.cue
│ │ │ │ ├── Complete Mozart Edition, Vol. 01, Early Symphonies (Disc 1) - Neville Mariner, Academy of St. Martin in the Fields.log
│ │ │ │ ├── img421.jpg
│ │ │ │ └── img422.jpg
│ │ │ ├── cd02
│ │ │ │ └── CDImage.ape
│ │ │ ├── cd03
│ │ │ │ ├── CDImage.ape
│ │ │ │ ├── CDImage.ape.cue
│ │ │ │ ├── Complete Mozart Edition, Vol. 01, Early Symphonies (Disc 2) - Sir Neville Marinner - Acadamy of St Martin in the Fields.log
│ │ │ │ ├── img426.jpg
│ │ │ │ └── img427.jpg
│ │ │ ├── cd04
и т.д. вплоть до 180 CDS.
По сути, я хочу разделить все .ape
файлы на несколько .flac
файлов и скопировать информацию тегов из .cue
, сохраняя структуру каталогов (предпочтительно в совершенно новом и другом каталоге). Я предпочитаю однострочную команду скрипту, если это возможно. Как бы мне это сделать? Спасибо всем, кто знает, как это сделать!
И прежде чем кто-либо пометит этот вопрос как дубликат вот этого: Конвертировать все файлы .ape в .flac в разных подпапках, я хотел бы отметить, что этому пользователю не нужно было разделять .ape на несколько .flac.
решение1
Я бы сделал это в несколько шагов, так как вы делаете это редко. Прозрачность здесь важнее автоматизации. Но возможна и одна строка. Я предполагаю, что если вы используете только одну команду для всех файлов на каждом шаге, это то, что вы имели в виду.
Вам необходимо иметь ffmpeg
(или avconv
) shntool
и cuetools
установить.
Чтобы преобразовать все ваши .ape
данные .flac
на место:
find . -name "*.ape" -exec sh -c 'exec ffmpeg -i "$1" "${1%.ape}.flac"' _ {} \;
Если вы установите исправленный MAC-кодер и декодер для APE-файлов из http://shnutils.freeshell.org/shntool/, этот первый шаг не нужен. Но вам нужно будет скомпилировать его с g++
и yasm
самостоятельно. То же самое касается .tta
файлов, которые также часто используются вместо .ape
.
Расколотьи имя .flac
файлы:
find . -name "*.cue" -exec sh -c 'exec shnsplit -f "$1" -o flac -t "%n_%p-%t" "${1%.cue}.flac"' _ {} \;
Если shnsplit
для преобразования также используется, замените .flac
in "${1%.cue}.flac"
на расширение формата, из которого выполняется преобразование.
%n
- номер дорожки%p
– исполнитель%t
– название трека
берется из .cue
файла для .flac
имен файлов. Чтобы пометить полученные, разделенные .flac
файлы:
find . -name "*.cue" -execdir sh -c 'exec cuetag "$1" *.flac' _ {} \;
Удалите оставшиеся файлы CDImage.ape.cue
, CDImage.flac
, и CDImage.ape
на досуге. Имена уникальны, поэтому find . -name "CDImage*" -delete
достаточно простого, за исключением случаев, когда Моцарт создал композицию, начинающуюся с CDImage
которой, о которой я не знаю.
Для shnsplit
работы необходимо установить все необходимые кодировщики/декодеры, чтобы он мог читать и записывать файлы. Модули для APE (и для формата TTA) необходимо скомпилировать из исходников, остальные — путем установки пакета (например, FLAC).
Это работает для всех стандартных случаев, когда файлы .cue
и .tta
/ .flac
/ .ape
имеют одинаковые имена, за исключением расширения.
Замечание для других: Если вы имеете дело с этим преобразованием, ваши исходные файлы могут быть японского происхождения, где APE и TTA были более популярны, чем где-либо еще. Если файлы .cue
изначально были закодированы SHIFT-JIS, а теперь открыты как UTF-8, shnsplit
шагсломает. Вам нужно переименовать файлы .cue
с помощью
find . -name "*.cue" -exec rename 's/\.cue$/.cux/' -- {} +
и конвертировать промежуточные файлы в UTF-8 с помощью
find . -name "*.cux" -exec sh -c 'exec iconv -f SHIFT-JIS -t UTF-8 -o "${1%.cux}.cue" -- "$1"' _ {} \;
прежде чем пытаться выполнить шаги выше. Не забудьте избавиться от .cux
файлов, когда закончите с:
find . -name "*.cux" -delete