Beim Umwandeln der CDs eines Hörbuchs kann auf die CDDB (CD Datenbank) zurückgegriffen werden, um den Titel und Interpreten zu befüllen. Allerdings ist die Qualität sehr schwankend und unter Umständen nicht einheitlich über mehrere CDs eines Hörbuchs. Wenn dann noch der MP3-Player die Stücke alphabetisch nach Titel sortiert, dann ist kein kontinuierliches Hören des Buches möglich.
Das folgende Skript hat die Aufgaben, bei jeder Datei den ID3-Tag anzupassen und den Dateinamen zu korrigieren. Dazu kommt die Python-Bibliothek Mutagen zum Einsatz.
Voraussetzung dafür ist, dass jede CD in einem Unterverzeichnis abgelegt ist:
Schwarm01/
-- Intro.mp3
-- Vorbereitung.mp3
-- Norwegen.mp3
Schwarm02/
-- Titel 1.mp3
-- Titel 2.mp3
# -*- coding: utf-8 -*- from mutagen.easyid3 import EasyID3 import os.path import sys sourcedir = u'C:\\Users\\Erik.Wegner\\Music\\Frank Schätzing' cdprefix = 'Schwarm' albumname = "Der Schwarm %02i" files = [] def scan_files_in_dir(dir): global files files_found = os.listdir(dir) for afile in files_found: fullname = os.path.join(dir, afile) if os.path.isfile(fullname) and str(os.path.splitext(afile)[1]).lower() == ".mp3": files.append(fullname) def read_id3(): numfiles = len(files) count = 0 hcount = 0 hcountstep = 80.0 / float(numfiles) for afile in files: # Fortschrittsanzeige count = count + 1 if int(count * hcountstep) > hcount: hcount = hcount + 1 sys.stdout.write('.') # Fortschrittsanzeige # Dateizugriff audio = EasyID3(afile) # Titelnummer track = int(audio["tracknumber"][0]) # CD-Nummer disc = int((os.path.split(os.path.split(afile)[0])[1])[-2:]) # Neuer Titel: title = audio["title"][0] if len(title) <= 4: title = "" title = "%02i%02i %s" % (disc, track, title) # Neuer Albumname album = albumname % disc # Setze ID3 audio["title"] = title audio["album"] = album audio.save() # Neuer Dateiname newfilename = "%02i%02i.mp3" % (disc, track) newfilename = os.path.join(os.path.split(afile)[0], newfilename) os.rename(afile, newfilename) for discnumber in range(1, 11): print("Verarbeite CD %i" % discnumber) cddir = os.path.join(sourcedir, "%s%02i" % (cdprefix, discnumber)) scan_files_in_dir(cddir) print("%i Dateien gefunden" % len(files)) read_id3()
Nach dem Ausführen des Skripts sind die Dateistruktur so aus:
Schwarm01/
-- 0101.mp3
-- 0102.mp3
-- 0103.mp3
Schwarm02/
-- 0201.mp3
-- 0202.mp3