¿Cómo puedo generar una lista de reproducción M3U (formato http URL) desde el terminal?

11

Me gustaría generar una lista de reproducción M3U para un directorio que contiene archivos mp3 en mi servidor desde el terminal. Dado que me gustaría asegurarme de que todos los reproductores puedan transmitir esos archivos, me gustaría prefijar cada entrada de archivo con la URL absoluta a ese directorio, de esta manera:

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

Entonces, desafortunadamente, simplemente hacer ls -1 *.mp3 > play.m3uno es suficiente. ¿Hay una línea para lograr esto?

3k-
fuente

Respuestas:

8

Creo que el siguiente one-liner debería funcionar:

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

cronitis
fuente
7

Esta es la respuesta @chronitis con algunas mejoras:

  • almacena el nombre del archivo en la lista de reproducción variable $ para su uso posterior
  • eliminará el archivo si existe previamente
  • escribe la ruta completa del archivo en la lista de reproducción

El comando

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

Para jugar con mplayer en la línea de comando también

mplayer -playlist play.m3u
bistoco
fuente
No sé por qué alguien rechazó esta respuesta. Esta es la única solución que parece funcionar directamente y debe ser aceptada o al menos promovida. ¡Muchas gracias!
Geppettvs D'Constanzo
¿Qué pasa si quiero agregar múltiples formatos de archivo a este comando?
Sumeet Deshmukh
4

Originalmente solicitó crear cada entrada como una línea con formato de URL web. Además de reemplazar la ruta local con http: // ..., también deberá reemplazar los espacios con '% 20'. Entonces, larga cola, pero aquí tienes:

find /path/to/mp3s/ -name "*.mp3" | sed 's/ /%20/g' | sed 's|/path/to/mp3s/|http://www.server.com/serverpath/|g' > playlist.m3u
jokono
fuente
¡buena idea! sin embargo
3k-
2

Este script bash puede hacer el trabajo:

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 versión un poco más desarrollada. La URL está codificada en el .m3uestilo adecuado .

krizoek
fuente