feat: smart title extraction from filename for 2.0.2
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user