Пакетне перетворення та розділення .ape з .cue в .flac в різних папках від терміналу


9

У мене папка з .apeCD-файлами на 44 Гб (так, сорок чотири) . Кожен .ape- це повний компакт-диск, і зазвичай є .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, зберігаючи структуру каталогу (бажано, в абсолютно новому та іншому каталозі). Я віддаю перевагу однорядковій команді сценарію, якщо це можливо. Як би я пішов про це? Дякуємо всім, хто знає, як це зробити!

І перш ніж хто-небудь позначить це запитання як дублікат цього тут: Перетворіть усі .


Привіт, поясніть, будь ласка, детальніше про ваше речення "... та скопіюйте інформацію про теги з .cue ...". Чи означає це, що ім'я перетвореного файлу .flac має бути підхоплено з файлу .cue? Тоді, будь ласка, поділіться зразком вмісту цього вмісту. Ще, як слід створити кілька файлів і яка максимальна кількість цих файлів? Дякую
αғsnιη

> Мені потрібно якось пропустити їх, оскільки немає жодних даних про киї. Що ви маєте на увазі під цим? Без даних про виклик ви можете конвертувати, але не розділяти їх, оскільки інформація про те, де починаються та закінчуються треки, є в репліку.
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також використовується для перетворення, замініть .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достатньо, за винятком випадків, коли Моцарт створив композицію, починаючи з 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

shnsplit в Manpage списки кривлятися в якості підтримуваного формату , так що ви можете пропустити перетворення в FLAC з FFmpeg і використання -o flacз shnsplit замість цього. Не сподівайтеся на те, що ви знайдете стандартне базове ім'я та мавпу, оскільки кодек / контейнер також використовуються інші кодеки без втрат, тому краще не важкий код, і було б краще включити всі кроки в один запуск команди 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.