터미널에서 M3U 재생 목록 (http URL 형식)을 어떻게 생성 할 수 있습니까?


11

터미널에서 서버의 mp3 파일이 들어있는 디렉토리에 대한 M3U 재생 목록을 생성하고 싶습니다. 모든 플레이어가 해당 파일을 스트리밍 할 수 있도록하기 위해 다음과 같이 각 파일 항목 앞에 해당 URL의 절대 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에 저장합니다.
  • 이전에 존재하는 경우 파일을 삭제합니다
  • 재생 목록에 파일의 전체 경로를 씁니다.

명령

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스타일 로 인코딩됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.