Question

Je suis à la recherche d'une ressource en python ou bash qui le rendre facile à prendre, par exemple, un fichier mp3 X et fichier m4a Y et dire « copier les balises de X à Y ».

module « mutagene » Python est idéal pour les manupulating balises en général, mais il n'y a pas de concept abstrait de « champ artiste » qui couvre différents types de variables; Je veux une bibliothèque qui gère tous les bits fiddly et connaît fieldName équivalences. Pour que les choses ne sont pas tous les systèmes de balises peuvent exprimer, je suis d'accord avec l'information étant perdu ou mieux deviné.

(Exemple d'utilisation: J'encoder des fichiers sans perte mp3, puis allez utiliser les fichiers MP3 pour écouter chaque mois, je veux être en mesure de mettre à jour les fichiers sans perte « maîtres » avec tous les changements tag que j'ai fait au. mp3s. Je suis fatigué de stubbing mes orteils sur les différences de mise en œuvre entre les formats.)

Était-ce utile?

La solution

Je avais besoin de cette chose exacte, et moi aussi, je suis vite rendu compte que Mutagène est pas assez lointaine abstraction pour faire ce genre de chose. Heureusement, les auteurs de ce Mutagène avaient besoin pour leur lecteur multimédia QuodLibet .

Je devais creuser à travers la source QuodLibet pour savoir comment l'utiliser, mais une fois que je l'ai compris, je l'ai écrit un utilitaire appelé sequitur qui est destiné à être une ligne de commande équivalent à exfalso (composante de marquage de QuodLibet). Il utilise ce mécanisme d'abstraction et fournit une abstraction ajouté et la fonctionnalité.

Si vous voulez vérifier la source, est ici un lien vers le dernier tarball . Le paquet est en fait un ensemble de trois scripts de ligne de commande et un module d'interface avec QL. Si vous voulez installer la chose, vous pouvez utiliser:

easy_install QLCLI

Une chose à garder à l'esprit au sujet exfalso / quodlibet (et par conséquent sequitur) est qu'ils mettent effectivement en œuvre les métadonnées audio correctement, ce qui signifie que toutes les balises prennent en charge plusieurs valeurs (sauf si le type de fichier interdit, ce qui il n'y a pas beaucoup qui faire). Donc, faire quelque chose comme:

print qllib.AudioFile('foo.mp3')['artist']

ne sortira pas une seule chaîne, mais affichera une liste de chaînes comme:

[u'The First Artist', u'The Second Artist']

La façon dont vous pouvez l'utiliser pour copier des étiquettes serait quelque chose comme:

import os.path
import qllib  # this is the module that comes with QLCLI

def update_tags(mp3_fn, flac_fn):
    mp3 = qllib.AudioFile(mp3_fn)
    flac = qllib.AudioFile(flac_fn)
    # you can iterate over the tag names
    # they will be the same for all file types
    for tag_name in mp3:
        flac[tag_name] = mp3[tag_name]
    flac.write()

mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3']

for mp3_fn in mp3_filenames:
    flac_fn = os.path.splitext(mp3_fn)[0] + '.flac'
    if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn):
        update_tags(mp3_fn, flac_fn)

Autres conseils

J'ai un script bash qui fait exactement cela, atwat-tagger . Il prend en charge flac, mp3, les fichiers ogg et mp4.

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`

Je sais que votre projet est déjà terminé, mais quelqu'un qui trouve cette page grâce à un moteur de recherche peut trouver utile.

Voici quelques exemples de code, un script que j'ai écrit pour copier les étiquettes entre fichiers en utilisant les catégories de format de musique de Quod Libet (pas de mutagene pour!). Courir il, il suffit de copytags.py src1 dest1 src2 dest2 src3 dest3, et copiera les balises dans SEC1 à dest1 (après la suppression de toutes les balises existantes sur dest1!), et ainsi de suite. Notez la liste noire, que vous devez modifier à vos préférences. La liste noire empêchera non seulement certaines balises d'être copié, il sera également de les empêcher d'être mis à mal dans le fichier de destination.

Pour le marquage clair, format agnostique Quod Libet est pas une caractéristique de Mutagène; il est mis en œuvre au-dessus de Mutagène. Donc, si vous voulez le marquage format agnostique, vous devez utiliser quodlibet.formats.MusicFile pour ouvrir vos fichiers au lieu de mutagen.File.

Le code peut maintenant être trouvé ici: https://github.com/DarwinAwardWinner/copytags

Si vous voulez aussi faire transcoder en même temps, utilisez ceci: https://github.com/ DarwinAwardWinner / transfercoder

Un détail important pour moi était que les cours de format de musique de Quod Libet attendre la configuration de QL à charger, d'où la ligne de config.init dans mon scénario. Sans cela, je reçois toutes sortes d'erreurs lors du chargement ou de l'enregistrement fichiers.

Je l'ai testé ce script pour la copie entre flac, ogg et mp3, avec des étiquettes « standard », ainsi que des balises arbitraires. Il a parfaitement fonctionné jusqu'à présent.

Quant à la raison que je n'ai pas utilisé QLLib, il ne fonctionne pas pour moi. Je pense qu'il obtenait les mêmes erreurs liées config, comme je l'étais, mais était en silence les ignorer et simplement défaut d'écrire les mots clés.

Vous pouvez simplement écrire une application simple avec une cartographie de chaque nom de la balise dans chaque format à un type « tag abstrait », et il est facile de convertir un à l'autre. Vous ne devez même pas connaître tous les types disponibles -. Seulement ceux que vous êtes intéressé par

Il me semble comme un type week-end-projet d'investissement en temps, peut-être moins. Amusez-vous, et je ne me dérange pas de prendre un coup d'oeil à votre mise en œuvre et même l'utiliser -. Si vous ne me dérangerait pas de le relâcher bien sûr :-)

Il y a aussi tagpy, qui semble bien fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top