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:
@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user