Verbessere die Cover-Art-Extraktion durch Unterstützung mehrerer APIC-Tag-Varianten und speichere Cover im _audio-Verzeichnis neben den MP3-Dateien.

This commit is contained in:
2025-07-05 20:17:34 +02:00
parent f90c17f404
commit c026d04846

View File

@ -54,13 +54,17 @@ class LocalPodcastGenerator:
album = str(audio.tags.get('TALB', [''])[0]) if audio.tags.get('TALB') else None album = str(audio.tags.get('TALB', [''])[0]) if audio.tags.get('TALB') else None
# Cover-Art extrahieren (APIC = Attached Picture) # Cover-Art extrahieren (APIC = Attached Picture)
if 'APIC:' in audio.tags: # Versuche verschiedene APIC-Tag-Varianten
cover_data = audio.tags.get('APIC:').data for key in audio.tags.keys():
elif audio.tags.get('APIC'): if key.startswith('APIC'):
# Fallback für andere APIC-Varianten try:
apic_tags = [tag for tag in audio.tags if tag.startswith('APIC')] cover_data = audio.tags[key].data
if apic_tags: if cover_data:
cover_data = audio.tags.get(apic_tags[0]).data print(f" 🎨 Cover gefunden in Tag: {key}")
break
except Exception as tag_error:
print(f" ⚠️ Fehler beim Lesen von {key}: {tag_error}")
continue
# Dauer in Sekunden # Dauer in Sekunden
if hasattr(audio, 'info') and audio.info.length: if hasattr(audio, 'info') and audio.info.length:
@ -110,18 +114,16 @@ class LocalPodcastGenerator:
# Erstelle Cover-Dateiname basierend auf MP3-Dateiname # Erstelle Cover-Dateiname basierend auf MP3-Dateiname
cover_filename = f"cover_{Path(metadata['filename']).stem}.jpg" cover_filename = f"cover_{Path(metadata['filename']).stem}.jpg"
# Speichere Cover im httpdocs-Verzeichnis # Speichere Cover im _audio-Verzeichnis (neben den MP3-Dateien)
if "../httpdocs" in self.audio_dir: audio_path = Path(self.audio_dir)
cover_path = Path("../httpdocs") / cover_filename cover_path = audio_path / cover_filename
else:
cover_path = Path(cover_filename)
# Schreibe Cover-Daten in Datei # Schreibe Cover-Daten in Datei
with open(cover_path, 'wb') as f: with open(cover_path, 'wb') as f:
f.write(metadata['cover_data']) f.write(metadata['cover_data'])
# Rückgabe der URL zum Cover # Rückgabe der URL zum Cover (im _audio-Verzeichnis)
cover_url = f"{self.base_url}/{cover_filename}" cover_url = f"{self.base_url}/_audio/{cover_filename}"
print(f" 🖼️ Cover extrahiert: {cover_filename}") print(f" 🖼️ Cover extrahiert: {cover_filename}")
return cover_url return cover_url