M3U-Wiedergabelisten mit relativen Pfaden aktualisieren oder reparieren
Wer seine digitale Musiksammlung in Verzeichnissen und Dateien auf eigenen Datenträgern organisiert, der braucht für unabhängigen Partyspaß eigentlich nur noch ein paar nette Wiedergabelisten. Die lassen sich unter jedem Mediaplayer bequem zusammenstellen, filtern, sortieren und erweitern - doch das Format der Dateiverknüpfungen lässt oft zu wünschen übrig ...
Aus Gründen, die sich dem rationalen Verstand entziehen, speichert so mancher Mediaplayer die bewährten M3U-Wiedergabelisten nur noch mit absoluten Dateipfaden ab.
Absolute Pfade sind Verweise auf Dateien mit vollständiger Pfadbeschreibung. Also das ganze Geschrammel einschließlich Laufwerksbuchstabe, Userpfad, Eigene Dateien, Musikordner, Bandname, Album, usw.
Für denjenigen, der seine kostbare Musiksammlung auf externe Festplatten sichert, auch um den kostbaren Content gelegentlich auf anderen Geräten abzuspielen, sind absolute Dateipfade in Wiedergabelisten in etwa so sinnvoll, wie die sprichwörtliche Kette am Bein mit dicker Eisenkugel dran. Bei nächster Gelegenheit wird uns der liebevoll zusammengestellte Partymix mit seinen absoluten Pfaden um die Ohren fliegen. In aller Stille, sozusagen, denn kein einziger Titel wird gefunden, falls sich der Userpfad geändert oder der Wechseldatenträger, welch Überraschung, einen anderen Laufwerksbuchstaben oder Einhängepunkt verpasst bekommen hat...
Relative Pfade sind da bekanntlich flexibler. Sie definieren nur den Teil des Dateipfades, der gebraucht wird, um eine Mediendatei relativ zur Position der M3U-Datei wiederzufinden. Praktisch jeder Player kann damit etwas anfangen, zumal relative Pfade von Anfang an Teil der M3U-Spezifikationen waren. Wenn unsere Wiedergabelisten einen festen Platz innerhalb des Verzeichnisbaums der Musiksammlung haben, dann funktionieren sie immer mit relativen Pfaden - und alles zusammen bleibt schön portabel.
Das bedeutet: Wir können das Hauptverzeichnis der Sammlung ohne Weiteres umbenennen. Wir können den ganzen Verzeichnisbaum in einen anderen Pfad verpflanzen oder eine Kopie auf einem mobilen Speichermedium bereithalten, wie etwa einer externen Festplatte, einem USB-Stick, DVD-RW, Krypto-Container usw. Die mitgelieferten Wiedergabelisten bleiben mit ihren relativen Pfaden auf den verschiedensten Computern und Multimediageräten direkt spielbar.
Der nachträgliche Umbau einer Wiedergabeliste von absoluten zu relativen Pfaden wäre schon mit einem einfachen Texteditor möglich, erweist sich aber als mühsam und fehlerträchtig. Es ist auch nur selten mit einer einzigen "Suchen-und-Ersetzen"-Aktion getan, wie in weltfremden Klugscheißerforen hartnäckig behauptet ... In der Realität können Musikdateien nämlich verschoben oder ihr beinhaltender Ordner nachträglich umbenannt worden sein. Völlig identische Speicherorte können als unterschiedliche Pfade in einer und derselben Wiedergabeliste auftauchen, falls bei der Zusammenstellung symbolische Verknüpfungen im Spiel waren bzw. verschiedene Anwendungen darin herumgepfuscht haben. Viel Spaß beim manuellen Heraussuchen und Eintragen der korrekten relativen Pfade ...
Der nachträgliche Umbau von "einigen" (Hunderten) von Wiedergabelisten ... das ist dann aber doch eher was für die maschinelle Bearbeitung, für einen pfiffigen Algorithmus (Buzzword!!!).
Der sollte aber mal deutlich mehr können, als nur blind irgendwelche Pfade zusammenkürzen. Zum Beispiel verschollene Titel wiederfinden und kaputte Wiedergabelisten mit ungültig gewordenen Pfaden automatisch reparieren!
Das können die mir bekannten Shell- oder Python-Skripte nicht leisten. Doch am anderen Ende der Bequemlichkeitsskala lauert nur wieder einmal die tausendste Klickibunti-Spyware. Auch nicht so der Hit.
Ein einfaches, intelligentes und sicheres Konvertierungstool für M3U-Wiedergabelisten muss her!
Das Programm relm3u ist ein einfaches Kommandozeilentool für Linux-/Unix- bzw. Windows-Konsole.
Eingabe: Einziges Argument ist der Dateipfad zur M3U-Datei, die umgewandelt werden soll. Verarbeitung: Es werden systematisch Suchpfade erzeugt, um die gelisteten Musiktitel aufzuspüren. Gelingt das, werden die passenden relativen Pfade in die neue Wiedergabeliste eingetragen. Ausgabe: Backup der Originaldatei, neue M3U-Datei unter dem Originalnamen, ein paar Bildschirmmeldungen.
Suchmethoden
Primäre Methode: Der absolute Pfad zur Original-M3U, welcher mit der Kommandozeile übergeben wurde, ist der Bezugspfad.
Der absolute (oder relative) Pfad aus einem Eintrag der Wiedergabeliste ist der Dateipfad.
Das Programm setzt aus Bezugspfad und Dateipfad einen Suchpfad zusammen und probiert, ob die Mediendatei auf diesem Pfad gefunden wird.
Wenn das nicht klappt, wird der Dateipfad um eine Verzeichnisebene (bis zum nächsten Slash '/') gekürzt und anschließend ein neuer Zugriffsversuch mit diesem gekürzten Suchpfad gestartet.
Sollte der Dateipfad bis auf den Dateinamen "aufgebraucht" sein, ohne dass die betreffende Datei gefunden wurde, startet der ganze Ablauf noch einmal mit bis zu 5 relativen Sprüngen in übergeordnete Verzeichnisebenen ("Rückwärtspfad"). Dazu wird eine Anzahl von '../' zwischen Bezugspfad und Dateipfad in den Suchpfad eingefügt. Auf diese Weise werden zum Beispiel diejenigen Fälle abgedeckt, wo eine mit relativen Pfaden bestückte Wiedergabeliste in einen Unterordner verschoben wurde, wodurch ihre bisherigen relativen Pfade natürlich ungültig geworden sind.
Erweiterte Methode: Sollte die erste Suchmethode erfolglos sein, greift das Programm auf die allgemeine Dateisuche mit Konsolentools zurück. Unter Linux kommt das mächtige find zum Einsatz, unter Windows steht eine fast ebenso findige Suche mit dir (in einer speziellen Syntax) zur Verfügung. Beide durchforsten ausgehend vom Bezugspfad sämtliche Unterordner nach dem gesuchten Dateinamen und liefern im Erfolgsfall den ganzen Dateipfad zurück. Auch hier kann der Suchpfad durch Rückwärtssprünge erweitert werden, sodass sich in komplexen Verzeichnisstrukturen eine gründliche aber auch sehr langsame Suche ergibt. Naturgemäß kann die erweiterte Suche "falsche Treffer" liefern, wenn Dateinamen nicht besonders aussagekräftig waren, z. B. Titel in Album-Ordnern einfach nur "Track 1", "Track 2" usw. Aus diesem Grund verwendet relm3u immer erst das schnelle Suchverfahren auf Grundlage von bekannten Dateipfaden.
In dem Moment, wo das Programm mit einem Suchpfad die Mediendatei tatsächlich gefunden hat, kennt es den gültigen absoluten Pfad zur betreffenden Datei. ERFOLG!
Der vordere Teil des zusammengesetzten Suchpfades ist hier nun immer identisch mit dem Bezugspfad, also dem Pfad zur M3U-Datei. Dieser Teil kann jetzt wieder entfernt werden, und der verbleibende relative Pfad kommt als Eintrag in die neue Wiedergabeliste.
Nächste Suche mit dem nächsten Eintrag, bis alle Zeilen der Wiedergabeliste abgearbeitet sind.
Sonstige Eigenschaften
Erweiterte-M3U-Tags fliegen raus. Weil sie nahezu überflüssig sind. Es ist eigentlich immer besser, wenn der Mediaplayer nach dem Laden einer Wiedergabeliste allen Dateiverweisen nachgeht und sich die Meta-Daten direkt aus den einzelnen Dateien (ID3-tags) holt. Das dauert bei lokalen Audiodateien nur wenige Millisekunden und ist auch normalerweise Default-Einstellung. Auf diese Weise geht man sicher, dass alle im Player gelisteten Titel wirklich existieren und mit ihrem korrekten Titel und der korrekten Spieldauer angezeigt werden. Kurzum, relm3u erzeugt das reine M3U-Format ohne #EXTM3U-Schnickschnack.
Weblinks und Netzwerkprotokolle werden entfernt. Das Tool relm3u ist ausschließlich für lokale Ressourcen gedacht und sollte nicht auf Wiedergabelisten für Streaming oder Webradio angewendet werden. Inhalte und Wiedergabelisten müssen im selben Dateisystem vorliegen. Das kann aber selbstverständlich auch ein Krypto-Container oder NAS-Pfad sein.
Eingabe-/Ausgabeformate. Das Programm öffnet nur Quelldateien mit der Endung '.m3u' oder '.m3u8' und geht davon aus, dass es sich bei der geöffneten Datei um ein Textformat wie ASCII, ISO-8859 oder UTF-8 handelt. Allein die Zeilenvorschübe werden bei der Erzeugung der Backups und der neuen M3U-Dateien automatisch an den Systemstandard angepasst. Bei der Speicherung der neuen Wiedergabeliste werden Codierungen im URL-style ("percent-encoded") grundsätzlich auf ASCII/ISO-8859/UTF-8 und Pfadtrenner von Backslashes '\' auf normale Slashes '/' umcodiert.
Systemvoraussetzungen
Diese Kommandozeilenanwendung wurde mit dem gcc entwickelt und hat nur minimale Abhängigkeiten. Selbstverständlich wird kein Java, dotNET oder anderer Müll vorausgesetzt. Die ausführbare Datei für Linux ist sogar statisch (32 Bit) compiliert und damit besonders universell einsetzbar. Windows-Executables erzeuge ich in einer MinGW-Umgebung ebenfalls für 32 Bit. Diese Programme laufen im Allgemeinen auch im Kompatibilitätsmodus unter 64-Bit-Windows. Das Programm führt sämtliche Konversionen zeilenweise durch. Somit ist der Bedarf an Arbeitsspeicher minimal und es gibt kein Limit für die Länge der zu verarbeitenden Wiedergabelisten.
Anstelle einer separaten 'changelog' habe ich in den Kopfbereich des Quelltextes ein paar knappe Anmerkungen zu den letzten Änderungen und Fehlerkorrekturen eingetragen.
Installation
Einfach die ausführbare Datei relm3u[.exe] in ein Verzeichnis entpacken, wo wir als User Dateiausführungsrechte haben. Gegebenenfalls muss die Datei erst noch als "ausführbar" gekennzeichnet werden. Das Programm speichert nichts in seinem Arbeitsverzeichnis, dieses darf also schreibgeschützt sein.
Anwendung
Die Bildschirmmeldungen sind in englischer Sprache gehalten. Der Aufruf von relm3u ohne weitere Parameter zeigt eine Übersicht mit Versionsinfo und Hinweisen zur Syntax.
Grundlage aller Suchaktionen und damit das erste und wichtigste Argument an der Kommandozeile ist der Dateipfad zur M3U-Datei. (Oder: Gruppe von M3U-Dateien, wenn Jokersymbole verwendet werden. Oder: Pfad, der rekursiv nach allen vorhandenen M3U-Dateien durchforstet werden soll.)
Wird kein weiteres Argument an der Kommandozeile angegeben, arbeitet relm3u strikt im "Testmodus". Das Programm führt alle Suchvorgänge komplett aus und zeigt die Ergebnisse auf dem Bildschirm an, aber die Original-M3U wird nicht angetastet. Mit diesem Modus können wir also recht gefahrlos ausprobieren, ob und inwieweit sich eine Wiedergabeliste reparieren und "relativieren" lässt, und wie lange das ungefähr dauern wird.
Wenn wir aber Ernst machen wollen, müssen wir den Schalter '--serious' setzen. Nur wenn dieses zweite Argument in der Kommandozeile angegeben ist, nimmt relm3u tatsächlich Änderungen an den jeweiligen M3U-Dateien vor. Es wird ein Backup der alten Wiedergabeliste angefertigt und das Original wird mit der modifizierten Fassung überschrieben.
Mediendateien, auf die eine Wiedergabeliste verweist, müssen zur Laufzeit des Programms im Dateisystem auffindbar sein, logisch! Die Wiedergabeliste sollte sich innerhalb des Verzeichnisbaums der Mediensammlung auf einer nicht zu tiefen Verzeichnisebene befinden. Die Zahl der Rückwärtssprünge ist aus naheliegenden Gründen auf 5 Verzeichnisebenen begrenzt.
Die folgenden Beispiele gehen davon aus, dass wir uns mit dem Konsolenfenster im Arbeitsverzeichnis von relm3u befinden und dass der Stammordner der Mediensammlung "MUSIC" heißt.
Einzelkonvertierung: Wir haben eine M3U-Wiedergabeliste im bevorzugten Player zusammengestellt oder erweitert und an ihren endgültigen Bestimmungsort im Verzeichnisbaum der Mediensammlung gespeichert. Der dumme Player hat wieder absolute Pfade oder fehlerhafte relative Pfade daraus gemacht... relm3u, übernehmen Sie!
relm3u "C:\Dokumente und Einstellungen\Username\MUSIC\playlist.m3u" (Windows)
Gefundene Mediendateien werden mit dem erfolgreichen Suchpfad am Bildschirm gelistet, und zwar mit vorangestellter "1:" für das einfache oder "2:" für das erweiterte Suchverfahren. Nicht gefundene Dateien werden unter ihrem ursprünglichen Wiedergabelisten-Pfad mit einem vorangestellten "X:" am Bildschirm gelistet, aber nicht mehr in die neue Wiedergabeliste übernommen. Zum Schluss zeigt das Programm nochmal die Zahl der aufgespürten Dateien im Verhältnis zur Gesamtzahl der Einträge.
Mit dem Schalter --serious würde die Original-M3U mit den Änderungen überschrieben. In diesem Fall erhalten wir zusätzlich ein nummeriertes Backup von der ursprünglichen Wiedergabeliste. Wenn eine neue "relativierte" Wiedergabeliste wie gewünscht funktioniert, können wir die Backup-Datei bedenkenlos löschen.
Massenkonvertierung im selben Verzeichnis:
Enthält der Dateiname Platzhaltersymbole, so werden alle zum Muster passenden M3U-Dateien auf der angegebenen Verzeichnisebene abgearbeitet. Beispiel: "Verarbeite alle Wiedergabelisten, die mit '2019' anfangen!"
relm3u "C:\Dokumente und Einstellungen\Username\MUSIC\2019*.m3u"
./relm3u "/home/Username/Media/MUSIC/2019*.m3u"
Hinweis zum Setzen der Anführungszeichen: Der Pfad sollte immer in Anführungszeichen gesetzt werden, damit er unverfälscht an das Programm weitergegeben wird.
Massenkonvertierung über mehrere Unterverzeichnisse:
Wenn der angegebene Pfad in einem existierenden Ordner endet, also korrekt mit "/" oder "\" abgeschlossen ist, dann durchforstet relm3u dieses Verzeichnis, aber auch dessen sämtliche Unterverzeichnisse, nach Wiedergabelisten, um diese zu verarbeiten.
relm3u "C:\Dokumente und Einstellungen\Username\MUSIC\"
./relm3u "/home/Username/Media/MUSIC/"
Tipp: Zur bequemen Anwendung können wir eine Desktop-Verknüpfung einrichten. Darauf achten, dass nicht nur der Pfad mittels %f, sondern auch das Schalter-Argument -s an das Programm übergeben wird. So lässt sich das Tool komfortabel per Drag-and-drop nutzen!
Aktualisieren von Wiedergabelisten: Mit relm3u verlieren Umstrukturierungen in der Musiksammlung ihren Schrecken. Das Suchverfahren findet alle Mediendateien wieder, die unter dem bekannten Dateinamen in einem Bereich von +/- 5 Verzeichnisebenen (!) existieren. Groß-Kleinschreibung wird dabei ignoriert. Für alle wiedergefundenen Dateien ermittelt relm3u den korrekten Pfad relativ zur Position der Wiedergabeliste. Auf dieser Grundlage lassen sich Wiedergabelisten vollautomatisch reparieren, deren Pfade irgendwann ungültig geworden waren, sei es durch Änderung von Laufwerksbuchstabe/Einhängepunkt, Umbenennen von Ordnern oder Verschieben der Mediendateien in einen anderen Ordner.
Die Behandlung mit relm3u lässt sich beliebig oft wiederholen.
Dank User-Feedback noch besser geworden!
Es ist wie bei vielen meiner Projekte, die dann doch ein überraschendes Echo hervorriefen. Danksagungen aber vor allem konstruktive Kritik tragen dazu bei, meine Motivation aufrecht zu erhalten und ein grandioses Produkt noch besser zu machen.
Back-slashes: Aus den informativen Rückmeldungen von Usern, die sich mit brandneuen Windows-Versionen herumschlagen (müssen), weiß ich, dass das Thema "Backslashes vs Slashes" wohl eine unendliche (Microsoft-)Geschichte bleiben wird. Ich meine die nervige Tatsache, dass grafische Anwendungen (praktisch alles, was auf WinAPIs aufsetzt), schon seit Ewigkeiten auch Pfade verstehen, die mit "Vorwärts-Schrägstrichen" (= normale Slashes "/") geschrieben sind, während viele Utilities an der Konsole (cmd.exe, Powershell) nur mit den MS-DOS-typischen "Rückwärts-Schrägstrichen" (Backslashes "\") einwandfrei funktionieren. In einigen Fällen mag beides gehen, in anderen wiegt man sich in falscher Sicherheit. In diesem Zusammenhang habe ich die Behandlung der Dateipfade unter relm3u für Windows noch einmal gründlich überarbeitet. Jetzt bekommen 'dir', aber auch die Befehle für direkte Schreib- und Lesezugriffe ins Dateisystem, garantiert lupenreine Backslash-Pfade serviert.
Test-Modus: Wie schon erwähnt, wurde die Logik an der Kommandozeile zugunsten eines sicheren Default-Modus' geändert. Wenn relm3u tatsächlich Schreibzugriffe durchführen soll, muss ein bestimmtes zweites Argument vorhanden sein, ansonsten wird alles nur "simuliert". Ähnlich, wie bei manchem CD/DVD-Brennprogramm (die Älteren werden sich noch erinnern)...
Backup-Dateinamen: Das Namensschema habe ich zugunsten der Dateiendung ".bak" geändert. So lassen sich die Backup-Files unter verschiedenen Explorer-Umgebungen ganz bequem nach "Dateityp" gruppieren und dann ggf. in einem Rutsch löschen.
Sinnigere Syntax: Pfade mit Platzhaltersymbolen oder/und Leerzeichen müssen immer komplett in Anführungszeichen gesetzt werden, damit sie unverfälscht an relm3u übergeben werden (keine Auflösung durch den Kommandozeileninterpreter stattfindet). Die neue Regel ist auch einfacher zu merken.
Neues Feature "Massenkonvertierung über mehrere Unterverzeichnisse": Das wird aktiviert, indem man statt eines Dateipfades einen Ordner-Pfad angibt, der logischerweise mit Slash (oder Backslash) endet. Bekommt relm3u so einen Pfad angeboten, dann holt es aus dem angegebenen Ordner, aber auch aus allen Unterordnern sämtliche Dateien, die auf ".m3u" und ".m3u8" enden, und verarbeitet diese. Klassischer Fall übrigens für einen Testlauf im Testmodus. Es ist mit diesem Feature also möglich, sämtliche Wiedergabelisten im Pfad einer Musiksammlung in einem Rutsch zu bearbeiten. (Lieber erst im "unersten" Modus probieren!)
Apropos "Pfade": Das Programm akzeptiert jetzt auf der Windows-Konsole auch einen relativen Pfad zur M3U-Datei. Das kann Tipparbeit sparen, wenn wir die ausführbare Datei von relm3u im Stammordner der Musiksammlung liegen haben. Die sicherste Methode dürfte aber weiterhin die Angabe eines absoluten Pfades sein, was den Ort der M3U-Datei(en) betrifft. So sind beispielsweise Umleitungen mit Symlinks (Linux) nicht allzu ausführlich getestet.
Das Programm relm3u ist Open Source und Freeware im freiesten Sinne: Keine Garantien, keine Bedingungen.
Ich veröffentliche, weil ich mit meinen Projekten einen konkreten Beitrag für menschenfreundliche und transparente Technik leisten will und kann. Über jegliches Feedback oder Spenden freue ich mir einen Ast!