Пакетное преобразование и разделение .ape с .cue на .flac в различных папках из терминала

Пакетное преобразование и разделение .ape с .cue на .flac в различных папках из терминала

.apeУ меня есть папка с файлами CD на 44 ГБ (да, сорок четыре) . Каждый из них .ape— полноценный CD, и обычно .cueс каждым идет файл .ape. Мне нужно преобразовать, но не разделить их, так как нет данных о метках, по которым можно было бы ориентироваться. Там также есть некоторые .jpgs и .logs, которые мне не нужны. Если 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для преобразования также используется, замените .flacin "${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

Связанный контент