VLCが20周年とか、その日に偶然作っていたランチャーをご紹介
VLCでプレイリストを保存すると .xspf という拡張子のファイルを作ります。
このファイル形式でランダムプレイリストを作る Python3のプログラムです。
実行フォルダー配下にある.3gpファイルから、作成します。
フォルダ、ディレクトリの指定はOSによって異なるので、xspfファイルをVLCから作って
それにそって変更すれば他のOSでも動くと思います。
簡単な説明
6 指定パスにあるファイルから 3gp ファイル(携帯の動画)名をfilenamesに追加していきます(mp4とかでも変更すれば利用可能)
11 最初に指定したpathから掘り下げていく再帰関数
22 ファイル名をURLファイル名に変更します。 xspfファイルだと2バイト文字をURLエンコードしているため
23 ランダムに作成するファイル数です。エラーチェックとかざるなので、実際に存在するファイル数より多いと動きません。たぶん
24 シャッフルしない場合は不要です。
25 xspfファイルのなかで重要なトラックタグの雛形です。ファイル名と番号を変換して使っています。
27 xspfファイルを作成しています。xspfファイル(XML形式のインデント(桁そろえ)は取っています)
テキスト
#ランダムxspf 3gpファイルのあるフォルダに置いて実行するとfile_count数.xspfファイルをランダム順で作成 vlc用 2021 2/2作成
#作成環境 ubuntu 20.04 python 3.7.5
import os
import urllib.parse
import random
def get_file(path):
global filenames
files = os.listdir(path)
for f in files:
if f.find("3gp")>-1: filenames += [path[1:] + f]
def rec_dir(path):
global filenames
files = os.listdir(path)
get_file(path)
dirName= [f for f in files if os.path.isdir(os.path.join(path, f))]
for d in dirName: rec_dir(path + d + "/")
filenames = []
rec_dir("./")
print("total:", len(filenames))
url_filenames = []
for i in filenames:
url_filenames += ["file://" + urllib.parse.quote(os.getcwd() + i)]
file_count = 100
random.shuffle(url_filenames)
track = "<track><location>filename</location><extension application=\"http://www.videolan.org/vlc/playlist/0\">" + \
"<vlc:id>fileno</vlc:id></extension></track>\n"
f = open(str(file_count)+".xspf",'w')
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
"<playlist xmlns=\"http://xspf.org/ns/0/\" xmlns:vlc=\"http://www.videolan.org/vlc/playlist/ns/0/\" version=\"1\">" + \
"<title>プレイリスト</title><trackList>\n")
for i in range(file_count):
f.write(track.replace("filename", url_filenames[i]).replace("fileno", str(i)))
f.write("</trackList><extension application=\"http://www.videolan.org/vlc/playlist/0\">\n")
for i in range(file_count):
f.write("<vlc:item tid=\"fileno\"/>".replace("fileno", str(i)))
f.write("</extension></playlist>")
f.close()