Conversion par lots et fractionnement de .ape avec .cue vers .flac dans divers dossiers à partir du terminal

9

J'ai un dossier de 44 Go (oui, quarante-quatre) de .apefichiers CD. Chacun .apeest un CD complet, et il y a généralement un .cuefichier avec chacun .ape. J'ai besoin de les convertir, mais pas de les séparer, car il n'y a pas de données de repère à utiliser. Il y a aussi quelques .jpgs et .logs là-dedans aussi, dont je ne me soucie pas. Si une treesortie de commande permet de visualiser cela, vous allez ici:

├── 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 diviser tous les .apefichiers en plusieurs .flacfichiers et copier les informations de balise à partir du .cue, en conservant la structure du répertoire (de préférence dans un répertoire complètement nouveau et différent). Je préfère une commande sur une seule ligne à un script si possible. Comment pourrais-je m'y prendre? Merci à tous ceux qui savent faire ça!

Et avant que quiconque ne signale cette question en double à celle-ci ici: Convertissez tous les fichiers .ape en .flac dans différents sous - dossiers , je voudrais souligner que cet utilisateur n'avait pas besoin de diviser le .ape en plusieurs .flacs.

willem.hill
la source
Salut, pourriez-vous s'il vous plaît expliquer plus sur votre phrase "... et copier les informations de balise du .cue ...". Cela signifie-t-il que le nom des fichiers .flac convertis doit être récupéré à partir du fichier .cue? Alors voudriez-vous s'il vous plaît partager un exemple de contenu de celui-ci. Sinon, comment créer plusieurs fichiers et quel est le nombre maximum de ces fichiers? Merci
αғsнιη
> Je dois en quelque sorte les ignorer, car il n'y a pas de données de repérage. Que veux-tu dire par là? Sans données de repère, vous pourriez convertir, mais pas diviser, car les informations sur le début et la fin des pistes se trouvent dans le repère.
emk2203
@ Afshin.Hamadi Oui, le nom du fichier correspondrait au titre de la piste. Le fichier .cue contient des informations telles que l'artiste, l'album, etc. Ces informations doivent être copiées dans les nouveaux fichiers flac.
willem.hill
@ emk2203 Bon point, j'ai mis à jour la question.
willem.hill
Vous vous contredisez encore plus. "J'ai besoin de les convertir, mais pas de les séparer, car il n'y a pas de données de repères." - "Fondamentalement, je veux diviser tous les fichiers .ape en plusieurs fichiers .flac et copier les informations de balise à partir du .cue ..." . Alors c'est quoi? S'il s'agit du standard "J'ai des fichiers .ape et .cue, et je veux qu'ils soient convertis et divisés sur place en .flac balisé", la question aurait pu être fermée avec deux bonnes réponses il y a 24 heures.
emk2203

Réponses:

6

Je le ferais en plusieurs étapes, car 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.

Vous devez avoir ffmpeg(ou avconv) shntoolet cuetoolsinstallé.

Pour convertir tous vos .apefichiers .flacen place:

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

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

Diviser et nommer les .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 .flacin "${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

est extrait du .cuefichier pour les .flacnoms de fichier. Pour marquer les .flacfichiers divisés résultants :

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

Supprimez les fichiers restants CDImage.ape.cue, CDImage.flacet CDImage.apeà votre guise. Les noms sont uniques, donc un simple find . -name "CDImage*" -deletesuffit, sauf si Mozart a fait une composition à partir de CDImagelaquelle je ne suis pas au courant.

Pour shnsplitfonctionner, tous les encodeurs / décodeurs nécessaires doivent être installés afin qu'il puisse lire et écrire des fichiers. Les modules pour APE (et pour le format TTA) devraient être compilés à partir de la source, les autres en installant le paquet (ie FLAC).

Cela fonctionne pour tous les cas standard où .cueet .tta/ .flac/ les .apefichiers 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 .cuefichiers étaient initialement codés SHIFT-JIS et maintenant ouverts en UTF-8, l' shnsplitétape s'arrêtera . Vous devez renommer les .cuefichiers 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 d'essayer d'effectuer les étapes ci-dessus. N'oubliez pas de vous débarrasser des .cuxfichiers lorsque vous avez terminé avec:

find . -name "*.cux" -delete
emk2203
la source
La page de manuel de shnsplit répertorie ape comme format pris en charge, vous pouvez donc ignorer la conversion en flac avec ffmpeg et l'utiliser -o flacavec shnsplit à la place. Ne vous attendez pas à trouver un nom de base et un singe standard car le codec / conteneur d'autres codecs sans perte sont également utilisés, il est donc préférable de ne pas coder en dur et il serait préférable d'inclure toutes les étapes en une seule exécution de la commande find. metaflac --add-replay-gainserait également une bonne idée.
LiveWireBT
@LiveWireBT: Techniquement, vous avez raison. C'est pourquoi j'ai dit "deux solutions disponibles" dans un de mes commentaires. Cependant, vous devez télécharger la source des plugins pour le support ape et tta, installer g ++ et yasm et les compiler et les installer vous-même. Je suis allé avec la solution ffmpeg car c'est plus facile.
emk2203
2
Pour une version à commande unique: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"' _ {} \:
David Foerster
1
Oui. Je voudrais toujours exécuter une fois sans le commutateur de suppression d'abord pour m'assurer qu'il fonctionne comme prévu.
emk2203 du
1
Veuillez utiliser les instructions légèrement révisées. Je les ai essayés, ils travaillent.
emk2203