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?

Antworten:


8

Ich denke, der folgende Einzeiler sollte funktionieren:

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


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

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

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.