Etwas Zeit gehabt und im Grunde ist es auch kein Hexenwerk, ein Python3 Skript das Rekursiv (vom Hauptordner in Unterordner) vom Skriptordner einliest und ".m3u" Dateien erstellt.
Die m3u sind ohne Zeitangaben, da dafür die Audiodateien ausgelesen werden müssten. Daher enthalten diese nur die Dateinamen sortiert - welche aber dennoch von Playern unterstützt werden sollten. (getestet mit "Clementine").
Kurz zu den 3 Konstante:
[src=python]M3U_PREFIX = "String" # der vorangestellte Teil für den Namen der M3U, z.B. "00 - " => " 00 - m3uName_audiotype.m3u"
AUDIO_TYPELIST = ["mp3", "aac", "wav"] # Dateitypen die ausgewertet werden sollen
USE_WAIT = False # False or True = Künstliche Pausen mit Bearbeitung[/src]
Beispiel Output:
[src=text]python3 m3u.py -d/home/username/Musik/
Analyzing folder ""...
Analyzing folder "Christoph Maria Herbst"...
Analyzing folder "Christoph Maria Herbst/Ein Traum von einem Schiff"...
Analyzing folder "Christoph Maria Herbst/Ein Traum von einem Schiff/CD 1"...
Created m3u "00 - Christoph Maria Herbst - Ein Traum von einem Schiff - CD 1_mp3.m3u" inside of folder "Christoph Maria Herbst/Ein Traum von einem Schiff/CD 1"
Analyzing folder "Christoph Maria Herbst/Ein Traum von einem Schiff/CD 2"...
Created m3u "00 - Christoph Maria Herbst - Ein Traum von einem Schiff - CD 2_mp3.m3u" inside of folder "Christoph Maria Herbst/Ein Traum von einem Schiff/CD 2"
Analyzing folder "Christoph Maria Herbst/Ein Traum von einem Schiff/CD 3"...
Created m3u "00 - Christoph Maria Herbst - Ein Traum von einem Schiff - CD 3_mp3.m3u" inside of folder "Christoph Maria Herbst/Ein Traum von einem Schiff/CD 3"
Analyzing folder "Culcha Candela"...
Analyzing folder "Culcha Candela/Candelistan"...
Created m3u "00 - Culcha Candela - Candelistan_mp3.m3u" inside of folder "Culcha Candela/Candelistan"
Analyzing folder "Funny van Dannen"...
Analyzing folder "Funny van Dannen/Geile Welt"...
Created m3u "00 - Funny van Dannen - Geile Welt_mp3.m3u" inside of folder "Funny van Dannen/Geile Welt"
Analyzing folder "Hoerspiele"...
Created m3u "00 - Hoerspiele_mp3.m3u" inside of folder "Hoerspiele"
[/src]
[src=python]#!/usr/bin/env python3
#-----------------------------------------------------------------------------
# Config
#-----------------------------------------------------------------------------
# M3U Name Prefix '00 - ' => '00 - m3uName_typeaudio.m3u'
M3U_PREFIX = '00 - '
# Audio types to scan for
AUDIO_TYPELIST = [
'wav', 'mp3', 'm4a', 'flac',
'ogg', 'pcm', 'aiff', 'aac',
'wma', 'alac'
]
# Use artificial wait
USE_WAIT = True
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
from glob import glob
from os.path import isdir
from os import getcwd, sep
from time import sleep
from sys import argv, exit
def createM3u(folder, type, audioList):
m3uName = M3U_PREFIX + folder.replace(workingDirectory, '', 1).rstrip('*').replace(sep, ' - ')
cleanedAudioList = []
for audioItem in audioList:
fileEnding = audioItem.rsplit('.', 1)[1].lower()
if fileEnding in AUDIO_TYPELIST:
cleanedAudioList.append(audioItem.rsplit(sep, 1)[1])
with open(folder + sep + m3uName + '_' + type + '.m3u', 'w', encoding="utf-8") as playlistFile:
playlistFile.write('\n'.join(cleanedAudioList))
playlistFile.flush()
print('Created m3u "%s" inside of folder "%s"' % (m3uName + '_' + type + '.m3u', folder.replace(workingDirectory, '', 1)))
if USE_WAIT:
sleep(3)
#-----------------------------------------------------------------------------
def globFolder(folder):
srcFolder = folder.rstrip('*').replace(workingDirectory, '', 1)
print('Analyzing folder "%s"...' % (srcFolder))
if USE_WAIT:
sleep(1)
itemList = sorted(glob(folder + sep + '*'))
for item in itemList:
if isdir(item):
globFolder(item)
for audioType in AUDIO_TYPELIST:
audioFiles = sorted(glob(folder + sep + '*.' + audioType))
if len(audioFiles) != 0:
createM3u(folder, audioType, audioFiles)
#-----------------------------------------------------------------------------
if __name__ == "__main__":
workingDirectory = getcwd() + sep
for command in argv:
if command.startswith('-d'):
targetFolder = command.replace('-d', '', 1).rstrip('/')
if isdir(targetFolder):
workingDirectory = targetFolder + sep
else:
print('Source folder "%s" not present. Exiting.' % (targetFolder))
exit(1)
globFolder(workingDirectory)
print('Finished creating m3u playlists. Exiting')
[/src]
Edit: Habe nochmal ergänzt das mit mit "python3 skriptName.py -d/home/username/music" einen Quellordner vorgeben kann, in dem das Skript nach Musikdateien sucht.