Communitygithub.com

Rahul8 – YouTube-Zusammenfassung

Wandelt ein YouTube-Video (öffentlich, nicht gelistet oder privat/nur für Mitglieder, das der angemeldete Benutzer bereits sehen kann) oder eine lokale Video-/Audioaufnahme in ein detailliertes, abschnittsweises Zusammenfassungsdokument als PDF um und extrahiert optional die Tonspur als MP3/M4A/WAV.

Was ist Rahul8 – YouTube-Zusammenfassung?

Dieses Skill erstellt aus YouTube-Videos oder lokalen Mediendateien professionelle Zusammenfassungen als PDF. Es nutzt vorhandene Untertitel (manuell oder automatisch) und transkribiert bei Bedarf den Ton lokal mit Whisper – ideal für Livestreams, Vorlesungen, Webinare oder stundenlange Aufnahmen ohne Untertitel. Der Workflow ist asynchron: Das Transkript wird im Hintergrund heruntergeladen und verarbeitet, während der Benutzer fortfahren kann. Das Skill unterstützt öffentliche und nicht gelistete Videos ohne Anmeldung, für private oder mitgliederexklusive Inhalte wird eine Cookie-basierte Authentifizierung mit dem eigenen Konto des Benutzers benötigt. Es läuft auf der Kommandozeile mit Python und yt-dlp und ist kompatibel mit Claude Code, Cursor und ähnlichen KI-Assistenten, die Bash-Skripte und Python ausführen können. Die strukturierte Zusammenfassung enthält eine Zeitleiste, Fakten-Tabellen und Anmerkungen zur Transkriptionsqualität. Der Benutzer erhält eine klare Übersicht über das Ergebnis, inklusive Seitenzahl der PDF und etwaiger Einschränkungen bei automatisch generierten Transkripten.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add simply-Rahul8/youtube-summary

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

YouTube-Zusammenfassung

Pipeline: Transkript holen → alles lesen → strukturierte Markdown-Zusammenfassung schreiben → PDF rendern. scripts/fetch_transcript.py übernimmt den ersten Schritt und scripts/md_to_pdf.py den letzten. Dazwischen schreibst du die Zusammenfassung.

1. Zugriff: nur das, was der Benutzer bereits ansehen kann

  • Öffentliche und nicht gelistete Videos benötigen keine Anmeldung. Versuche diese immer zuerst ohne Cookies.
  • Bei einem privaten oder mitgliederexklusiven Video beendet sich das Skript mit NEEDS_SIGNIN. Du kannst nur fortfahren, indem du Cookies aus einem Browser liest, in dem das eigene Konto des Benutzers, dem Zugriff gewährt wurde, angemeldet ist.
    • Frage nach, welcher Browser (und Profil, falls mehrere verwendet werden), bevor du --browser übergibst. Cookies sind seine Anmeldeinformationen.
    • Weise darauf hin, dass yt-dlps Dokumentation warnt, dass die automatisierte Nutzung eines angemeldeten Kontos zu Ratenbegrenzung oder Sperrung führen kann. Für eigene Uploads sind der YouTube Studio-Download oder Google Takeout die risikofreie Alternative, und das Skript akzeptiert die resultierende lokale Datei.
  • Versuche niemals, Privatsphäre-Einstellungen, Regionssperren, DRM oder Paywalls zu umgehen, und verwende niemals das Konto einer anderen Person. Wenn das Konto des Benutzers das Video nicht ansehen kann, sage dies und brich ab.
  • „Dieses Video ist privat“ selbst mit --browser bedeutet normalerweise, dass das Konto mit Zugriff nicht das Standard-angemeldete Konto des Browsers ist. Schlage --browser chrome:"Profil 2" vor, oder die Anmeldung mit diesem Konto in einem neuen Profil.

2. Transkript holen (abgekoppelt: lange Videos brauchen Zeit)

Verwende einen dauerhaften Arbeitsordner, niemals einen Sitzungs-Scratchpad, der mitten im Job gelöscht werden kann: ~/youtube-summaries/<video-id-or-datei-stamm>/. Starte den Job abgekoppelt, damit er das Ende der Sitzung überlebt:

OUT=~/youtube-summaries/<id>; mkdir -p "$OUT"
nohup python3 -I ~/.claude/skills/youtube-summary/scripts/fetch_transcript.py "<url-oder-datei>" \
  --out "$OUT" [--browser chrome] [--lang de|auto] [--force-audio] [--audio mp3|m4a|wav] \
  > "$OUT/run.log" 2>&1 &!

Warte dann mit einer Bash-Hintergrund-solange-Schleife anstatt zu pollen, z.B. until grep -qE '^(DONE|FAILED|NEEDS_SIGNIN)' "$OUT/status"; do sleep 15; done; cat "$OUT/status".

Was das Skript macht:

  • Ermittelt Metadaten, verwendet dann manuelle Untertitel, fällt zurück auf automatische Untertitel;
  • Ohne Untertitel lädt es den Ton herunter und transkribiert ihn mit mlx-whisper large-v3-turbo auf Apple Silicon (openai-whisper anderswo). Es bezieht ffmpeg von imageio-ffmpeg, falls keins installiert ist;
  • Entfernt Whisper-Stille-Halluzinationen („Vielen Dank.“) und die sich wiederholenden Wiederholungen in automatischen Untertiteln;
  • Schreibt transcript.txt als 2-Minuten-[h:mm]-Absätze, plus meta.json.

Zeitaufwand: etwa 4–5 Minuten Transkription pro Stunde Audio auf einem M-Series-Mac mit 8 GB, zusätzlich zur Download-Zeit. Sage dem Benutzer die erwartete Wartezeit, und wenn er nach Fortschritt fragt, berichte den Download-Prozentsatz oder den letzten Zeitstempel in run.log.

Verwende --force-audio, wenn die automatischen Untertitel schlecht sind (Musik, starke Akzente, falsche Sprache). Verwende --lang auto für nicht-deutsche Videos.

Audio-Extraktion: Übergib --audio mp3 (oder m4a/wav), wenn der Benutzer den Ton selbst wünscht: „gib mir die MP3“, „extrahiere den Ton“, eine Podcast-Version oder zum Offline-Hören. Die Datei wird als <titel>.<format> in $OUT gespeichert, und ihr Pfad wird als audio_file in meta.json vermerkt. Untertitel werden, wenn verfügbar, trotzdem für das Transkript verwendet, sodass das Anfordern von Audio keine langsame Transkription erzwingt. Wenn der Benutzer nur das Audio und keine Zusammenfassung möchte, stoppe nach diesem Schritt und melde die Datei.

3. Alles lesen, dann zusammenfassen

Lese die gesamte transcript.txt; der Benutzer möchte normalerweise jedes Detail. Bei mehr als ~60.000 Wörtern lies es in geordneten Blöcken und mache dir pro Block Notizen, bevor du schreibst.

Schreibe $OUT/summary.md in eigenen Worten: eine Zusammenfassung, kein Transkript. Kurze Zitate sind in Ordnung; lange wörtliche Passagen nicht. Standardstruktur (passe die Abschnitte an das Video an):

# <Video-Titel>

| | |
|---|---|
| Video | <Titel> |
| Kanal | <Kanal> |
| Link | <URL> |
| Länge | <Dauer> |
| Sprecher | <nur Namen, die tatsächlich im Video genannt werden> |
| Transkript | <manuelle Untertitel / automatische Untertitel / lokale Whisper-Transkription> |

## 1. Auf einen Blick
- 5–8 Aufzählungspunkte: Was das Video behandelt und die wichtigsten Schlussfolgerungen

## Zeitleiste
| Zeit | Thema |
|---|---|
| 0:00 | ... |

## 2. <Abschnitt pro Kapitel/Thema, in Videoreihenfolge>
### <Unterthema>
- jede konkrete Tatsache, Zahl, Name, Definition, Beispiel, Schritt, Warnung und Empfehlung
- Demos und Durchläufe als nummerierte Schritte; Vergleiche als Tabellen

## Wichtige Fakten / Erkenntnisse
| Punkt | Wert |

## Anmerkungen zu dieser Zusammenfassung
> Wie das Transkript erstellt wurde; korrigierte falsch gehörte Begriffe; Aussagen, die der Sprecher falsch dargestellt hat (mit Korrektur); alles Unverständliche oder Unsichere.

Warum diese Form: Die Zeitleiste ermöglicht es dem Leser, ins Video zu springen; die Tabellen sammeln die Fakten, nach denen später gesucht wird; der Anmerkungsabschnitt hält dich ehrlich, was Transkriptionsfehler angeht. Sprach-zu-Text verstümmelt Produktnamen und Fachjargon, korrigiere sie aus dem Kontext und liste die Korrekturen auf. Überprüfe Fakten, die der Sprecher falsch darstellt, anstatt sie zu wiederholen.

Halte den Hauptteil quellenbasiert: Alles oberhalb des Anmerkungsabschnitts sollte aus dem Transkript oder meta.json stammen. Leser behandeln das Dokument als Aufzeichnung dessen, was das Video sagt, daher gehören Dinge, die du zufällig über das Video weißt (wer der Sprecher wirklich ist, wo es gedreht wurde, seine Geschichte), nicht in den Hauptteil, selbst wenn du dir sicher bist. Wenn solcher Kontext wirklich hilfreich ist, setze ihn in die Anmerkungen und kennzeichne ihn als „außerhalb des Videos“. Weise niemals Namen oder Pronomen zu, die das Video nicht nennt. Wenn die Videobeschreibung nichts mit dem Inhalt zu tun hat (wiederverwendete oder Spam-Beschreibungen sind üblich), ignoriere sie und erwähne dies in den Anmerkungen.

Passe die Größe des Dokuments an das Video an. Verwende <!-- pagebreak --> nur, um einen neuen größeren Teil eines langen Dokuments zu beginnen (z. B. jedes Kapitel eines mehrstündigen Streams), niemals nach der Deckblatt-Tabelle. Ein 2-minütiger Clip sollte auf ein oder zwei Seiten passen.

4. PDF rendern und prüfen

uv run ~/.claude/skills/youtube-summary/scripts/md_to_pdf.py "$OUT/summary.md" "$OUT/<Titel>.pdf"

Rendere Seite 1 und eine dichte Seite als PNG und sieh sie dir an, bevor du berichtest: uvx --with pypdfium2 --with pillow python -c "...". Gib dem Benutzer dann:

  • den absoluten Pfad der PDF und die Seitenzahl;
  • eine 3-5-zeilige Übersicht;
  • etwaige Einschränkungen: automatisch generiertes Transkript, Abschnitte, die unverständlich waren.

Die Audiodatei kann groß sein. Erwähne sie und lass den Benutzer entscheiden, ob sie gelöscht werden soll.

Fehlerbehebung

  • Sign in to confirm you're not a bot / HTTP 403 bei einem öffentlichen Video: warte und wiederhole. Wenn es bestehen bleibt, handelt es sich um ein IP- oder Ratenbegrenzungsproblem. Keine Schleife.
  • yt-dlp JS-Runtime-Warnungen: Das Skript übergibt --js-runtimes node, wenn Deno fehlt. Node 22+ wird benötigt.
  • Keine Transkriptwörter oder ein Transkript voller Müll: überprüfe die Sprache (--lang auto) oder führe erneut mit --force-audio aus.

Verwandte Skills