Frage

Ich bin auf der Suche nach einer Ressource in Python oder bash, die es leicht zu nehmen, zum Beispiel MP3-Datei X und m4a Datei Y machen und sagen: „X-Tags Y kopieren“.

Pythons „Mutagen“ Modul ist ideal für Tags im Allgemeinen Type untersuchen, aber es gibt kein abstraktes Konzept von „Künstlerfeld“, die verschiedenen Arten von Tag-umspannt; Ich möchte eine Bibliothek, die alle knifflig Bits behandelt und weiß Feldname Äquivalenzen. Für Dinge nicht alle Tag-Systeme zum Ausdruck bringen können, ich bin okay mit Informationen verloren gehen oder am besten erraten.

(Anwendungsfall: I kodieren lossless-Dateien in MP3, gehe dann die mp3s verwendet für das Hören Jeden Monat oder so, ich möchte in der Lage sein, die ‚Master‘ lossless zu aktualisieren Dateien mit dem, was Tag Änderungen, die ich an das gemacht habe. mp3s. ich bin müde unter Formate meine Zehen über die Umsetzung Unterschiede von Anstoßen.)

War es hilfreich?

Lösung

Ich brauchte genau dieses Ding, und auch ich wurde schnell klar, dass Mutagen nicht weit genug Abstraktion ist diese Art der Sache zu tun. Glücklicherweise mussten die Autoren von Mutagen es für ihre Media-Player QuodLibet .

hatte ich durch die QuodLibet Quelle zu graben, um herauszufinden, wie es zu benutzen, aber wenn ich es verstanden habe, schrieb ich ein Programm namens sequitur , die eine Befehlszeile äquivalent sein ExFalso (QuodLibet Tagging-Komponente). Es verwendet diese Abstraktion Mechanismus und bietet einige zusätzliche Abstraktion und Funktionalität.

Wenn Sie die Quelle prüfen wollen, hier ein Link auf die neueste Tarball . Das Paket ist tatsächlich ein Satz von drei Befehlszeilen-Skripte und ein Modul mit QL für die Anbindung. 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 implementieren tatsächlich Audio-Metadaten richtig, was bedeutet, dass alle Tags mehrere Werte unterstützen (es sei denn, der Dateityp es verbietet, die es nicht viele sind, dass machen). Also, tun so etwas wie:

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

Wird nicht ausgegeben eine einzelne Zeichenfolge, wird aber 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)

Andere Tipps

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 ist bereits abgeschlossen, aber jemand, der diese Seite über eine Suchmaschine findet könnte es nützlich finden.

Hier ist ein Beispiel-Code, ein Skript, das ich geschrieben habe zu kopieren Tags zwischen Dateien Quod Libet Musikformatklassen (nicht Mutagen ist!). Zu rennen es, tun nur copytags.py src1 dest1 src2 dest2 src3 dest3, und es wird die Tags in Sek1 kopieren DEST1 (nach allen vorhandenen Tags löschen auf DEST1!), und so weiter. Beachten Sie die schwarze Liste, die Sie zwicken sollte Ihre eigenen Vorlieben. Die Schwarze Liste wird nicht nur bestimmte Tags verhindern von kopiert werden, wird es verhindern, dass sie auch von in verprügelt zu werden die Zieldatei.

Um es klar, Quod Libet die formatunabhängige Tagging ist kein Merkmal von Mutagen; es ist oben auf Mutagen umgesetzt. Wenn Sie also formatunabhängige Tagging möchten, müssen Sie quodlibet.formats.MusicFile verwenden, um Ihre Dateien statt mutagen.File zu öffnen.

Der Code kann jetzt 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 war für mich, dass Quod Libet Musikformatklassen erwartet QL Konfiguration geladen werden, damit die config.init Linie in meinem Skript. Ohne dass, erhalte ich alle möglichen Fehler beim Laden oder Speichern Dateien.

Ich habe dieses Skript zum Kopieren zwischen flac getestet, ogg und mp3, mit „Standard“ Tags, sowie beliebigen Tags. Es hat funktioniert perfekt so weit.

Wie für den Grund , dass ich nicht QLLib verwendet habe, hat es nicht für mich zu arbeiten. Ich vermute, es war die gleichen config-Fehler bekommt, wie ich war, war aber stumm sie zu ignorieren und einfach Fehler-Tags zu schreiben.

Sie können nur eine einfache Anwendung mit einer Abbildung jedes Tag-Namen in jedem Format zu einem „abstrakten Tag“ Art, schreiben und dann ist es einfach von einem zum anderen zu konvertieren. Sie müssen nicht einmal alle verfügbaren Typen kennen -. Nur diejenigen, die Sie interessiert sind

Es scheint mir wie ein Wochenende-Projekt Art von Zeit-Investition, möglicherweise weniger. Viel Spaß, und ich werde mich nicht, einen Blick auf Ihre Implementierung zu nehmen und sogar mit ihm -. Wenn Sie es nicht natürlich Loslassen dagegen :-)

Es gibt auch tagpy, die gut zu funktionieren scheint.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top