Come posso generare una playlist M3U (formato URL http) dal terminale?


11

Vorrei generare una playlist M3U per una directory contenente file mp3 sul mio server dal terminale. Dal momento che mi piacerebbe assicurarmi che tutti i giocatori saranno in grado di eseguire lo streaming di quei file, vorrei anteporre ogni voce di file con l'URL assoluto a quella directory, in questo modo:

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

Quindi purtroppo semplicemente ls -1 *.mp3 > play.m3unon è abbastanza. C'è un one-liner per raggiungere questo obiettivo?

Risposte:


8

Penso che il seguente one-liner dovrebbe funzionare:

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


7

Questa è la risposta di @chronitis con alcuni miglioramenti:

  • memorizza il nome del file nella playlist $ variabile per un uso successivo
  • cancellerà il file se esiste in precedenza
  • scrive il percorso completo del file sulla playlist

Il comando

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

Per giocare con mplayer anche dalla riga di comando

mplayer -playlist play.m3u

Non so perché qualcuno abbia votato in negativo questa risposta. Questa è l'unica soluzione che sembra funzionare immediatamente e dovrebbe essere accettata o almeno promossa. Grazie mille!
Geppettvs D'Constanzo,

cosa succede se voglio aggiungere più formati di file in questo comando?
Sumeet Deshmukh,

4

Inizialmente hai chiesto di creare ogni voce come una riga formattata per l'URL web. Oltre a sostituire il percorso locale con http: // ..., dovrai anche sostituire gli spazi con '% 20'. Quindi, lunga fila, ma ecco qui:

find /path/to/mp3s/ -name "*.mp3" | sed 's/ /%20/g' | sed 's|/path/to/mp3s/|http://www.server.com/serverpath/|g' > playlist.m3u

buona idea! l'utilizzo di un segno più (+) invece si tradurrebbe in un URL più leggibile però
3k-

2

Questo script bash può fare il lavoro:

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

Una versione un po 'più sviluppata. L'URL è codificato nello .m3ustile appropriato .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.