How can I generate an M3U playlist (http URL format) from the terminal?
Solution 1:
This is @chronitis answer with some improvements :
- stores the file name on the variable $playlist for later use
- will delete the file if exists previously
- writes the full path of the file on the playlist
The command
playlist='play.m3u' ; if [ -f $playlist ]; then rm $playlist ; fi ; for f in *.mp3; do echo "$(pwd)/$f" >> "$playlist"; done
To play it with mplayer on the command line also
mplayer -playlist play.m3u
Solution 2:
I think the following one-liner should work:
for f in *.mp3; do echo "http://..../$f" >> play.m3u; done
Solution 3:
You originally asked to create each entry as a web URL formatted line. In addition to replacing the local path with http://..., you'll also need to replace spaces with '%20'. So, long line, but here you go:
find /path/to/mp3s/ -name "*.mp3" | sed 's/ /%20/g' | sed 's|/path/to/mp3s/|http://www.server.com/serverpath/|g' > playlist.m3u
Solution 4:
This bash script can do the job:
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
A little more developed version. The URL is encoded in proper .m3u
style.