Optimiere die Cover-Bildverarbeitung für Apple Podcasts durch Anpassung der JPEG-Qualität, um die Dateigröße unter 512KB zu halten. Aktualisiere den Atom-Link und die Standard-Bild-URL im RSS-Feed.
This commit is contained in:
@ -1,29 +0,0 @@
|
||||
# Audio-Dateien
|
||||
|
||||
Lege deine MP3-Dateien in diesem Verzeichnis ab, um sie im RSS-Feed verfügbar zu machen.
|
||||
|
||||
## Unterstützte Formate
|
||||
|
||||
- MP3-Dateien (.mp3)
|
||||
|
||||
## Metadaten
|
||||
|
||||
Das System versucht automatisch ID3-Tags aus den MP3-Dateien zu lesen:
|
||||
|
||||
- **Titel**: Aus dem TIT2-Tag, sonst Dateiname
|
||||
- **Künstler**: Aus dem TPE1-Tag, sonst "SERMAN"
|
||||
- **Album**: Aus dem TALB-Tag (optional)
|
||||
- **Dauer**: Automatisch erkannt
|
||||
|
||||
## Reihenfolge
|
||||
|
||||
Die Dateien werden nach Änderungsdatum sortiert (neueste zuerst).
|
||||
|
||||
## Beispiel-Struktur
|
||||
|
||||
```text
|
||||
_audio/
|
||||
├── SERMAN - Organic House 01.07.2025.mp3
|
||||
├── SERMAN - Organic House PT2 28.06.25.mp3
|
||||
└── README.md
|
||||
```
|
@ -136,7 +136,7 @@ class LocalPodcastGenerator:
|
||||
print(f" 📐 Original Cover-Größe: {original_width}x{original_height}px")
|
||||
|
||||
# Apple Podcasts benötigt quadratische Cover zwischen 1400-3000px
|
||||
# Wähle Zielgröße basierend auf Originalgröße
|
||||
# Behalte Originalmaße bei, nur Qualität optimieren für <512KB
|
||||
if original_width < 1400 or original_height < 1400:
|
||||
target_size = 1400
|
||||
print(f" ⚠️ Cover zu klein, skaliere auf {target_size}x{target_size}px")
|
||||
@ -179,10 +179,35 @@ class LocalPodcastGenerator:
|
||||
image = background
|
||||
print(f" 🔄 Transparenz entfernt (Apple Podcasts Anforderung)")
|
||||
|
||||
# Speichere das optimierte Cover mit höherer Qualität für Apple Podcasts
|
||||
image.save(cover_path, 'JPEG', quality=98, optimize=True, progressive=True)
|
||||
# Speichere das optimierte Cover mit angepasster Qualität für Episode-Cover
|
||||
# Reduziere nur JPEG-Qualität, behalte Bildgröße zwischen 1400-3000px bei
|
||||
quality = 85
|
||||
max_file_size = 512 * 1024 # 512KB in Bytes
|
||||
|
||||
# Ersten Versuch mit Standard-Qualität
|
||||
temp_buffer = io.BytesIO()
|
||||
image.save(temp_buffer, 'JPEG', quality=quality, optimize=True, progressive=True)
|
||||
file_size = temp_buffer.tell()
|
||||
|
||||
# Reduziere nur Qualität iterativ falls Datei zu groß (Bildgröße bleibt gleich)
|
||||
while file_size > max_file_size and quality > 30:
|
||||
quality -= 5
|
||||
temp_buffer = io.BytesIO()
|
||||
image.save(temp_buffer, 'JPEG', quality=quality, optimize=True, progressive=True)
|
||||
file_size = temp_buffer.tell()
|
||||
print(f" 📉 Reduziere Qualität auf {quality}% (Dateigröße: {file_size//1024}KB)")
|
||||
|
||||
# Speichere die finale Version (Bildgröße bleibt bei {target_size}x{target_size}px)
|
||||
image.save(cover_path, 'JPEG', quality=quality, optimize=True, progressive=True)
|
||||
final_width, final_height = image.size
|
||||
print(f" 🖼️ Cover optimiert und gespeichert: {cover_filename} ({final_width}x{final_height}px)")
|
||||
final_size_kb = cover_path.stat().st_size // 1024
|
||||
print(f" 🖼️ Cover optimiert: {cover_filename} ({final_width}x{final_height}px, {final_size_kb}KB, Qualität: {quality}%)")
|
||||
|
||||
# Prüfe finale Dateigröße und warne bei Überschreitung
|
||||
if final_size_kb > 512:
|
||||
print(f" ⚠️ Warnung: Cover-Datei größer als 512KB ({final_size_kb}KB)")
|
||||
else:
|
||||
print(f" ✅ Cover-Datei unter 512KB Limit")
|
||||
|
||||
except ImportError:
|
||||
print(" ❌ PIL/Pillow nicht installiert - kann Cover nicht optimieren!")
|
||||
@ -270,7 +295,7 @@ Ich spezialisiere mich auf House Music, die mehr als nur Beats bietet – sie er
|
||||
|
||||
# Atom self-link (erforderlich für RSS-Validierung)
|
||||
atom_link = ET.SubElement(channel, "atom:link")
|
||||
atom_link.set("href", f"{self.base_url}/podcast_feed.xml")
|
||||
atom_link.set("href", f"{self.base_url}/{self.output_file}")
|
||||
atom_link.set("rel", "self")
|
||||
atom_link.set("type", "application/rss+xml")
|
||||
|
||||
@ -320,7 +345,7 @@ Ich spezialisiere mich auf House Music, die mehr als nur Beats bietet – sie er
|
||||
itunes_type.text = "episodic"
|
||||
|
||||
# Standard-Bild (kann später angepasst werden)
|
||||
image_url = f"{self.base_url}/_img/podcast-cover.png"
|
||||
image_url = f"{self.base_url}/_img/podcast-cover.jpg"
|
||||
image = ET.SubElement(channel, "image")
|
||||
image_url_elem = ET.SubElement(image, "url")
|
||||
image_url_elem.text = image_url
|
||||
|
Reference in New Issue
Block a user