如何从终端生成M3U播放列表(http URL格式)?


11

我想从终端为服务器上包含mp3文件的目录生成M3U播放列表。由于我想确保每个播放器都能流式传输这些文件,因此我想为每个文件条目添加指向该目录的绝对URL的前缀,如下所示:

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

因此,不幸的是,仅仅做ls -1 *.mp3 > play.m3u是不够的。有没有一线实现这一目标?

Answers:


8

我认为以下一线应该起作用:

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


7

这是@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

我不知道为什么有人不赞成这个答案。这是似乎立即可用的唯一解决方案,应该被接受或至少被推广。非常感谢你!
2015年

如果我想在此命令中添加多种文件格式怎么办?
Sumeet Deshmukh'4

4

您最初要求将每个条目创建为Web 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样式编码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.