Як я можу генерувати список відтворення 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

Це відповідь @chronitis з деякими вдосконаленнями:

  • зберігає ім'я файлу у змінному списку відтворення $ для подальшого використання
  • видалить файл, якщо він існував раніше
  • записує повний шлях файлу у список відтворення

Команда

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

Цей скрипт bash може виконати цю роботу:

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стилі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.