パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

vlc用のランダムxspfファイルを作ってみる

2021-02-02 | Python

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()


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。