Bagaimana saya bisa menghasilkan daftar putar M3U (format URL http) dari terminal?

11

Saya ingin membuat daftar putar M3U untuk direktori yang berisi file mp3 di server saya dari terminal. Karena saya ingin memastikan bahwa setiap pemain dapat melakukan streaming file-file itu saya ingin mengawali setiap entri file dengan URL absolut ke direktori itu, seperti ini:

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

Jadi sayangnya hanya melakukan ls -1 *.mp3 > play.m3uitu tidak cukup. Apakah ada satu garis untuk mencapai ini?

3k-
sumber

Jawaban:

8

Saya pikir satu-liner berikut harus bekerja:

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

kronis
sumber
7

Ini adalah jawaban @ sinkitis dengan beberapa peningkatan:

  • menyimpan nama file pada variabel $ playlist untuk digunakan nanti
  • akan menghapus file jika ada sebelumnya
  • menulis path lengkap file pada daftar putar

Perintah

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

Untuk memainkannya dengan mplayer di baris perintah juga

mplayer -playlist play.m3u
bistoco
sumber
Saya tidak tahu mengapa seseorang menurunkan jawaban ini. Ini adalah satu-satunya solusi yang tampaknya berfungsi dengan baik dan harus diterima atau setidaknya dipromosikan. Terima kasih banyak!
Geppettvs D'Constanzo
bagaimana jika saya ingin menambahkan beberapa format file ke dalam perintah ini?
Sumeet Deshmukh
4

Anda awalnya diminta untuk membuat setiap entri sebagai baris yang diformat URL web. Selain mengganti jalur lokal dengan http: // ..., Anda juga harus mengganti spasi dengan '% 20'. Jadi, antrian, tapi ini dia:

find /path/to/mp3s/ -name "*.mp3" | sed 's/ /%20/g' | sed 's|/path/to/mp3s/|http://www.server.com/serverpath/|g' > playlist.m3u
jokono
sumber
ide bagus! menggunakan tanda tambah (+) sebagai gantinya akan menghasilkan URL yang lebih mudah dibaca
3k-
2

Skrip bash ini dapat melakukan pekerjaan:

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

Versi yang sedikit lebih maju. URL dikodekan dengan .m3ugaya yang tepat .

krizoek
sumber