Grooveミュージックのプレイリスト(zpl)をPlenue Dに適合するプレイリスト(m3u)に変換するPythonスクリプト
第一引数にzplのパスを入れます。ワイルドカード(アスタリスク)に対応しています。
m3uファイルはm3uフォルダに格納されます。
例)
python .\trans-zpl-to-m3u.py *.zpl
- extract_relpath関数のreplace箇所を各自の音楽フォルダのパスに合わせること
Grooveミュージックのプレイリスト(zpl)をPlenue Dに適合するプレイリスト(m3u)に変換するPythonスクリプト
第一引数にzplのパスを入れます。ワイルドカード(アスタリスク)に対応しています。
m3uファイルはm3uフォルダに格納されます。
例)
python .\trans-zpl-to-m3u.py *.zpl
#!/usr/bin/python | |
#encoding: utf8 | |
import sys, os | |
import xml.etree.ElementTree as ET | |
import glob | |
import codecs | |
def usage(): | |
print("usage: {} <zpl files>".format(sys.argv[0])) | |
def extract_relpath(abspath, prefix=""): | |
relpath = abspath[1:] # ommit drive letter | |
relpath = relpath.replace(u':\\Component\\User_data\\ミュージック\\flac', '') | |
relpath = relpath.replace(u':\\Component\\User_data\\ミュージック\\wma_foo', '') | |
return prefix + relpath | |
prefix = "\Music" | |
output_dir = "./m3u/" | |
if not os.path.exists(output_dir): | |
os.mkdir(output_dir) | |
for file_name in glob.glob(sys.argv[1]): | |
base_name, _ = os.path.splitext(file_name) | |
### read zpl file | |
with open(file_name, encoding="utf-8") as f: | |
root = ET.fromstring(f.read()) | |
### transform from zpl to m3u | |
seq = root[1][0] | |
m3u = "#EXTM3U\r\n" | |
for x in seq: | |
m3u += "#EXTINF:\r\n" | |
src = "{}".format(x.get('src')) | |
m3u += extract_relpath(src, prefix) | |
m3u += "\r\n" | |
### write m3u | |
bom = codecs.BOM_UTF16_LE | |
with open(output_dir + base_name + ".m3u", "wb") as f: | |
f.write(bom) | |
f.write(m3u.encode('utf-16le')) |