Wie kann ich vom Terminal aus eine M3U-Wiedergabeliste erstellen?

11

Ich möchte vom Terminal aus eine M3U-Wiedergabeliste für ein Verzeichnis mit MP3-Dateien auf meinem Server erstellen. Da ich sicherstellen möchte, dass jeder Player diese Dateien streamen kann, möchte ich jedem Dateieintrag die absolute URL zu diesem Verzeichnis voranstellen, wie folgt:

http://server.com/dir/file1.mp3
http://server.com/dir/file2.mp3
...

Leider ls -1 *.mp3 > play.m3ureicht es nicht aus, es einfach zu tun . Gibt es einen Einzeiler, um dies zu erreichen?

3k-
quelle

Antworten:

8

Ich denke, der folgende Einzeiler sollte funktionieren:

for f in *.mp3; do echo "http://..../$f" >> play.m3u; done

Chronitis
quelle
7

Dies ist die Antwort von @chronitis mit einigen Verbesserungen:

  • speichert den Dateinamen in der Variablen $ playlist zur späteren Verwendung
  • löscht die Datei, falls zuvor vorhanden
  • schreibt den vollständigen Pfad der Datei in die Wiedergabeliste

Der Befehl

playlist='play.m3u' ; if [ -f $playlist ]; then rm $playlist ; fi ; for f in *.mp3; do echo "$(pwd)/$f" >> "$playlist"; done

Um es auch mit mplayer in der Kommandozeile zu spielen

mplayer -playlist play.m3u
bistoco
quelle
Ich weiß nicht, warum jemand diese Antwort abgelehnt hat. Dies ist die einzige Lösung, die sofort funktioniert und akzeptiert oder zumindest beworben werden sollte. Vielen Dank!
Geppettvs D'Constanzo
Was ist, wenn ich diesem Befehl mehrere Dateiformate hinzufügen möchte?
Sumeet Deshmukh
4

Sie haben ursprünglich darum gebeten, jeden Eintrag als Web-URL-formatierte Zeile zu erstellen. Zusätzlich zum Ersetzen des lokalen Pfads durch http: // ... müssen Sie Leerzeichen durch '% 20' ersetzen. Also, lange Schlange, aber los geht's:

find /path/to/mp3s/ -name "*.mp3" | sed 's/ /%20/g' | sed 's|/path/to/mp3s/|http://www.server.com/serverpath/|g' > playlist.m3u
Jokono
quelle
gute Idee! Die Verwendung eines Pluszeichens (+) würde jedoch zu einer besser lesbaren URL führen
3k
2

Dieses Bash-Skript kann folgende Aufgaben ausführen:

rawurlencode() {
  local string="${1}"
  local strlen=${#string}
  local encoded=""
  local pos c o

  for (( pos=0 ; pos<strlen ; pos++ )); do
     c=${string:$pos:1}
     case "$c" in
        [-_.~a-zA-Z0-9] ) o="${c}" ;;
        * )               printf -v o '%%%02x' "'$c"
     esac
     encoded+="${o}"
  done
  echo "${encoded}"
}

rm -rf p.m3u
for f in *.mkv; do echo "#EXTINF:-1,SR:$f
  http://10.0.0.144/tvtmp/"$(rawurlencode $f) >> p.m3u; 
done
sed -i '1s/^/#EXTM3U\n/' p.m3u
rm -rf l.m3u
for f in *.mkv; do echo "#EXTINF:-1,SR:$f
  http://127.0.0.1/tvtmp/$f" >> l.m3u; 
done
sed -i '1s/^/#EXTM3U\n/' l.m3u

Eine etwas weiter entwickelte Version. Die URL ist im richtigen .m3uStil codiert .

krizoek
quelle