Communitygithub.com

EMzhe/erklärvideos-serie

Komplette Erstellung einer Erklärvideoserie (Planung → HTML-Animation/Text → Skript → Sprachaufnahme → Untertitel → 1080p Video → Douyin-Cover in Quer- und Hochformat). Beinhaltet vier Benutzerbestätigungen (Startfragen, Skriptprüfung, Sprachprobe, Synthesebestätigung) und Aussprachekorrekturen (z.B. „老子“ als lǎo zǐ).

Was ist erklärvideos-serie?

Dieses Skill automatisiert den gesamten Workflow zur Erstellung professioneller Erklärvideos direkt im AI-Agenten (z.B. Claude Code). Es unterstützt die Planung, die automatische Generierung von HTML-Animationsseiten (oder die Rückfalloption statischer PPT-Folien), die Erstellung von Sprechertexten, die Synthese von Sprachaufnahmen (über edge-tts), die Untertitelung und die finale Videokompilation in 1080p. Ein besonderes Merkmal sind die vier integrierten Prüfschwellen (Stages/Gates), die sicherstellen, dass der Benutzer die Richtung, das Skript, die Stimme und die finale Synthese vor der Auslieferung freigibt. Das Skill enthält zudem ein Style-Archiv (z.B. neochinesische Tuschemalerei, Sprachmodell Yunjian, weiße Schrift mit schwarzem Leuchtrand) und ein umfangreiches System zur Aussprachekorrektur, um TTS-Fehler bei klassischen Texten zu vermeiden. Der Workflow ist in acht Phasen unterteilt und erzeugt automatisch Douyin-Cover (Quer- und Hochformat). Es basiert auf einer zentralen JSON-Datendatei für das Skript und bietet eine Reihe von Python- und Node.js-Skripten zur Ausführung der einzelnen Schritte.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EMzhe/explainer-video-series/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Komplette Erstellung einer Erklärvideoserie

Aus einem „Thema“ wird eine „fertige Episode“: Planung → Seitenlayout (HTML-Animation) → Skript → Sprachaufnahme → Untertitel → 1080p MP4 → Douyin-Cover (Quer 16:9 + Hoch 9:16). Das Standard-Style-Archiv stammt aus der Praxis der Erklärvideoserie zum „Daodejing“ (neochinesische Tuschemalerei / männliche Stimme Yunjian / weiße Schrift mit schwarzem Leuchtrand). Die gesamte Vorlage ist wiederverwendbar und Punkt für Punkt überschreibbar.

Bildroute (Standard ab v2.0: HTML-Animation; v2.1: Text-Bild-Kooperation):

  • Standard: HTML-Animationsseite – Generiert eine HTML-Präsentationsseite mit Eingangsanimationen und Seitenübergängen (Crossfade) basierend auf dem Sprechertext. Deterministisches Rendern Bild für Bild in ein Video. Die Animation ist zu 100% synchron mit dem fertigen Video (Details und Layoutregeln siehe references/html-animation.md).
  • v2.1 Text-Bild-Kooperation: Integrierte SVG-Tuscheszenenbibliothek (Wasserwellen/Einsames Boot/Wellen/Berge/Tuschbambus/Mond betrachten/Koi) + Symbole für Aufzählungspunkte + Unterstützung für externe Bilder. Automatische Zuordnung basierend auf dem Sprechertext oder explizite Angabe. Grafikelemente werden zeitlich versetzt eingeblendet und zusammen mit Textanimationen einheitlich arrangiert.
  • Rückfall: Statische PPT-Folien + xfade (wenn native PPT-Tabellen/komplexe Layouts benötigt werden oder der Benutzer explizit eine .pptx-Datei wünscht).

Ab v2.3 Standardmäßig Douyin-Cover pro Episode: Querformat 16:9 + Hochformat 9:16. KI-generiertes Set basierend auf dem Thema (Querformat-Ankerpunkt → Benutzerbestätigung → Hochformat abgeleitet). Es werden keine Videoframes verwendet. Der Ablauf ist in Phase ⑥ und in references/douyin-covers.md beschrieben.

Fünf Startfragen (Jede Episode vor Beginn stellen; wenn der Benutzer „wie letztes Mal“ oder „wie gehabt“ sagt, werden alle Standardwerte übernommen und direkt gestartet)

  1. Worum geht es in dieser Episode? (Thema / Kapitel des klassischen Textes)
  2. Inhaltstiefe: Detaillierte Erklärung / Zusammenfassung der Kernpunkte? (Standard: Detaillierte Erklärung)
  3. Zielvideolänge? (Standard: 6-7 Minuten)
  4. Soll der PPT-Stil der neochinesischen Tuschemalerei beibehalten werden? (Standard: Ja)
  5. Soll die Stimme Yunjian und die Untertitel (weiße Schrift mit schwarzem Leuchtrand) beibehalten werden? (Standard: Ja)

Style-Archiv (Wird direkt übernommen, wenn der Benutzer keine Angaben macht)

PunktStandardwert
PPT-StilNeochinesische Tuschemalerei: Reispapier-Elfenbein + Tintenschwarz + Dunkelblaugrün + Zinnoberrot
SchriftartTitel SimSun (Song-Schriftart), Fließtext Microsoft YaHei (SlideDSL verwendet ausschließlich englische font-family)
BildelementeSVG-Tuscheillustrationen (keine KI-Bildgenerierung, 100% Originaltreue, beliebig oft änderbar)
AnimationHTML-Animationsseite: Titel blur-in / Aufzählungspunkte zeitversetzt fade-up / Seitenübergang Crossfade / cue-Punkt-Hervorhebung (Der Hinweis „Elementanimation wurde abgelehnt“ bezog sich auf den ffmpeg-Überlagerungsansatz; die deterministische HTML-Renderroute ist seit v2.0 validiert und umgesetzt)
Stimmezh-CN-YunjianNeural (Yunjian · Männlich · Volltönend)
Sprechgeschwindigkeit+0% (Einheitlich für die gesamte Episode; nur auf expliziten Wunsch des Benutzers ändern, nicht nach Inhaltsdichte segmentieren)
UntertitelWeiße Schrift + schwarzer Außenleuchteffekt (blur 0.8), transparenter Hintergrund, unten zentriert
Bildformat1920×1080 (16:9)
Aussprachekorrektur„老子“ → TTS liest „老紫“ (lǎo zǐ, literarische Lesart im dritten Ton), Untertitel zeigen weiterhin „老子“
Douyin-CoverQuerformat 16:9 + Hochformat 9:16; Episodenname in großen Vier-Zeichen-Schriftzügen; KI-generiertes Set (Ankerpunktkette), keine Videoframes

Arbeitsverzeichnis-Konvention

Erstelle im Arbeitsbereich ein Video-Arbeitsverzeichnis/. Jede Episode erhält ein eigenes Unterverzeichnis (benannt nach dem Thema):

Video-Arbeitsverzeichnis/{Episodenname}/
├── {BASE} Skript.json              # Einzige Datenquelle: Titel/Stimme/Aussprachekorrektur/Sprechertext pro Seite (+ Seiteninhalt)
├── {BASE} Skript_bearbeitbar.txt    # Exportiert von export_txt.py, zur Überprüfung durch den Benutzer im Editor
├── 01_deck/                        # deck.html (Animationspräsentationsseite, Vorschau möglich) + deck.json (Timeline-Liste)
├── 01_html_frames/                 # f_XXXXX.png Einzelframes + frames_manifest.json (HTML-Route)
├── 01_frames/                      # frame_01.png ... (Rückfallroute mit statischen PPT-Folien)
├── 02_audio/                       # slide_01.mp3 ... slide_NN.mp3 (Sprachaufnahmen pro Seite)
├── Sprachproben/                   # MP3-Sprachproben für verschiedene Stimmen + Sprachproben-Auswahlseite.html
└── 03_output/                      # Fertiges Video {BASE}(mit Untertiteln).mp4

BASE = Episodenname (wenn der Name „Skript“ enthält, wird es automatisch entfernt). Das Skript-JSON wird programmatisch mit Python json.dump erstellt. Das manuelle Schreiben von JSON mit chinesischen Anführungszeichen ist verboten (führt zu Escape-Fehlern). Die Coverleinwand {Episodenname}-Douyin-Cover.miora wird gemäß den Spezifikationen für generierte Medien im Stammverzeichnis des Arbeitsbereichs abgelegt, die PNGs in beiden Formaten im Verzeichnis _assets/.

Phasenweiser Ablauf (mit 4 Bestätigungstoren, jedes Tor erfordert die Antwort des Benutzers, bevor es weitergeht)

Vor Arbeitsbeginn (bei Erstnutzung oder Umgebungsproblemen) zuerst den Umgebungscheck durchführen: python scripts/doctor.py. Fehlende Komponenten (MISSING) ergänzen, dann starten. Rhythmus-Grundlinien, Tore-Liste, BGM und Änderungsumfangs-Tabelle siehe references/pacing-and-gates.md. (Integriert Methodik von liyupi/ai-promo-video-maker: Harte Rhythmusstandards / Datenvalidierung / Zwei-Tore-System / Änderungsdisziplin).

Phase ① Inhaltsplanung (Tor 1: Fünf Startfragen)

Nach der Bestimmung des Plans durch die fünf Fragen wird ein kurzes Planungspaket erstellt (Textstruktur / visuelles Konzept / Audiokonzept). Nach Zustimmung des Benutzers geht es weiter zu Phase ②.

Phase ② Seitenlayout (HTML-Animationsroute = Standard)

  • Kein PPT mehr: Direktes programmatisches Erstellen von {BASE} Skript.json. Pro Seite wird der Sprechertext unter text geschrieben. Pro Seite optional: title (Seitentitel), points (Array der Bildschirmeinträge), layout (title/bullets/quote/end), cues (Punkte-Hervorhebung, siehe unten) – Fehlen diese, werden sie automatisch aus dem Sprechertext abgeleitet (Regeln siehe references/html-animation.md), aber für die Produktion wird empfohlen, sie explizit anzugeben, um eine stabilere Qualität zu gewährleisten.
  • Die Seitenanzahl richtet sich nach der Inhaltstiefe (detaillierte Erklärung ca. 8 Seiten); Tabellen/Daten sollten weiterhin über die statische PPT-Rückfallroute laufen.

Phase ②′ PPT-Erstellung (Statische Rückfallroute)

  • Mit workbuddy-pptx (SlideDSL) die Folien erstellen. Die Seitenanzahl richtet sich nach der Inhaltstiefe (detaillierte Erklärung ca. 8 Seiten).
  • Sprechernotizen (notes) = Sprechertext pro Seite: Einmalig schreiben, mehrfach verwenden (Video-Sprachaufnahme / DOCX-Zeitachse / CapCut-Import).
  • Schriftartnamen auf Englisch verwenden (SimSun / Microsoft YaHei), chinesische Namen werden nicht gerendert.
  • Farben und Elemente gemäß Style-Archiv; Tabellen/Daten-Seiten bevorzugt mit nativen PPT-Elementen.

Phase ③ Skript-Finalisierung (Tor 2: Skriptprüfung)

  1. Sprechertext aus den PPT-Notizen extrahieren, programmatisch {BASE} Skript.json erstellen (Struktur siehe unten).

  2. Bearbeitbaren Text zur Überprüfung exportieren:

    python scripts/export_txt.py "{BASE} Skript.json"
    
  3. Den Benutzer ausdrücklich auffordern, die txt-Datei im Editor zu öffnen und Seite für Seite zu überprüfen. Nachdem der Benutzer die Änderungen zurückgegeben hat, zurück in JSON synchronisieren:

    python scripts/import_txt.py "{BASE} Skript.json" "{BASE} Skript_bearbeitbar.txt"
    

    Wenn der Benutzer nur mit „Text ok“ antwortet und keine Änderungen vornimmt, wird die Synchronisation übersprungen.

Phase ④ Sprachaufnahme (Tor 3: Sprachprobe, hartes Tor: voice_confirmed)

  1. Eine Hörproben-Seite generieren, damit der Benutzer die Stimme auswählen kann:

    python scripts/preview_voices.py Sprachproben
    
  2. Nach Auswahl des Benutzers die Stimme in das JSON schreiben und voice_confirmed=true setzen (Fehlt dieser Eintrag, verweigern TTS und Synthese die Ausführung):

    python -c "import json;p='{BASE} Skript.json';d=json.load(open(p,encoding='utf-8'));d['voice']='zh-CN-YunjianNeural';d['rate']='+0%';d['voice_confirmed']=True;json.dump(d,open(p,'w',encoding='utf-8'),ensure_ascii=False,indent=2)"
    

    Die Sprechgeschwindigkeit bleibt standardmäßig bei +0%; nur wenn der Benutzer explizit eine Änderung wünscht, wird sie angepasst, und zwar einheitlich für die gesamte Episode.

Phase ⑤ Video-Synthese (Tor 4: Vor der Synthese den Benutzer zur Freigabe auffordern)

Reihenfolge: Sprachsynthese → Animationsseite generieren → Frames rendern → Video synthetisieren (HTML-Route); oder Frames rendern → Sprachaufnahme → Video (statische Route).

HTML-Animationsroute (Standard):

  1. Sprachaufnahme pro Seite synthetisieren (Muss zuerst erfolgen – die Seitenlänge wird aus der tatsächlichen Sprachdauer ermittelt):

    python scripts/tts_synth.py --narration "{BASE} Skript.json" --out 02_audio
    
  2. Animationspräsentationsseite generieren (deck.html kann im Browser mit #preview zur Vorschau der Animation geöffnet werden):

    python scripts/gen_html_deck.py --narration "{BASE} Skript.json" --audio 02_audio --out 01_deck
    
  3. Einzelbild-Rendering (Nur das Animationsfenster rendern, in wenigen Minuten abgeschlossen):

    node scripts/render_html_frames.mjs --deck 01_deck --out 01_html_frames
    
  4. Video synthetisieren (concat der Bildsequenz + satzweise Untertitel, Standardstil weiße Schrift + schwarzer Leuchteffekt):

    python scripts/compose_html_video.py --deck 01_deck --frames 01_html_frames --audio 02_audio --narration "{BASE} Skript.json" --out 03_output
    

    Standardmäßig wird {BASE}(mit Untertiteln).mp4 erstellt; --also-plain erstellt zusätzlich eine Version ohne Untertitel; --bgm <Datei> fügt Hintergrundmusik hinzu (automatisches Ducking, die Musik wird leiser, wenn der Sprecher spricht; Musikbibliothek Mixkit, kostenlos und kommerziell nutzbar, muss vom Benutzer vorher gehört und genehmigt werden).

Statische PPT-Rückfallroute:

  1. Bildframes rendern (Bevorzugt PowerPoint COM, erfordert lokal installiertes PowerPoint):

    powershell -ExecutionPolicy Bypass -File scripts/export_frames.ps1 -Pptx "{BASE}.pptx" -OutDir 01_frames
    

    Wenn bereits ein PDF vorhanden ist, kann der pymupdf-Pfad verwendet werden: python scripts/pdf_to_frames.py "{BASE}.pdf" 01_frames 1920. Nach dem Rendern 3 Seiten stichprobenartig prüfen (Titelseite / eine seitenreiche Seite / eine Tabelle), um sicherzustellen, dass keine Schriftprobleme auftreten.

  2. Sprachaufnahme pro Seite synthetisieren: Wie oben tts_synth.py.

  3. Video synthetisieren (statische Seiten + xfade + satzweise Untertitel):

    python scripts/compose_video.py --frames 01_frames --audio 02_audio --narration "{BASE} Skript.json" --out 03_output
    
  4. Abnahme der Lieferung: Stichprobenartige Überprüfung der Ein-/Übergangsframes auf korrekte Animation und fehlende schwarze Blitze; Stichproben aus der Seitenmitte zur Überprüfung der Untertitel; Video-Tor ausführen: python scripts/verify_output.py --video "03_output/{BASE}(mit Untertiteln).mp4" --deck 01_deck (Spezifikation/Dauer/Lautstärke/schwarze Frames/Stille müssen alle bestanden werden, bevor ausgeliefert wird); Auslieferung mit present_files.

Phase ⑥ Douyin-Cover (Standard pro Episode: Querformat 16:9 + Hochformat 9:16)

Das Cover wird zusammen mit dem fertigen Video ausgeliefert, um ein direktes Hochladen auf Douyin zu ermöglichen. Es werden keine Videoframes verwendet – KI-generiertes Set basierend auf dem Thema der aktuellen Episode. Auslieferung von .miora-Leinwand + PNGs in beiden Formaten; Prompt-Vorlagen / Bedeutungsverzeichnis / Qualitätscheckliste siehe references/douyin-covers.md. Wird übersprungen, wenn der Benutzer explizit kein Cover wünscht.

  1. Text: Der Episodenname in vier Zeichen ist der einzige große Text auf dem Bild (z.B. „有无相生“); keine Untertitel in kleiner Schrift (wird unscharf); außer dem Haupttext keine weiteren Zeichen auf dem Bild.
  2. Ankerpunktkette (harte Regel): Querformat-Ankerpunkt (reine Text-zu-Bild 1920×1080) → Benutzerbestätigung → Hochformat wird vom Ankerpunkt als Referenzbild abgeleitet (1080×1920, vertikale Dreiteilung); der Stil-Token wird aus dem Original wiederverwendet, es ist verboten, zwei Bilder blind zu versenden.
  3. Visuelles: Gleicher Stil wie das fertige Video (Reispapier-Elfenbein + Tintenschwarz + Dunkelblaugrün + Zinnoberrot, Tuscheverlauf, klare Leerräume); Bildsprache aus dem Thema der aktuellen Episode (z.B. „有无相生“ → Vollmond + Spiegelung des Mondes im Wasser).
  4. Maße exakt angeben: Das Modell rundet möglicherweise auf 1920×1072 / 1072×1920 (8px Differenz); dies genau melden; wenn der Benutzer genaue Maße wünscht, werden die Ränder auf die Standardwerte ergänzt.
  5. Auslieferung: {Episodenname}-Douyin-Cover.miora im Stammverzeichnis des Arbeitsbereichs + Bildkarten in beiden Formaten; Cover-Text und Maße in Anforderungsbestätigung.md festhalten.

(Für 100% kontrollierten Text oder wiederverwendbare Vorlagen über mehrere Episoden hinweg, wechsle zu bearbeitbarem Design-Layout-Export; standardmäßig KI-generiert.)

Phase ⑦ Feintuning und Iteration

  • Pro Episode Verzeichnis Anforderungsbestätigung.md führen: Antworten auf die fünf Fragen + Aufzeichnung jeder Änderungsrunde (Benutzeroriginaltext archivieren). Nach Erhalt von Feedback zuerst notieren, dann ändern, nur die notwendigen Schritte wiederholen (Änderungsumfang → Tabelle der wiederholten Schritte siehe references/pacing-and-gates.md).
  • Anpassung des Untertitelstils/der Farbe → siehe references/subtitle-style.md (ASS-Farben sind BBGGRR umgekehrt, Lesen erforderlich).
  • Ausspracheprobleme → Nur tts_replacements ändern, TTS + Synthese erneut ausführen, Untertitel bleiben unverändert.
  • Untertitelsynchronisation → compose liest bevorzugt 02_audio/timing_XX.json (reale satzweise TTS-Timeline, automatisch von tts_synth erstellt).
  • Probleme mit Bild/Animation (HTML-Route) → Titel/points/visual/cues im Skript-JSON oder die Anordnung in gen_html_deck.py ändern → Deck neu generieren → Rendern → Synthese (Audio wird wiederverwendet, es sei denn, der Sprechertext wurde ebenfalls geändert).
  • Bildprobleme (statische Route) → PPT ändern, Frames neu exportieren, Audio wiederverwenden.
  • Cover-Änderungen → Wenn Text/Bildsprache nicht stimmen, nur das entsprechende Element neu erstellen; wenn der Gesamtstil nicht stimmt, neuen Ankerpunkt erstellen und davon ableiten (siehe references/douyin-covers.md).

Phase ⑧ Abnahme und Auslieferung (Selbstcheckliste)

  • Bild: Keine Anomalien bei Schriftart/Farbe; Tabellenseiten (falls vorhanden) korrekt gerendert
  • Animation: Titel/Aufzählungspunkte natürlich eingeblendet, flüssige Seitenübergänge, cue-Hervorhebung synchron mit dem Sprechertext (HTML-Route)
  • Sprachaufnahme: Gut hörbar, keine verschluckten Laute, einheitliche Sprechgeschwindigkeit im gesamten Video
  • Aussprache: Literarische Lesarten korrekt (z.B. „老子“ = lǎo zǐ)
  • Untertitel: Satzweise synchron mit der Sprachaufnahme, einheitlicher Stil, kein Überlauf/Beschnitt
  • Übergänge: Crossfade flüssig, keine schwarzen Blitze, keine leeren Frames
  • Dauer: ≈ Zieldauer (±10 Sekunden)
  • Format: 1920×1080 / H.264 / AAC / .mp4
  • Cover: Beide Formate, vier Zeichen vollständig, Stil einheitlich, Maße exakt angeben (Liste siehe references/douyin-covers.md)

Struktur des Skript-JSON (Einzige Datenquelle)

{
  "title": "Laozi Heutige Lesart-Das höchste Gut ist wie Wasser",
  "voice": "zh-CN-YunjianNeural",
  "rate": "+0%",
  "voice_confirmed": true,
  "tts_replacements": { "老子": "老紫" },
  "slides": [
    { "idx": 1, "text": "Sprechertext erste Seite……" },
    { "idx": 2, "text": "Sprechertext zweite Seite……",
      "title": "Drei Eigenschaften des Wassers", "points": ["Altruistisch, nährt alle Wesen", "Strebt nicht, nimmt gerne die untere Position ein"],
      "cues": [ { "t": 4.5, "dur": 0.9, "target": 0 } ] }
  ]
}
  • idx fortlaufend nummeriert ab 1, streng korrespondierend mit frame_XX.png (statische Route) / slide_XX.mp3.
  • Optionale Felder pro Seite für die HTML-Animationsroute: title (Seitentitel), points (Array der Bildschirmeinträge), layout (title/bullets/quote/end), cues (Punkte-Hervorhebung: t=relative Sekunde innerhalb der Seite, target=Index des Eintrags beginnend bei 0, dur=Dauer der Hervorhebung, action=pulse); Text-Bild-Kooperation (v2.1): visual (Tuscheszenen water/ripples/mountain/ bamboo/moon/fish, Standard automatische Zuordnung basierend auf Schlüsselwörtern im Sprechertext), icons (Eintragssymbole droplet/wave/mountain/moon/leaf), image (Pfad zu einem externen Bild, eingebettet in die rechte Spalte). Fehlen diese, werden sie automatisch aus dem Sprechertext abgeleitet; für die Produktion wird empfohlen, sie explizit anzugeben.
  • tts_replacements: Tabelle für Aussprachekorrekturen, wirkt sich nur auf die TTS-Eingabe aus, Untertitel und bearbeitbarer Text behalten die ursprünglichen Zeichen. Allgemeine Serien lassen {} leer.
  • voice_confirmed standardmäßig false, wird in Tor ③ auf true gesetzt, andernfalls verweigern die Skripte die Synthese.

Schnelle Hilfe bei häufigen Fehlern

SymptomUrsacheBehandlung
Rahmenfarbe der Untertitel entspricht nicht den ErwartungenASS-Farben sind BBGGRR umgekehrtRot=&H000000FF Blau=&H00FF0000 Schwarz=&H00000000
Literarische Lesart wird umgangssprachlich gelesen (z.B. 老子 lǎo zi)TTS verwendet standardmäßig die umgangssprachliche LesartZu tts_replacements hinzufügen und TTS erneut ausführen
PPT-Schriftart wird nicht gerendertChinesischer Name wird nicht erkanntSimSun / Microsoft YaHei verwenden
Ein-Schritt-Synthese führt zu weißem Bildschirm/Filterketten-Absturzxfade overlapped overlayIn zwei Schritten aufteilen: zuerst Basis, dann Overlay; Komma maskieren mit \,
Frame „erstellt“ aber nicht gefundenpymupdf schlägt still fehlSkript verwendet bereits abspath + Überprüfung nach dem Schreiben; oder export_frames.ps1 verwenden
Fehler --rate -10% „expected one argument“argparse interpretiert die Option falsch--rate=-10% verwenden oder nur das rate im JSON ändern
Synthese meldet „Sprache wurde noch nicht bestätigt“Tor ③ fehltvoice_confirmed=true setzen und erneut ausführen
Fehler beim Schreiben von chinesischen Anführungszeichen in JSONManueller Escape-FehlerPython json.dump programmatisch verwenden
Deck-Generierung meldet „Sprache fehlt“HTML-Route erfordert zuerst TTSZuerst tts_synth.py, dann gen_html_deck.py ausführen
Rendering meldet „Chromium nicht gefunden“Browser-Pfad hat sich geändertMit --browser den Pfad zu chrome.exe / msedge.exe angeben
Titelseite nicht zentriertCSS-Klassenselektor-Schreibweise.inner.layout-title verwenden (gleichartige Elemente), keine Nachkommen-Selektoren
Einträge werden aufgesplittert (nummerierte Kurzsätze als separate Einträge)Nummerierte Kurzsätze nicht zusammengeführtgen_html_deck.py führt sie bereits standardmäßig zusammen; benutzerdefinierte points können dies vollständig vermeiden
Dauer des letzten Frames im fertigen Video falschEigenart von concat bei der letzten Dateicompose_html_video.py fügt die letzte Datei bereits standardmäßig wiederholt an, nicht löschen
cue-Hervorhebung erscheint nichtcue überschreitet die SeitenlängePrüfen, ob t in slides[].cues kleiner ist als die Sprachdauer dieser Seite
Fehlende/falsche Zeichen in den großen Cover-SchriftzügenKI rendert lange chinesische Sätze instabilText auf vier Zeichen reduzieren und neu erstellen; wenn der Ankerpunkt falsche Zeichen hat, zuerst den Ankerpunkt neu erstellen und dann ableiten
Kurze Seite des Covers ist 1072 ≠ 1080Modell rundetTatsächliche Maße liefern (das Seitenverhältnis ist immer noch ≈16:9 / 9:16); für genaue Maße Ränder auf 1920×1080 / 1080×1920 ergänzen
Zwei Cover sehen nicht wie ein Set ausZwei reine Text-zu-Bild-Bilder driften unabhängig voneinander abAnkerpunktkette ist zwingend: Hochformat wird vom Querformat-Ankerpunkt als Referenzbild abgeleitet

Vollständige Liste der Fallstricke und Architekturerfahrungen siehe references/pitfalls.md; Details zur HTML-Animationsroute siehe references/html-animation.md.

Ressourcen

  • scripts/doctor.py — Umgebungscheck (vor jeder Episode ausführen, fehlende Komponenten ergänzen, dann starten)
  • scripts/verify_output.py — Video-Tor (Spezifikation/Dauer/Lautstärke/schwarze Frames/Stille, nur bei Bestehen aller Prüfungen ausliefern)
  • scripts/gen_html_deck.py — Skript → Text-Bild-Kooperations-Animations-HTML-Präsentationsseite + deck.json-Liste (Einstiegspunkt HTML-Route)
  • scripts/render_html_frames.mjs — Deterministisches Einzelbild-Rendering mit Playwright (nur das Animationsfenster rendern, statische Abschnitte verwenden den letzten Frame wieder)
  • scripts/compose_html_video.py — Synthese von Bildsequenz + Sprachaufnahme + Echtzeit-Untertiteln + BGM Ducking (HTML-Route)
  • scripts/tts_synth.py — Batch-Synthese mit edge-tts (Aussprachekorrektur + reale satzweise Timeline + voice_confirmed-Tor)
  • scripts/compose_video.py — Synthese von statischen Seiten + xfade + satzweisen Untertiteln (statische Rückfallroute)
  • scripts/export_txt.py / scripts/import_txt.py — Bidirektionale Synchronisation von Skript und bearbeitbarer txt
  • scripts/preview_voices.py — Vergleichsseite für fünf Sprachproben (offline abspielbar)
  • scripts/export_frames.ps1 — PowerPoint COM Export von 1920×1080 Bildframes (bevorzugte statische Route)
  • scripts/pdf_to_frames.py — pymupdf Rendern von PDF-Frames (alternative statische Route)
  • references/douyin-covers.md — Douyin-Cover-Komplettablauf: Textregeln / Prompt-Vorlagen / Ankerpunktkette / Qualitätscheckliste (Standard: beide Formate pro Episode)
  • references/html-animation.md — HTML-Animationsroute: Machbarkeitsergebnis / Layoutregeln / Fallstricke (Lesen erforderlich)
  • references/pacing-and-gates.md — Rhythmus-Grundlinien / Datenvalidierung / Zwei-Tore-System / BGM / Änderungsumfangs-Tabelle (Lesen erforderlich)
  • references/playbook.md — Komplette Ablaufanleitung: Checkliste / Technologie-Stack / Optimierungsroute
  • references/pitfalls.md — Fallstrickliste und Architekturerfahrungen
  • references/subtitle-style.md — ASS-Untertitel-Stilhandbuch (Farbumkehrung / Leuchteffekt / Stilvorlagen)
  • assets/narration-template.json — Skript-JSON-Vorlage

Abhängigkeiten: playwright-core (im Stammverzeichnis des Skills unter node_modules, bereits installiert); Chromium-Erkennungsreihenfolge ms-playwright-Cache → System-Edge, falls beide fehlen, mit --browser angeben.

Verwandte Skills