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

9

У меня есть папка с файлами на 44 ГБ (да, сорок четыре) .ape. Каждый из них .apeпредставляет собой полный компакт-диск, и обычно есть .cueфайл вместе с каждым .ape. Мне нужно конвертировать, но не разбивать их, так как нет данных о сигналах. Там также есть некоторые .jpgс и .logс, которые меня не волнуют. Если 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 на несколько .flacs.

willem.hill
источник
Здравствуйте, не могли бы вы объяснить подробнее о вашем предложении "... и скопировать информацию о теге из .cue ...". Означает ли это, что преобразованное имя файла .flac должно быть извлечено из файла .cue? Тогда не могли бы вы поделиться примером содержания этого. Иначе, сколько файлов должно быть создано и каково максимальное количество этих файлов? Спасибо
αғsнιη
> Мне нужно как-то их пропустить, так как нет данных о сигналах, по которым можно пройти. Что ты этим имеешь ввиду? Без данных метки вы можете преобразовать, но не разделить, так как информация о том, где начинаются и заканчиваются треки, находится в метке.
emk2203
@ Afshin.Hamadi Да, имя файла будет соответствовать названию трека. Файл .cue содержит информацию, такую ​​как исполнитель, альбом и т. Д. Эта информация должна быть скопирована в новые файлы flac.
willem.hill
@ emk2203 Хороший вопрос, я обновил вопрос.
willem.hill
Вы противоречите себе еще больше. «Мне нужно конвертировать, но не разбивать их, так как нет данных о сигналах». - «По сути, я хочу разделить все файлы .ape на несколько файлов .flac и скопировать информацию тега из .cue ...» . Так что же это? Если это стандартное «У меня есть файлы .ape и .cue, и я хочу, чтобы они были преобразованы и разделены на месте с тегом .flac», вопрос мог бы быть закрыт двумя хорошими ответами 24 часа назад.
emk2203

Ответы:

6

Я бы сделал это в несколько этапов, так как вы делаете это редко. Прозрачность здесь важнее автоматизации. Но возможна и одна строка. Я предполагаю, что если вы используете только одну команду для всех файлов на каждом шаге, это то, что вы намеревались.

Вам нужно иметь ffmpeg(или avconv) shntoolи cuetoolsустановить.

Чтобы преобразовать все ваши .apeв .flacна месте:

find . -name "*.ape" -exec sh -c 'exec ffmpeg -i "$1" "${1%.ape}.flac"' _ {} \;

Если вы установили исправленный MAC-кодер и декодер для файлов APE с http://www.etree.org/shnutils/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
emk2203
источник
Man- страница shnsplit перечисляет ape как поддерживаемый формат, поэтому вы можете пропустить конвертацию во flac с помощью ffmpeg и использовать -o flacвместо этого с shnsplit. Не ожидайте найти стандартное базовое имя и ape, так как кодек / контейнер используют другие кодеки без потерь, поэтому лучше не делать жесткий код, и было бы лучше включить все шаги в один запуск команды find. metaflac --add-replay-gainтакже будет хорошей идеей.
LiveWireBT
@LiveWireBT: Технически, вы правы. Вот почему я сказал «два решения доступны» в одном из моих комментариев. Однако вам нужно скачать исходный код для плагинов для поддержки ape и tta, установить g ++ и yasm, скомпилировать и установить их самостоятельно. Я пошел с решением ffmpeg, так как это проще.
emk2203
2
Для однокомандной версии:find -name '*.ape' -execdir sh -c 'flac="${1%.ape}.flac"; ffmpeg -i "$1" "$flac" && shnsplit -f CDImage.ape.cue "$flac" && cuetag CDImage.ape.cue "$flac"' _ {} \:
Дэвид Фёрстер,
1
Да. Я всегда запускаю один раз без переключателя удаления, чтобы убедиться, что он работает как положено.
emk2203
1
Пожалуйста, используйте слегка пересмотренные инструкции. Пробовал их, они работают.
emk2203