Pipeline zur Erstellung von Digital-Human-Videos (lokal vollständig verifiziert ✅)
Am 2026-09-21/22 getestet: 74,8s Voice-Over → 15,6s Testclip (A7-Erscheinungsbild + MiniMax Sprachklon + HyperFrames Compositing) war zu 100 % erfolgreich. Alle Skripte befinden sich unter
D:\workbuddy\Claw\Clawund werden mitD:/Anaconda3/envs/ai/python.exe -X utf8ausgeführt (faster_whisper befindet sich in dieser Umgebung). Ergänzung vom 2026-09-29: [0] Textkonsistenz-Gate – Slogans/Schussformulierungen wurden zweimal ungewollt umformuliert (siehe Gate-Abschnitt); nun ein obligatorischer, vorentscheidender Schritt.
Prozessübersicht (Gate + 6 Schritte)
[0] Text-Gate (obligatorisch) → [1] Master-Audio → [2] ASR Transkription + Segmenttabelle → [3] MiniMax Sprachklon (B2-Rezeptur)
→ [4] HeyGen Foto-Avatar + Lipsync → [5] HyperFrames transparente Overlays (ProRes4444)
→ [6] ffmpeg Compositing (Untertitel/Soundeffekte/BGM/Lautstärke) → Endclip + Cover
[0] Textkonsistenz-Gate (obligatorisch, Veto, vor allen Generierungsschritten)
Hintergrund: Slogans/Schussformulierungen wurden zweimal ungewollt umformuliert (am 2026-09-28 wurden die ersten vier Fragen umformuliert + der Slogan verloren, Nacharbeit 24 Credits; am 2026-09-29 wurde „Quelle besetzen“ durch „Pflichtfach“ ersetzt). Lektion: Sich auf Erinnerung/Disziplin zu verlassen, ist unzuverlässig – Regeln stehen im Gedächtnis, Verstöße passieren mitten in der Aufgabe, wenn die Regeln nicht mehr im Kontext sind. Die Lösung ist, „Disziplin“ durch „Mechanismus“ zu ersetzen: Registry + Skript-Hard-Validierung + manuelles Gate.
Drei eiserne Regeln:
- Slogans/Schussformulierungen müssen Zeichen für Zeichen mit der Quelle abgeglichen werden – Quelle = ANCHOR-Abschnitt der segmentierten TTS-Skripte oder die Untertitelquelle des Endclips. Eigenformulierungen und „Voice-Over-Anpassungen“ sind verboten.
- Zuerst den Originaltext zitieren: Bevor ein neuer Absatz erstellt wird, muss der Originaltext mit dem Slogan dem Benutzer vorgelegt werden; erst nach Bestätigung darf die Generierung fortgesetzt werden.
- Vor kostenpflichtiger Generierung das Gate passieren: Vor Aktionen, die Credits kosten (TTS/HeyGen usw.), muss die Slogan-Prüfung bestanden sein.
Vorgehen (zwei Komponenten):
- Registry:
文案规范_定稿.json(einzige autoritative Quelle; neu festgelegte Sätze müssen vom Benutzer bestätigt und dann eingetragen werden). - Prüfung:
D:/Anaconda3/envs/ai/python.exe -X utf8 工具_口号校验.py <Zieldateien...>- Unterstützt .md/.txt/.json (direktes Einlesen), .ass (Tags entfernen, Untertiteltext extrahieren), .py (String-Literale extrahieren, deckt TTS-Konstanten ab).
- Automatische Normalisierung von Interpunktion/Leerzeichen, dann Substring-Matching;
closed_targetswerden nur gemeldet, nicht blockiert. - exit 0 = PASS, Generierung kann fortgesetzt werden; exit 1 = FAIL, kostenpflichtige Generierung gesperrt;
--self-testfür Selbsttest.
- Detaillierte Mechanismuserklärung:
references/copy-slogan-gate.md(Veröffentlichungsversion).
Gate-Einbettungspunkte (jeweils nacheinander bei jeder Episode ausführen):
| Zeitpunkt | Aktion |
|---|---|
| Nach dem Entwurf, vor TTS | 工具_口号校验.py 工具_第XX期TTS.py → muss PASS sein |
| Vor HeyGen-Übermittlung | Erneute Prüfung (verhindert Drift durch Zwischenänderungen) |
| Nach Final-Compositing, vor Veröffentlichung | 工具_口号校验.py <sub.ass> <Veröffentlichungstext.md> → PASS erlaubt Veröffentlichung via Feishu/anderweitig |
| Fehlerbehandlung | Zeichen für Zeichen aus der Quelle zurücksetzen; bei tatsächlich neuen Sätzen → Benutzerentscheid → Registry aktualisieren → erneut PASS |
[1] Master-Anforderungen
- Satzende vollständig (keine abgeschnittenen Versionen); Loudness -16 LUFS; 30–90s saubere Aufnahme kann auch als Klon-Registrierungsmaterial dienen.
- Für die Klon-Registrierung
音频_口播原声_092211_句末收尾_69秒.m4averwenden (nicht die 74,8s Halbsatz-Version).
[2] ASR Transkription + Segmenttabelle
D:/Anaconda3/envs/ai/python.exe -X utf8 工具_播客ASR转写.py <Audio> --md 转写_xxx.md
- Ausgabe mit Wort-Zeitstempeln (
.asr_cache/*.jsonwird gecacht; Wiederholung ist sofort); basierend auf der Transkription in ca. 5 Segmente unterteilen, S1–S5 markieren und Informationspunkte notieren. - Testsegment 18–30s wählen: Abschnitte mit gemischtem Chinesisch/Englisch und Pausen sind am repräsentativsten.
[3] MiniMax Sprachklon + Vertonung
Tool: 工具_MiniMax声音克隆_通用.py (Schlüssel .secrets/minimax.key + minimax_group.txt, direkte Verbindung über Inlandsserver, kein Proxy nötig).
--checkkostenlos →--clone --yesklonen (voice_id-Regel: ≥8 alphanumerische Zeichen, beginnend mit Buchstaben,haifengv1verwenden) →--t2avertonen.- Vertonungsrezeptur finalisiert als „B2“:
speech-2.8-hd+speed:0.95, keine Emotions-Tags (Benutzerabnahme: Klangfarbe okay, B2-Tonfall akzeptabel). - Priorität bei der Anpassung von steifem Tonfall: Skript umgangssprachlicher machen > speed 0.95 > emotion=happy > längeres Material neu klonen.
- Kostenreferenz: HD 3,5 Yuan pro 10.000 Zeichen, ein Satz < 1 Cent.
[4] HeyGen Digital Human
Voraussetzung: Proxy muss aktiv sein (Überwachung 127.0.0.1:7890 + Konnektivitätstest mcp.heygen.com).
- Tools:
工具_播客测试片A7_准备_2026-09-21.py(kostenlos: Kontingent/Schema/Erscheinungsbildprüfung/Audio hochladen) →工具_播客测试片A7_提交_2026-09-21.py(--yesGate). - Erscheinungsbild A7 + avatar_v Engine; Clip innerhalb von Minuten fertig, nach Download probieren und abnehmen.
- ⚠️ Tatsächlicher Preis ~0,85 Credits/Sekunde (15,7s Clip getestet mit 13 Credits, 559→546). Vor dem Einreichen eines Langclips zuerst mit einem 30s Mittelteil die Kostenabschätzung überprüfen.
[5] HyperFrames transparente Overlays (Karten/Diagramm-Animationen)
Projekt: _cards_hf/compositions/v2_testcard.html (für Textänderungen nur Text + Zeitstempel anpassen).
- Steuerungsmodus:
gsap.timeline({paused:true})inwindow.__timelines["main-video"]registrieren + Elementedata-start/data-duration. - Rendern (ca. 4,5–5 Minuten Rechenzeit, overlay_v2.mov 172MB bis zur Finalisierung aufbewahren, nicht zwischendurch löschen – einmal gelöscht, erneutes Rendern 5 Minuten):
export PATH="/d/ffmpeg:/c/Users/admin/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin:$PATH"
cd _cards_hf && npx hyperframes render -c compositions/v2_testcard.html -f 25 --format mov \
-o "../_v2/overlay_v2.mov"
- ⚠️ Vier unvermeidliche Fallstricke (alle getestet und gelöst):
- Wurzelelement muss
data-composition-id="..."haben, sonstHF_DE_COMPOSITION_ROOT_MISSING; - Bildformat mit
data-width/data-heightverwenden (data-composition-widthwird nicht gelesen → Ausgabe Hochformat 1080×1920); - Im Rendering-PATH müssen sowohl ffmpeg als auch ffprobe vorhanden sein (D:\ffmpeg hatte einmal kein ffprobe →
npm i ffprobe-static --registry=https://registry.npmmirror.comlöst in einer Minute; nicht das 114MB Paket von gyan.dev herunterladen – in China ~20KB/s und bricht ab); - Rendering-Ausgabe 1920×1080, bei Compositing auf 1072 skalieren, um mit dem Endclip übereinzustimmen.
- Wurzelelement muss
[6] ffmpeg Compositing Auslieferung
Tool: 工具_测试片v2合成_2026-09-22.py (für jede Episode kopieren, nur die Konstanten für SRC/OV/Untertitel/Positionen oben ändern).
- Kette: zoompan Punch-In (bei 8,45/13,25s je 5%) → overlay ProRes4444 → ASS-Untertitel (
ass=Pfad muss relativer Pfad mit Schrägstrichen sein; Backslashes werden maskiert und verschluckt) → Soundeffekte-Dreierpaket (adelay für Timing) → BGM-Bett (sidechaincompress für Sprachducking) → loudnorm -14 LUFS; - Untertitel: Wort-Zeitstempel-Segmentierung, Hervorhebungen
{\c&H6ABEE9&}Wort{\r}(BGR Gold); Cover als Frame bei 13,8s.
BGM / Sound-Design-Schema (bereits dokumentiert: 整理_知识类视频BGM与音效范式_2026-09-22.md)
Wissens-Voice-Over = BGM-Schema B „Informationsbegleiter“: BGM ist das Licht im Klassenzimmer, nicht die Bühnenmusik.
- Ohne Melodie (Pluck/Zupfen, nicht „singend“); 2. C4+ mittlerer bis hoher Tonbereich (lange Töne im Bassbereich = Atmosphäre-Drone = bedrückend, Lektion aus v2.2); 3. Stakkato mit Pausen; 4. BPM 88–104 angepasst an Sprechgeschwindigkeit; 5. Frequenzbereich unter 300Hz–3,4kHz ausweichen; Lautstärke -28~-32 LUFS relativ zur Stimme + Sidechain-Ducking (threshold 0.028 / ratio 7 / attack 180ms / release 1000ms).
- Zwei Voreinstellungen in
make_bgm_pluck(Standard) /make_bgm_pad(A/B Alternative),BGM_STYLEwechselt per Wort; für andere Stile nur die Akkordtabelle ändern.
Soundeffekte-Dreierpaket (Rezeptur fest, nur Positionen ändern): whoosh Übergang (lowpass ≤2400) → tick Rückmeldung (1,2–1,6kHz, niedrigste Lautstärke) → thump Betonung (max. 2 Ausrufezeichen im gesamten Clip); Lautstärkeverhältnis Betonung 0,24 : Übergang 0,22 : Rückmeldung 0,165; in jedem 2s-Fenster maximal 1 Punkt.
Kosten-Ledger (gemessene Werte)
| Posten | Kosten |
|---|---|
| ASR / ffmpeg / HyperFrames / BGM Compositing | 0 |
| MiniMax Klon | 9,9 Yuan/Timbre (nur bei erster Synthese); TTS ≈0,02 Yuan/Satz |
| HeyGen Testclip | 13 Credits / 15,7s; 69s Langversion geschätzt ~59 Credits, 2:44 Version geschätzt ~140 |
Abnahmeliste (nach Clip-Erstellung Punkt für Punkt durchgehen)
- Slogan-Gate:
工具_口号校验.py <sub.ass> <Veröffentlichungstext.md>PASS (finalisierte Sätze Zeichen für Zeichen vorhanden, eiserne Regeln aus Abschnitt [0]); volumedetect: mean ≈ -17dB / max ≤ -2.5dB (kein Clipping);- 3 Frames prüfen (Zeitpunkte von Diagramm-Karten / Schlüsselwort-Karten / Fazit-Karten): Gesicht und Hände nicht verdeckt (Sicherheitszone: linke Karte 56–546px, rechte Karte 1150–1860px, oberer Titel 84px, untere Untertitel 200px);
- Höreindruck drei Punkte: erste 3s haben Dynamik, Stimme ist präsent, Ende hat ein Gefühl des Verweilens.
ToDo (vor Finalisierung zwingend erledigen)
- Lang-Master-Version entscheiden: 69s Satzende-Version oder 2:44 vollständigen Abschnitt neu zuschneiden (74,8s Halbsatz-Version deaktiviert);
- Langclip-Erweiterungen: A7 Abschnittskarten ×5 Segmente, S4 Satz-für-Satz auf Bildschirm einblenden, BGM auf 4–8 Takte Schleife + Outro erweitern, 3s Aufmerksamkeitskarte.