Möchtet ihr Wiedergabelisten in die Audio Station importieren, werdet ihr die Menüs vergeblich nach einer entsprechenden Option absuchen. Dabei geht das eigentlich ganz einfach. Einige Stolpersteine muss man aber dennoch beachten. In diesem Artikel erkläre ich nicht nur wie es geht, sondern gebe euch noch ein kleines Hilfsmittel an die Hand.
Unterstützte Formate
Die Audio Station unterstützt Wiedergabelisten in den Formaten M3U, PLS und WPL. Liegt eure Playlist in einem der Formate vor habt ihr schon beinahe gewonnen. M3U ist eines der verbreiteteren Formate. Habt ihr die Playlist in einer Audio Software oder einer eigenen Playlist-Software erstellt, könnt ihr die Playlist meist in verschiedenen Formaten exportieren. Liegt eure Liste in einem Format vor, das die Audio Station nicht unterstützt, musst ihr versuchen das Format per Software umzuwandeln.
Die Wiedergabeliste importieren
Um eine Wiedergabeliste zum “importieren” reicht es einfach, sie an den richtigen Ort zu kopieren. Die Audio Station kennt – neben den Smart-Listen – zwei Arten von Wiedergabelisten, Gruppen-Wiedergabelisten und persönliche Wiedergabelisten. Je nachdem ob ihr eure Wiedergabeliste für euch behalten wollt oder für alle Nutzer der Audio Station zugänglich machen wollt, müsst ihr die Liste an einen anderen Ort kopieren.
Für Gruppen-Wiedergabelisten kopiert ihr die Datei einfach in den /music Ordner eurer DiskStation.
/volumeX/music
Für persönliche Wiedergabelisten kopiert ihr die Datei in den Playlist-Ordner eurer persönlichen Audio Station (dazu muss diese aktiviert sein).
/volumeX/homes/<User>/music/playlists
Pfade anpassen
Das wäre alles so einfach, gäbe es da nicht ein Problem: In der Wiedergabeliste sind die einzelnen Lieder mit ihren Dateipfaden eingetragen und da ihr die Wiedergabeliste nicht auf eurer DiskStation erstellt habt, sind dort die Pfade eingetragen, unter denen die Lieder auf eurem Rechner liegen, z.B. M:\Musik\Queen\...
anstatt /volume1/music/Queen/...
.
Das Skript anlegen
Das lässt sich aber leicht beheben. Ich habe dazu ein Skript erstellt dass die Pfade ersetzt. Damit ihr das Skript nutzen könnt geht ihr folgendermaßen vor:
- Ladet das Skript hier herunter.
- Kopiert das Skript auf eure DiskStation. Alternativ könnt ihr das Skript über die Kommandozeile selbst anlegen, den Inhalt findet ihr weiter unten.
Achtung
Legt ihr Skripte selbst an, dann immer über den Texteditor der Kommandozeile (z.B. vi). Verwendet nie den Texteditor der DS oder einen Editor auf eurem Rechner und anschließendem Upload der Datei auf die DS. Dabei werden – gerade unter Windows – Zeilenumbrüche verwendet, die dann von der Kommandozeile nicht verarbeitet werden können. Auch die Formatierung einzelner Zeichen (z.B. einfache und doppelte Anführungszeichen) kann auf der Kommandozeile zu Problemen führen. Kopiert ihr Skripte z.B. hier aus dem Blog löscht am besten im Editor der Kommandozeile alle Anführungszeichen und fügt sie nochmal selbst ein.
- Speichert die Datei. Ihr könnt jetzt mit dem Skript die Pfade eurer Playlist anpassen.
Das Skript nutzen
Das Skript führt ihr auf der Kommandozeile (z.B. über PuTTY) aus und gebt dabei die gewünschten Angaben als Parameter an.
- Aktiviert unter DSM > Systemsteuerung > Terminal & SNMP den SSH-Zugriff.
- Verbindet euch via PuTTY mit eurer DiskStation.
- Wechselt mit
cd
in den Ordner, in dem das Skript liegt. und führt das Skript aus:
sh PlaylistReplacer.sh <PlaylistDatei> <OriginalPfad> <PfadAufDerDS> sh PlaylistReplacer-sh /volume1/music/MyMusic.m3u M:/Musik /volume1/music
Wichtig
Verwendet bei der Angabe des Originalpfads Slashes ( / ) auch wenn Windowspfade Backslashes ( \ ) nutzen. Diese werden in Unix für etwas anderes verwendet und der Befehl zum Suchen und Ersetzen würde den Pfad nicht verarbeiten können. Das Skript wandelt alle Backslashes in der Playlist-Datei selbst um.
- Wechselt ihr vorher nicht in den Ordner, in dem das Skript liegt, müsst ihr den Pfad zum Skript beim Aufruf mit angeben:
sh /volume...../PlaylistReplacer.sh
- Liegt die Playlist-Datei im Ordner, in dem Ihr euch befindet, reicht die Angabe des Dateinamen, ansonsten müsst ihr auch hier den gesamten Pfad angeben.
Das Skript anpassen
Das Skript ist recht klein und einfach:
#!/bin/bash FILE=$1 OLD_PATH=$2 NEW_PATH=$3 #Hier werden alle Backslashes in der Datei in Slashes umgewandelt und der veränderte Inhalt in die Datei temp gespeichert. sed 's!\\!/!g' "${FILE}" > temp #Hier werden dann alle Vorkommen von OLD_PATH mit NEW_PATH ersetzt. Der Inhalt wird dann in die ursprüngliche Datei geschrieben. sed s!${OLD_PATH}!${NEW_PATH}!g temp > "${FILE}" #Die temporäre Datei wird wieder gelöscht. Ja mir ist bewusst, dass es auch ohne temporäre Datei ginge aber das Skript war nur eine kurze Bastelarbeit und nachdem es funktioniert hat habe ich es gelassen, wie es ist. rm temp
Das Skript überschreibt die Originaldatei, wollt ihr das nicht, fügt ein NEW_FILE=$4
in Zeile 6 ein und in Zeile 10 ersetzt ihr FILE
durch NEW_FILE
. Dann könnt ihr beim Aufruf des Skripts als vierten Parameter einen neuen Dateinamen angeben. Oder ihr ersetzt "${FILE}"
durch einen Dateinamen (z.B. output.m3u) und benennt die Datei dann selbst um.
Hallo Andreas,
danke für deinen Kommentar und natürlich auch für deinen Ursprungsbeitrag! Ich habe es mir nochmal angeschaut und eine Lösung gefunden. Das Problem in meinem Skript war tatsächlich, dass ich meine Eingangspfade in doppelte Anführungszeichen gesetzt habe, um Leerzeichen darin zu tolerieren:
OLD_PATH=”D:/Benutzer/xyz/Eigene Musik”
NEW_PATH=”..”
Das hat dann allerdings das zweite sed-Kommando nicht akzeptiert, bis ich es auch in doppelte Anführungszeichen gesetzt habe:
sed “s+${OLD_PATH}+${NEW_PATH}+g” temp > “${FILE}”
Außerdem habe ich im Skript noch eine Zeile ergänzt, die aus der von iTunes kommenden .m3u Datei Zeilen mit #EXTINF am Anfang löschen und habe das Ganze umgebaut, sodass die Variablen im Skript definiert werden und das ganze in einer for-Schleife durch alle Dateien läuft. So sieht das gesamte Skript dann aus:
#!/bin/bash
# Quelle: https://blog.viking-studios.net/audio-station-wiedergabelisten-importieren/
# Läuft in einer for Schleife durch alle .m3u Dateien in dem Ordner in dem das Skript ausgeführt wird.
for FILE in *.m3u; do
#ACHTUNG: Bei den Pfaden \ in / umwandeln und so eintragen!
OLD_PATH=”D:/Benutzer/Paddy/Eigene Musik”
NEW_PATH=”..”
echo “Input file: ${FILE}”
echo “Replace path: $OLD_PATH”
echo “With path $NEW_PATH”
#Hier werden alle Backslashes in der Datei in Slashes umgewandelt und der veränderte Inhalt in die Datei temp gespeichert.
sed ‘s!\\!/!g’ “${FILE}” > temp
#Hier werden dann alle Vorkommen von OLD_PATH mit NEW_PATH ersetzt. Der Inhalt wird dann in die ursprüngliche Datei geschrieben.
sed “s+${OLD_PATH}+${NEW_PATH}+g” temp > “${FILE}”
#Hier werden alle Zeilen beginnend mit #EXTINF gelöscht und in temp zwischengespeichert.
sed “/^#EXTINF/d” “${FILE}” > temp
#Speichern des Inhalts von temp in FILE
cp temp “${FILE}”
echo “Removing temp file”
rm temp
done;
Hey,
das Skript hat bei mir leider nicht funktioniert..
Die .m3u Datei ist nach Ausführung des Skripts einfach komplett leer.
Der Fehler, der kommt ist:
sed: -e expression #1, char 26: unterminated `s’ command
Die Zeile:
sed s!${OLD_PATH}!${NEW_PATH}!g temp > “${FILE}”
löscht wohl den Inhalt meiner Datei.
Hast du eine Idee was ich falsch mache?
Ich habe die Pfade in Anführungszeichen gesetzt, um Leerzeichen im Pfad lesbar zu machen.
Hallo Patrick
Es kann sein, dass das Programm, mit dem du die Liste ursprünglich erstellst, diese anders formatiert.
Mein Script ist nicht besonders intelligent, schaut das Format anders aus, läufts natürlich nicht.
Wenn du mir mal deine Ausgangsplaylist schickst/hier reinkopierst kann ichs mir mal anschauen.
Grüße
Andreas
Hallo Andreas,
danke für deinen Kommentar und natürlich auch für deinen Ursprungsbeitrag! Ich habe es mir nochmal angeschaut und eine Lösung gefunden. Das Problem in meinem Skript war tatsächlich, dass ich meine Eingangspfade in doppelte Anführungszeichen gesetzt habe, um Leerzeichen darin zu tolerieren:
OLD_PATH=“D:/Benutzer/xyz/Eigene Musik“
NEW_PATH=“..“
Das hat dann allerdings das zweite sed-Kommando nicht akzeptiert, bis ich es auch in doppelte Anführungszeichen gesetzt habe:
sed „s+${OLD_PATH}+${NEW_PATH}+g“ temp > „${FILE}“
Außerdem habe ich im Skript noch eine Zeile ergänzt, die aus der von iTunes kommenden .m3u Datei Zeilen mit #EXTINF am Anfang löschen und habe das Ganze umgebaut, sodass die Variablen im Skript definiert werden und das ganze in einer for-Schleife durch alle Dateien läuft. So sieht das gesamte Skript dann aus:
#!/bin/bash
# Quelle: https://blog.viking-studios.net/audio-station-wiedergabelisten-importieren/
# Läuft in einer for Schleife durch alle .m3u Dateien in dem Ordner in dem das Skript ausgeführt wird.
for FILE in *.m3u; do
#ACHTUNG: Bei den Pfaden \ in / umwandeln und so eintragen!
OLD_PATH=“D:/Benutzer/Paddy/Eigene Musik“
NEW_PATH=“..“
echo „Input file: ${FILE}“
echo „Replace path: $OLD_PATH“
echo „With path $NEW_PATH“
#Hier werden alle Backslashes in der Datei in Slashes umgewandelt und der veränderte Inhalt in die Datei temp gespeichert.
sed ’s!\\!/!g‘ „${FILE}“ > temp
#Hier werden dann alle Vorkommen von OLD_PATH mit NEW_PATH ersetzt. Der Inhalt wird dann in die ursprüngliche Datei geschrieben.
sed „s+${OLD_PATH}+${NEW_PATH}+g“ temp > „${FILE}“
#Hier werden alle Zeilen beginnend mit #EXTINF gelöscht und in temp zwischengespeichert.
sed „/^#EXTINF/d“ „${FILE}“ > temp
#Speichern des Inhalts von temp in FILE
cp temp „${FILE}“
echo „Removing temp file“
rm temp
done;