Как я могу генерировать плей-лист M3U от терминала?

Я хотел бы генерировать плей-лист M3U для каталога, содержащего mp3 файлы на моем сервере от терминала. Так как я хотел бы удостовериться, что каждый плеер сможет передать те файлы потоком, я хотел бы снабдить префиксом каждую запись файла абсолютный URL к тому каталогу, как это:

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

Таким образом, к сожалению, просто выполнение ls -1 *.mp3 > play.m3u не достаточно. Существует ли острота для достижения этого?

11
задан 22 February 2013 в 04:56

4 ответа

Я думаю, что следующая острота должна работать:

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

8
ответ дан 23 November 2019 в 03:57

Это - ответ @chronitis с некоторыми улучшениями:

  • хранит имя файла на переменном $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
6
ответ дан 23 November 2019 в 03:57

Вы первоначально попросили создавать каждую запись как веб-отформатированную строку 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
4
ответ дан 23 November 2019 в 03:57

Этот сценарий удара может сделать задание:

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

2
ответ дан 23 November 2019 в 03:57

Другие вопросы по тегам:

Похожие вопросы: