Webp Format Speicherung in einem Python-Script
Ich hatte gestern meine YouTube KI-Assistenten damit beauftragt, mir mal die Abonnenten-Anzahl zu den Videos aufzulisten und wollte dies auch gerne als Webp-Datei abspeichern. Die Idee kam von einem anderen YouTube-Video, wo dieser Herr das mal vorstellte.
Ich wollte schon immer mal wissen, woher bislang meine Abonnenten herkommen. Aktueller Stand ist bei mir 202 Abos. Natürlich, ist immer noch sehr wenig, viele würden von einem Nischenkanal über meine Eisenbahnleidenschaft sprechen. Aber es wächst derzeit. Es kamen drei neue Abonnennten innerhalb von einigen Tagen, obwohl nur ein Lang- und ein Shorts hochgeladen hatte.
Wenn man dann immer das aktuelle Video sich anschaut, dann steht dort ein 0 (Null neue Abonnenten). Also war es mal interessant zu sehen, woher die Leute zu meinem Kanal kommen.
Der Prompt für die YouTube KI
YouTube Creator haben in ihrem so genannten Dashboard oben rechts ein Feld mit „Ask Studio“ oder auf Deutsch „Frag Studio“. Oben habe ich auf den Button geklickt und ich habe der KI eine eigene Frage gestellt oder ich könnte mir einige vorgefertigte Fragen schon auswählen.
Mein Prompt für diese Anfrage, die möglicherweise nicht perfekt ist, aber zu einem gewünschten Ergebnis gekommen ist:
„Erstelle mir eine Übersicht von den Videos, welche mir Abonnenten gebracht haben. Angefangen von der höchsten Abonnentenanzahl zur niedrigsten bis keine.“
Die Auswertung der YouTube KI für meine Videos
Das Ergebnis sieht dann so folgermaßen aus. Das Fenster kann man auch noch etwas nach links in die Breite ziehen.

Da muss natürlich noch etwas mehr Butter an den Fisch dran
Oder so ähnlich sagt man ja doch. Die Zeiten von Tabellenkalkulationen für mich für die linearische Darstellung schon lange vorbei, zumal man sich doch arg auf ein Programm begrenzt.
Ich benutze daher die Programmiersprache Python, die mit ihren grafischen Bibliotheken wie Matplotlib und Seaborn mir eine viel größere künstlerische Freiheit an Tag bringt, als jede Tabellenkalkulation jemals bringen könnte.
Meine Programmierumgebung
Ich benutze für Python gerne das Jupyter Lab, den Nachfolger vom Jupyter Notebook. Natürlich könnte ich auch einen normalen Texteditor benutzen wie geedit. Selbst mousepad funktioniert mit Python, was man bei de Programmiersprache C in einem meiner letzten Scripts nicht behaupten könnte.
Das Webp-Format in Linux
Nach meinem letzten Kenntnisstand, ich kann jetzt nicht für alle Linux-Distributionen sprechen, braucht man für die Darstellung noch das Programm libwebp-tools.
Umwandlung der Webp-Dateien
Mit dem Befehl: cwebp Abspann.png -o Abspann_web.webp kann man png-Dateien in webp-Dateien umwandeln.
Für ausführliche Informationen bietet sich die offizielle Webseite der libwebp-tools an.
Das Python-Script zur visuellen Veranschaulichung meiner YouTube-Zahlen
Hier ist das Script:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 1. Datenbasis
videos = {
"Langvideos": ["Wuppertaler Schwebebahn", "RB27 Ankunft", "U18 Holsterhausen", "Stoppenberg Rundgang"],
"Aufrufe": [3438, 4157, 3056, 520],
"Abos": [14, 13, 8, 5]
}
dateinamen = input("Dateinamen einfuegen: ")
df = pd.DataFrame(videos)
# Nach Aufrufen sortieren
df = df.sort_values(by="Aufrufe", ascending=False).reset_index(drop=True)
# Conversion Rate (Abos pro 1.000 Aufrufe) berechnen
df["Abos_pro_1k"] = (df["Abos"] / df["Aufrufe"] * 1000).round(2)
# 2. Visualisierung vorbereiten
sns.set_theme(style="white")
fig, ax1 = plt.subplots(figsize=(10, 5))
# Erste Achse (Links): Aufrufe als Balken
color_aufrufe = '#2b5c8f'
bars = ax1.bar(df["Langvideos"], df["Aufrufe"], color=color_aufrufe, alpha=0.85, width=0.4, label="Aufrufe")
ax1.set_xlabel("Video", fontsize=12, labelpad=10)
ax1.set_ylabel("Aufrufe", fontsize=12, color=color_aufrufe)
ax1.tick_params(axis='y', labelcolor=color_aufrufe)
ax1.set_xticklabels(df["Langvideos"], rotation=15, ha="right")
# Zweite Achse (Rechts): Abos als Linie mit Punkten
ax2 = ax1.twinx()
color_abos = '#e74c3c'
line = ax2.plot(df["Langvideos"], df["Abos"], color=color_abos, marker='o', linewidth=2.5, markersize=8, label="Gewonnene Abos")
ax2.set_ylabel("Gewonnene Abos", fontsize=12, color=color_abos)
ax2.tick_params(axis='y', labelcolor=color_abos)
ax2.grid(False) # Verhindert doppelte Gitterlinien
# Beschriftung der Abo-Punkte
for i, txt in enumerate(df["Abos"]):
ax2.annotate(f"{txt} Abos", (df["Langvideos"][i], df["Abos"][i]),
textcoords="offset points", xytext=(0, 10), ha='center',
color=color_abos, fontweight='bold')
plt.title("YouTube Performance: Aufrufe vs. Gewonnene Abonnenten", fontsize=14, pad=15)
plt.tight_layout()
plt.savefig(f"{dateinamen}.webp", dpi=150, facecolor='white', bbox_inches='tight', pil_kwargs={'quality': 85})
plt.show()
Die Webp-Besonderheiten mit Matplotlib
Matplotlib speichert Diagramme bei .webp standardmäßig manchmal mit transparentem Hintergrund. Wenn du das Bild dann in einen Blogartikel oder ein Dokument einbindest, kann der Hintergrund plötzlich grau, dunkel oder transparent werden.
Bei Vektorformaten (PDF/SVG) ist dpi egal, bei Rasterformaten (PNG/WebP/JPG) bestimmt es die Auflösung. Für das Web sind dpi=300 hervorragend knackscharf (auch für Retina-Displays), erzeugt aber etwas größere Dateien. Für reine Web-Darstellungen reichen meist dpi=150 bis dpi=200 völlig aus, ohne Qualität einzubüßen.
Wie wird es nun gemacht mit Webp?
So sieht die Zeile Code nun aus für eine gute Einbindung von Webp.
plt.savefig(f"{dateinamen}.webp", dpi=150, facecolor='white', bbox_inches='tight', pil_kwargs={'quality': 85})
Indiviuelle Einstellungen kann natürlich noch vornehmen. Das ist ja das Schöne, wenn man selber programmiert.
Das Diagramm zum Script
Ich möchte natürlich auch nicht das Diagramm vorenthalten, was zu diesem Script hier gehört.
