web-dev-qa-db-fra.com

Convertir par lots et diviser .ape avec .cue en .flac dans divers dossiers du terminal

J'ai un dossier de 44 Go (oui, quarante-quatre) de .ape CD files. Chaque .ape est un CD complet. Il existe généralement un fichier .cue avec chaque .ape. J'ai besoin de convertir mais pas de séparer ces données, car il n'y a pas de données de repère à parcourir. Il y a aussi quelques .jpgs et .logs dedans également, ce qui m'est égal. Si une sortie de la commande tree permet de visualiser cela, voici ce que vous devez faire:

├── 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

etc ... jusqu'à 180 CDS.

Fondamentalement, je veux fractionner tous les fichiers .ape en plusieurs fichiers .flac et copier les informations de balise à partir du .cue, en conservant la structure de répertoires (de préférence dans un répertoire complètement nouveau et différent). Je préfère une commande d'une seule ligne à un script si possible. Comment pourrais-je m'y prendre? Merci à tous ceux qui savent comment faire ça!

Et avant que quiconque ne signale cette question sous forme de doublon ici: Convertir tous les fichiers .ape en .flac dans différents sous-dossiers , je tiens à signaler que cet utilisateur n'avait pas besoin de scinder le fichier. singes en plusieurs .flacs.

9
willem.hill

Je le ferais en plusieurs étapes, puisque vous le faites rarement. La transparence est plus importante que l'automatisation ici. Mais une seule ligne est également possible. Je suppose que si vous utilisez une seule commande pour tous les fichiers à chaque étape, c'est ce que vous vouliez.

ffmpeg(ou avconvname__), shntoolet cuetoolssont installés.

Pour convertir tous vos .ape en .flac à la place:

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

Si vous installez le codeur et le décodeur MAC corrigés pour les fichiers APE de http://www.etree.org/shnutils/shntool/ , cette première étape est inutile. Mais vous devrez le compiler vous-même avec g++ et yasmname__. Il en va de même pour les fichiers .tta, qui sont également souvent utilisés à la place de .ape.

Diviser et nommer .flac fichiers:

find . -name "*.cue" -exec sh -c 'exec shnsplit -f "$1" -o flac -t "%n_%p-%t" "${1%.cue}.flac"' _ {} \;

Si shnsplitest également utilisé pour la conversion, remplacez le .flac dans "${1%.cue}.flac" par l’extension du format à partir duquel vous effectuez la conversion.

  • %n - numéro de piste
  • %p - interprète
  • %t - nom de la piste

provient du fichier .cue pour les noms de fichier .flac. Pour baliser les fichiers scindés .flac résultants:

find . -name "*.cue" -execdir sh -c 'exec cuetag "$1" *.flac' _ {} \;

Supprimez les fichiers CDImage.ape.cue, CDImage.flac et CDImage.ape restants à votre guise. Les noms étant uniques, un simple find . -name "CDImage*" -delete est suffisant, sauf si Mozart a créé une composition commençant par CDImagedont je ne suis pas au courant.

Pour que shnsplitfonctionne, tous les encodeurs/décodeurs nécessaires doivent être installés pour qu'il puisse lire et écrire des fichiers. Les modules pour APE (et pour le format TTA) doivent être compilés à partir des sources, les autres en installant le paquet (par exemple, FLAC).

Cela fonctionne dans tous les cas standard où les fichiers .cue et .tta/.flac/.ape ont le même nom, à l'exception de l'extension.


Remarque secondaire pour les autres : Si vous traitez avec cette conversion, vos fichiers source pourraient être d'origine japonaise, où APE et TTA étaient plus populaires qu'ailleurs. Si les fichiers .cue étaient initialement codés SHIFT-JIS et maintenant ouverts en tant que UTF-8, l'étape shnsplit s'interrompra . Vous devez renommer les fichiers .cue avec

find . -name "*.cue" -exec rename 's/\.cue$/.cux/' -- {} +

et convertir les fichiers intermédiaires en UTF-8 avec

find . -name "*.cux" -exec sh -c 'exec iconv -f SHIFT-JIS -t UTF-8 -o "${1%.cux}.cue" -- "$1"' _ {} \;

avant de tenter de suivre les étapes ci-dessus. N'oubliez pas de vous débarrasser des fichiers .cux lorsque vous avez terminé:

find . -name "*.cux" -delete
6
emk2203