У меня есть папка .ape
CD-файлов размером 44 ГБ (да, сорок четыре). Каждый .ape
является полным CD, и обычно есть файл .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
на месте:
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
также используется для преобразования, замена .flac
в "${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
достаточно, кроме того, если Mozart сделал состав, запускающийся с 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