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