2009-03-30 16 views
13

Ich bin auf der Suche nach einer Ressource in Python oder Bash, die es einfach machen wird, zum Beispiel MP3-Datei X und M4a-Datei Y und sagen "X-Tags kopieren zu Y ".Abstraktion der Konvertierung zwischen ID3-Tags, M4A-Tags, Flac-Tags

Das "mutagen" -Modul von Python eignet sich hervorragend zur allgemeinen Manipulation von Tags, aber es gibt kein abstraktes Konzept von "artist field", das sich über verschiedene Arten von Tags erstreckt; Ich möchte eine Bibliothek, die alle fiddly Bits behandelt und Feldnamen Äquivalenzen kennt. Für Dinge, die nicht alle Tag-Systeme ausdrücken können, bin ich damit einverstanden, dass Informationen verloren gehen oder am besten erraten werden.

(Anwendungsfall: Ich kodiere verlustfreie Dateien zu mp3, dann benutze die mp3s zum Anhören. Jeden Monat möchte ich in der Lage sein, die verlustfreien "Master" -Dateien mit allen Tag-Änderungen zu aktualisieren, die ich gemacht habe Ich bin es leid, meine Zehen auf Implementierungsunterschiede zwischen Formaten zu stopfen.)

+0

Sie können immer einen Player verwenden, der solche Dinge schon leicht macht, wie zB foobar2000. Die Funktion "Tags kopieren" übernimmt genau das, unabhängig vom Format. – tzot

Antwort

8

Ich brauchte genau dieses Ding, und auch ich erkannte schnell, dass Mutagen keine entfernte Abstraktion ist, um so etwas zu tun. Zum Glück brauchten die Autoren von mutagen es für ihren Media Player QuodLibet.

hatte ich durch die QuodLibet Quelle zu graben, um herauszufinden, wie es zu benutzen, aber sobald ich es verstanden, schrieb ich ein Programm namens sequitur, die eine Befehlszeile entspricht ExFalso (QuodLibet Tagging sein soll Komponente). Es verwendet diesen Abstraktionsmechanismus und bietet zusätzliche Abstraktion und Funktionalität.

Wenn Sie die Quelle auschecken möchten, here's a link to the latest tarball. Das Paket besteht eigentlich aus drei Befehlszeilenskripts und einem Modul für die Anbindung an QL. Wenn Sie die ganze Sache installieren möchten, können Sie verwenden:

easy_install QLCLI 

Eine Sache im Auge zu behalten, um exfalso/Quodlibet (und folglich sequitur) ist, dass sie tatsächlich Audio-Metadaten implementieren richtig, was bedeutet, dass alle Tags Unterstützung mehrere Werte (außer der Dateityp verbietet es, was nicht viele tun). Also, tun so etwas wie:

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

nicht ausgegeben eine einzelne Zeichenfolge, sondern Ausgabe eine Liste von Zeichenketten wie:

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

Die Art und Weise Sie es verwenden könnte Tags zu kopieren wäre so etwas wie:

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) 
+0

Jeremy Cantrell quod-cli Bibliothek ist jetzt auf Github an: https://github.com/jmcantrell/quodlibet-cli – ade

0

Sie können einfach eine einfache App mit einer Zuordnung von jedem Tag-Namen in jedem Format zu einem "abstrakten Tag" -Typ schreiben und dann sein einfach von einem zum anderen zu konvertieren. Sie müssen nicht alle verfügbaren Typen kennen - nur diejenigen, die Sie interessieren.

Scheint mir wie ein Wochenend-Projekt Art von Zeitinvestition, möglicherweise weniger. Viel Spaß, und es macht mir nichts aus, einen Blick auf Ihre Implementierung zu werfen und sie sogar zu benutzen - wenn es Ihnen nichts ausmacht, sie natürlich zu veröffentlichen :-).

0

Es gibt auch tagpy, das scheint gut zu funktionieren.

2

Hier ist ein Beispiel Code, ein Skript, das ich schrieb, um Tags zwischen Dateien mit Quod Libet Musikformat Klassen zu kopieren (nicht mutagen!). Um es zu tun, tun Sie einfach copytags.py src1 dest1 src2 dest2 src3 dest3, und es wird die Tags in sec1 zu dest1 kopieren (nach dem Löschen vorhandener Tags auf dest1!), Und so weiter.Beachten Sie die Blacklist, die Sie auf Ihrer eigenen Präferenz anpassen sollten. Die Blacklist verhindert nicht nur, dass bestimmte Tags kopiert werden, sondern verhindert auch, dass sie in der Zieldatei geplottert werden.

Um klar zu sein, Quod Libet Format-agnostic Tagging ist keine Eigenschaft von Mutagen; Es ist implementiert oben auf mutagen. Wenn Sie also formatunabhängiges Tagging verwenden möchten, müssen Sie quodlibet.formats.MusicFile verwenden, um Ihre Dateien anstelle von mutagen.File zu öffnen.

-Code kann nun hier: https://github.com/DarwinAwardWinner/copytags

Wenn Sie auch Umcodierung zur gleichen Zeit tun wollen, verwenden Sie diese: https://github.com/DarwinAwardWinner/transfercoder

Ein kritisches Detail für mich war, dass Quod Libet Musikformatklassen erwarten QL-Konfiguration geladen werden, daher die config.init Zeile in meinem Skript. Ansonsten bekomme ich alle möglichen Fehler beim Laden oder Speichern von Dateien.

Ich habe dieses Skript getestet zwischen flac, ogg und mp3, mit "Standard" Tags, sowie beliebigen Tags zu kopieren. Es hat bisher perfekt funktioniert.

Wie für die Grund, dass ich QLLib nicht verwendet habe, hat es nicht für mich funktioniert. Ich vermute, dass es die gleichen config-bezogenen Fehler wie ich bekam, aber ignorierte sie still und scheiterte einfach, Tags zu schreiben.

+0

Und vorhergesagt, wie durch Murphys Gesetz, begann QLLib perfekt für mich zu arbeiten, sobald ich dieses Skript fertig geschrieben . –

+0

Dies funktionierte für mich, aus den vielen Lösungen, die ich probiert habe. Vielen Dank! – e40

2

Ich habe ein Bash-Skript, das genau das tut, atwat-tagger. Es unterstützt flac, mp3, ogg und mp4 Dateien.

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

Ich weiß, dass Ihr Projekt bereits fertig ist, aber jemand, der diese Seite über eine Suchmaschine findet, könnte es nützlich finden.

+0

Willkommen bei StackOverflow! – bgw

Verwandte Themen