Verbessere die Cover-Optimierung und -Integration für bessere Kompatibilität mit Apple Podcasts durch Anpassungen bei der Bildverarbeitung und dem Hinzufügen von Cover-Tags.

This commit is contained in:
2025-07-05 21:01:45 +02:00
parent 6172a898c3
commit 9750e14234

View File

@ -165,16 +165,22 @@ class LocalPodcastGenerator:
# Skaliere auf Zielgröße
image = image.resize((target_size, target_size), Image.Resampling.LANCZOS)
# Konvertiere zu RGB falls nötig (für JPEG)
# Konvertiere zu RGB falls nötig (für JPEG) - Apple Podcasts erfordert festen Hintergrund
if image.mode in ('RGBA', 'LA', 'P'):
# Verwende weißen Hintergrund für Transparenz (Apple Podcasts Anforderung)
background = Image.new('RGB', image.size, (255, 255, 255))
if image.mode == 'P':
image = image.convert('RGBA')
background.paste(image, mask=image.split()[-1] if image.mode == 'RGBA' else None)
if image.mode in ('RGBA', 'LA'):
# Berücksichtige Alpha-Kanal für bessere Transparenz-Behandlung
background.paste(image, mask=image.split()[-1] if len(image.split()) > 3 else None)
else:
background.paste(image)
image = background
print(f" 🔄 Transparenz entfernt (Apple Podcasts Anforderung)")
# Speichere das optimierte Cover
image.save(cover_path, 'JPEG', quality=95, optimize=True)
# Speichere das optimierte Cover mit höherer Qualität für Apple Podcasts
image.save(cover_path, 'JPEG', quality=98, optimize=True, progressive=True)
final_width, final_height = image.size
print(f" 🖼️ Cover optimiert und gespeichert: {cover_filename} ({final_width}x{final_height}px)")
@ -297,9 +303,18 @@ Ich spezialisiere mich auf House Music, die mehr als nur Beats bietet sie er
for episode_index, mp3_file in enumerate(mp3_files):
metadata = self.get_mp3_metadata(mp3_file)
print(f"\n🎵 Episode {episode_index + 1}: {metadata['title']}")
print(f" 📄 Datei: {metadata['filename']}")
print(f" 🎨 Cover-Daten vorhanden: {'Ja' if metadata['cover_data'] else 'Nein'}")
# Episode-Cover extrahieren
episode_cover_url = self.extract_episode_cover(metadata, episode_index)
if episode_cover_url:
print(f" 🔗 Cover-URL: {episode_cover_url}")
else:
print(f" ❌ Keine Cover-URL generiert")
item = ET.SubElement(channel, "item")
# Titel
@ -355,11 +370,18 @@ Ich spezialisiere mich auf House Music, die mehr als nur Beats bietet sie er
itunes_episode_type = ET.SubElement(item, "itunes:episodeType")
itunes_episode_type.text = "full"
# Episode-Cover hinzufügen - nur iTunes Format für bessere Kompatibilität
# Episode-Cover hinzufügen - beide Formate für maximale Kompatibilität
if episode_cover_url:
# Standard RSS image tag (für breite Kompatibilität)
item_image = ET.SubElement(item, "image")
item_image.text = episode_cover_url
# iTunes image tag (das Standard-Format für Podcast-Apps)
itunes_image_item = ET.SubElement(item, "itunes:image")
itunes_image_item.set("href", episode_cover_url)
print(f" ✅ Cover-Tags hinzugefügt (Standard + iTunes): {episode_cover_url}")
else:
print(f" ⚠️ Kein Episode-Cover verfügbar - verwende Standard-Podcast-Cover")
# Keywords/Tags basierend auf Dateiname
if any(keyword in metadata['title'].lower() for keyword in ['organic', 'house']):
@ -367,6 +389,10 @@ Ich spezialisiere mich auf House Music, die mehr als nur Beats bietet sie er
itunes_keywords.text = "Organic house"
print(f"{metadata['title']} ({self.format_duration(metadata['duration']) if metadata['duration'] else 'Unbekannte Dauer'})")
if episode_cover_url:
print(f" 🖼️ Mit Episode-Cover: {episode_cover_url}")
else:
print(f" 📷 Ohne Episode-Cover")
# XML in Datei schreiben
tree = ET.ElementTree(rss)