feat: smart title extraction from filename for 2.0.2

This commit is contained in:
joel
2026-07-20 18:29:58 +02:00
parent 87b5ba91b1
commit c486339f8d
5 changed files with 71 additions and 50 deletions
+42
View File
@@ -4,6 +4,7 @@ fcco-Converter V2 Metadaten-Modul
Hilfsfunktionen für ID3-Tags, Cover-Bilder und Albumname-Generierung.
"""
import re
from datetime import datetime
from pathlib import Path
@@ -51,6 +52,47 @@ def extract_event_from_folder(file_path: Path) -> tuple[str, str]:
return "", ""
def extract_title_from_filename(filename: str) -> str:
"""Extrahiert einen sauberen Titel aus dem komplexen Dateinamen-Format.
Format-Erwartung: [Prefix]_[Track]_[Type]_[Lang][ Remainder]
Beispiele:
260719So_N_10_Predigt_D Vorname Nachname -> "Predigt Vorname Nachname"
260719So_N_04_Lied_D Zum blauen Himmel -> "Zum blauen Himmel"
"""
# Regulärer Ausdruck, um die Komponenten zu extrahieren
match = re.match(r"^.*?_\d+_(?P<type>[a-zA-Z]+)_(?P<lang>[a-zA-Z]+)(?: (?P<remainder>.*))?$", filename)
if not match:
return filename
typ = match.group("type")
lang = match.group("lang")
remainder = match.group("remainder") or ""
typ_lower = typ.lower()
if typ_lower in ["predigt", "vorwort", "gedicht"]:
if remainder:
return f"{typ} {remainder}"
return f"{typ} {lang}"
elif typ_lower == "lied":
if remainder:
return remainder
return f"{typ} {lang}"
elif typ_lower in ["chor", "orchester"]:
if remainder:
return f"{remainder} ({typ})"
return f"{typ} {lang}"
else:
# Fallback
if remainder:
return f"{typ} {remainder}"
return f"{typ} {lang}"
from mutagen.id3 import ID3, APIC, TIT2, TPE1, TALB, TRCK, TDRC
def apply_id3_tags(