ฉันจะสร้างรายการเล่น M3U (รูปแบบ http URL) จากเทอร์มินัลได้อย่างไร


11

ฉันต้องการสร้างเพลย์ลิสต์ M3U สำหรับไดเรกทอรีที่มีไฟล์ mp3 บนเซิร์ฟเวอร์ของฉันจากเครื่องเทอร์มินัล เนื่องจากฉันต้องการให้แน่ใจว่าผู้เล่นทุกคนจะสามารถสตรีมไฟล์เหล่านั้นฉันต้องการนำหน้าแต่ละรายการไฟล์ด้วย URL ที่แน่นอนไปยังไดเรกทอรีนั้นเช่นนี้:

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

น่าเสียดายที่การทำเช่นls -1 *.mp3 > play.m3uนั้นไม่เพียงพอ มีหนึ่งซับเพื่อให้บรรลุนี้

คำตอบ:


8

ฉันคิดว่าหนึ่งซับต่อไปนี้ควรใช้งานได้:

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


7

นี่คือคำตอบ @ syncitis พร้อมการปรับปรุงบางอย่าง:

  • เก็บชื่อไฟล์ไว้ในตัวแปร $ playlist เพื่อใช้ในภายหลัง
  • จะลบไฟล์หากมีอยู่ก่อนหน้านี้
  • เขียนเส้นทางแบบเต็มของไฟล์ในเพลย์ลิสต์

คำสั่ง

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

หากต้องการเล่นกับ mplayer บนบรรทัดคำสั่งด้วย

mplayer -playlist play.m3u

ฉันไม่รู้ว่าทำไมมีใครบางคนลงคะแนนคำตอบนี้ นี่เป็นทางออกเดียวที่ดูเหมือนจะใช้ได้ทันทีและควรได้รับการยอมรับหรือได้รับการเลื่อนขั้นต่ำ ขอบคุณมาก!
Geppettvs D'Constanzo

ถ้าฉันต้องการเพิ่มไฟล์หลาย ๆ รูปแบบในคำสั่งนี้
Sumeet Deshmukh

4

คุณขอให้สร้างแต่ละรายการเป็นบรรทัดที่จัดรูปแบบ URL ของเว็บ นอกเหนือจากการเปลี่ยนเส้นทางท้องถิ่นด้วย http: // ... คุณจะต้องแทนที่ช่องว่างด้วย '% 20' ดังนั้นสายยาว แต่ที่นี่คุณไป:

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

ความคิดที่ดี! การใช้เครื่องหมายบวก (+) แทนจะส่งผลให้มี URL ที่อ่านได้มากขึ้น
3k-

2

สคริปต์ทุบตีนี้สามารถทำงานได้:

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

รุ่นที่พัฒนาขึ้นเล็กน้อย URL ถูกเข้ารหัสใน.m3uรูปแบบที่เหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.