🚀 Interesse an diesem Projekt? Sprechen Sie mich an!
💰 Business Value
Vollautomatischer YouTube-Video-Workflow: Video von EU-Parlament herunterladen, KI-Titel + Thumbnail generieren, auf YouTube hochladen, Datenbank synchronisieren — alles in einem Durchlauf.
End-to-End Automation
Von der Video-Beschaffung über Titel-Generierung bis zum Upload — kein manueller Eingriff nötig.
KI-gestützt
OpenAI generiert automatisch SEO-optimierte YouTube-Titel aus Videobeschreibungen — kein manuelles Texten.
DB-Synchronisation
Nach Upload automatischer MySQL-Update — Status, YouTube-ID und Fehlerflag werden in der Datenbank vermerkt.
Thumbnail-Engine
Automatische Thumbnail-Erstellung mit Overlay, Textbox und OpenCV — Upload-ready für YouTube.
⚙️ Funktionsweise
Die Kern-Mechanik des Projekts im Überblick.
📡
1. Quelle abrufen
Video-Daten per API von multimedia.europarl.europa.eu holen, höchste Auflösung extrahieren, Download starten.
🧠
2. KI verarbeiten
OpenAI erstellt SEO-Titel und Kurzfrage aus Beschreibung — optimiert für YouTube-Suchanfragen.
🎨
3. Thumbnail bauen
Ersten Video-Frame extrahieren, Overlay-PNG drüberlegen, Frage-Text einzeichnen — komplett mit PIL + OpenCV.
📤
4. Upload + DB
Video via YouTube Data API hochladen, Thumbnail setzen, MySQL-Datensatz aktualisieren — fertig.
💻 Code-Einblicke
Ein Blick unter die Haube — so ist das Projekt technisch umgesetzt:
EU-Parlament Video-Download & JSON-Parsing
response = requests.get(url)
html_text = response.text
json_pattern = re.compile(
r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>')
match = re.search(json_pattern, html_text)
if match:
data = json.loads(match.group(1))
resolutions = (data.get("props", {})
.get("pageProps", {})
.get("mediaItem", {})
.get("videos", [])[0]
.get("resolutions", []))
# Größte Auflösung finden und herunterladen
filtered = [r for r in resolutions if r.get("resolution")]
sorted_res = sorted(filtered, key=lambda r: r.get("size"), reverse=True)
largest = sorted_res[0]
# Download mit Streaming
response = requests.get(largest.get("url"), stream=True)
with open(f'{media_business_id}_fin.mp4', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
OpenAI Titel-Generierung für YouTube
openai.api_key = config.openai_api_key
prompt = (f"Create a YouTube video title from this description: "
f"{description}. The title should be engaging and "
f"informative. Dont use thes charaters @, #, $, %, "
f"&, *, +, =, |, /, {{, }}, [, ]. It should look "
f"like someones Search request to youtube search and "
f"has a maximum of 70 charaters")
settings = {
"engine": "text-davinci-003",
"prompt": prompt,
"temperature": 0.7,
"max_tokens": 1000,
"n": 1,
"stop": "."
}
response = openai.Completion.create(**settings)
for choice in response.choices:
title = choice.text.strip()
title = title.replace("engine", "").replace("bar", "")
print(f"Title: {title}")
Thumbnail-Erstellung mit PIL & OpenCV
# Video-Datei öffnen und ersten Frame extrahieren
video = cv2.VideoCapture(f'{media_business_id}_fin.mp4')
ok, frame = video.read()
cv2.imwrite(f'{media_business_id}_alt.jpg', frame,
[int(cv2.IMWRITE_JPEG_QUALITY), 90])
video.release()
# Overlay-PNG auf Thumbnail legen
input_image = Image.open(f'{media_business_id}_alt.jpg').convert('RGBA')
overlay_image = Image.open('overlay_thumb.png').convert('RGBA')
result = Image.alpha_composite(input_image, overlay_image)
# Text mit Frage einzeichnen
draw = ImageDraw.Draw(result)
font = ImageFont.truetype('arialbd.ttf', 100)
text = quest # OpenAI-generierte Frage
draw.rectangle((50, 800, box_width, box_height), fill=(255,255,255))
draw.text((60, 810), text, font=font, fill=(0, 0, 0))
result.convert('RGB').save(f'{media_business_id}thumb.jpg')
YouTube Upload mit API & DB-Update
request_body = {
'snippet': {
'categoryId': 25,
'title': title,
'description': description,
'tags': tags
},
'status': {
'privacyStatus': 'public',
'selfDeclaredMadeForKids': False,
},
'notifySubscribers': False,
}
mediaFile = MediaFileUpload(VIDEO_FILE_NAME, chunksize=-1,
resumable=True)
response_upload = googleAPI.videos().insert(
part='snippet,status',
body=request_body,
media_body=mediaFile
).execute()
# Thumbnail setzen
googleAPI.thumbnails().set(
videoId=response_upload.get('id'),
media_body=MediaFileUpload(thumb)
).execute()
# Datenbank aktualisieren
sql = "UPDATE Videos SET ytID=%s, uploaded=1 WHERE ID=%s"
cursor.execute(sql, (response_upload.get('id'), mediaID))
conn.commit()
⚡ In wenigen Tagen zum MVP — mit Vibecoding.
🚀 Gebaut mit Vibecoding
👴 Klassische Entwicklung
- 📋 2–3 Wochen Requirements
- 🏗️ 2–3 Wochen Architektur
- 💻 3–4 Wochen Implementierung
- 🧪 1–2 Wochen Testing
- ⏱️ Gesamt: 8–13 Wochen
🤖 Vibecoding-Ansatz
- 🗣️ 0.5 Tage Prompt-Engineering
- ⚡ 2–3 Tage iterative Generierung
- 🔧 1–2 Tage Refinement
- ✅ 1 Tag Testing & Deployment
- ⏱️ Gesamt: 5–7 Tage
🎯 Strategische Erkenntnisse
Jedes Projekt liefert wertvolle Einsichten — technisch wie strategisch. Diese Learnings fließen direkt in Folgeprojekte ein.
Open Source = Unabhängigkeit
Offene Technologien bedeuten keine Vendor-Lock-ins, volle Kontrolle über den Code und langfristige Wartbarkeit ohne Lizenzkosten.
Bottom-up statt Big Bang
Kleine, funktionierende Prototypen schlagen monatelange Planungsphasen. Erst beweisen, dann ausrollen — iterativ und risikominimiert.
Wiederverwendbarkeit
Modular aufgebauter Code beschleunigt Folgeprojekte massiv. Einmal gelöste Probleme werden zur Template-Bibliothek für zukünftige Herausforderungen.
KI als Beschleuniger
Vibecoding mit Coding-Agenten komprimiert Entwicklungszyklen von Wochen auf Tage — ohne Qualitätseinbußen durch iterative Prompt-Verfeinerung.
Bereit für Ihr nächstes Projekt?
Lassen Sie uns gemeinsam herausfinden, wo Automatisierung und KI den größten Hebel für Ihr Business haben — unverbindlich und pragmatisch.
Analyse & Konzept
Wir analysieren Ihre Anforderungen und skizzieren eine passgenaue Lösung — technisch fundiert und wirtschaftlich sinnvoll.
Proof-of-Concept
Ein funktionierender Prototyp innerhalb weniger Tage — Sie sehen das Ergebnis, bevor Sie sich committen.
Projektbegleitung
Von der Entwicklung über das Deployment bis zum Go-Live — ich begleite Sie durch den gesamten Prozess.