У меня есть папка с файлами на 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.
источник
Ответы:
Я бы сделал это в несколько этапов, так как вы делаете это редко. Прозрачность здесь важнее автоматизации. Но возможна и одна строка. Я предполагаю, что если вы используете только одну команду для всех файлов на каждом шаге, это то, что вы намеревались.
Вам нужно иметь
ffmpeg
(илиavconv
)shntool
иcuetools
установить.Чтобы преобразовать все ваши
.ape
в.flac
на месте:Если вы установили исправленный MAC-кодер и декодер для файлов APE с http://www.etree.org/shnutils/shntool/ , этот первый шаг не требуется. Но вам нужно будет скомпилировать его
g++
иyasm
сами. То же самое касается.tta
файлов, которые также часто используются вместо.ape
.Разделить и назвать
.flac
файлы:Если
shnsplit
также используется для конвертации, замените.flac
in"${1%.cue}.flac"
расширением того формата, из которого вы конвертируете.%n
- номер дорожки%p
- исполнитель%t
- название трекаберется из
.cue
файла для.flac
имен файлов. Чтобы пометить получившиеся разделенные.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
файлы си конвертировать промежуточные файлы в UTF-8 с
прежде чем пытаться сделать шаги выше. Не забудьте избавиться от
.cux
файлов, когда закончите с:источник
-o flac
вместо этого с shnsplit. Не ожидайте найти стандартное базовое имя и ape, так как кодек / контейнер используют другие кодеки без потерь, поэтому лучше не делать жесткий код, и было бы лучше включить все шаги в один запуск команды find.metaflac --add-replay-gain
также будет хорошей идеей.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"' _ {} \: