it-swarm.com.de

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

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:

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

Also reicht es leider nicht, einfach ls -1 *.mp3 > play.m3u zu machen. Gibt es einen Einzeiler, um dies zu erreichen?

11
3k-

Ich denke, der folgende Einzeiler sollte funktionieren:

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

8
chronitis

Dies ist @chronitis Antwort mit einigen Verbesserungen:

  • speichert den Dateinamen zur späteren Verwendung in der Variablen $ playlist
  • löscht die Datei, falls sie vorher existiert
  • 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 mit mplayer auf der Kommandozeile auch zu spielen

mplayer -playlist play.m3u
6
bistoco

Sie haben ursprünglich aufgefordert, jeden Eintrag als eine mit einer Web-URL formatierte Zeile zu erstellen. Zusätzlich zum Ersetzen des lokalen Pfads durch http: // ... müssen Sie auch 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
4
jokono

Dieses Bash-Skript erledigt die Aufgabe:

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 .m3u -Stil codiert.

2
krizoek