Communitygithub.com

frankhzh-source/digital-human-video-pipeline

管线 de production vidéo avec humain numérique (validation complète en local ✅)

Qu'est-ce que digital-human-video-pipeline ?

Ce pipeline automatisé de production de vidéos avec humain numérique intègre une porte de contrôle de la cohérence du texte (SLOGAN / phrase de clôture), la synthèse vocale par clonage MiniMax, la synchronisation labiale via HeyGen avec avatar photo, la superposition d'effets transparents via HyperFrames et le montage final ffmpeg avec sous-titres, sons et BGM. Le système est entièrement validé sur le poste local à travers six étapes : de l'écriture à la livraison de la vidéo finale, avec une vérification obligatoire du slogan avant chaque action payante. Il supporte Windows et utilise des scripts Python avec des dépendances locales (faster_whisper, ffmpeg). La documentation détaille les coûts réels, les pièges rencontrés (comme les chemins de fichiers inversés dans les sous-titres ASS) et fournit une checklist de validation pour la qualité audio/vidéo.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add frankhzh-source/digital-human-video-pipeline

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Pipeline de production vidéo avec humain numérique (Validation complète en local ✅)

21/22 septembre 2026 — test réel : 74,8 s de narration → 15,6 s de clip test (avatar A7 + voix clonée MiniMax + habillage HyperFrames) — 0 échec sur l'ensemble du processus. Tous les scripts se trouvent dans D:\workbuddy\Claw\Claw, exécutés avec D:/Anaconda3/envs/ai/python.exe -X utf8 (faster_whisper dans cet environnement). 29 septembre 2026 — Ajout : [0] Porte de cohérence du texte — Les slogans / phrases de clôture ont été modifiés deux fois de manière non autorisée (voir section de la porte). Désormais, c'est une étape préalable avec droit de veto.

Aperçu du processus (Porte + six étapes)

[0] Porte de texte (obligatoire) → [1] Audio master → [2] Transcription ASR + table de découpage → [3] Clonage vocal MiniMax (recette B2)
    → [4] HeyGen photo avatar + lipsync → [5] HyperFrames calque transparent (ProRes4444)
    → [6] Montage ffmpeg (sous-titres / effets sonores / BGM / niveau sonore) → Livraison + miniature

[0] Porte de cohérence du texte (obligatoire, droit de veto, avant toute action de génération)

Contexte : Les slogans / SLOGAN / phrases de clôture ont été modifiés deux fois sans autorisation (28 sept. 2026 : les quatre questions d'ouverture ont changé de direction + perte du slogan, reprise 24 crédits ; 29 sept. 2026 : « occuper la source » remplacé par « cours obligatoire »). Leçon : la mémoire / la conscience ne sont pas fiables — les règles sont dans la mémoire, mais la violation se produit en cours de tâche, quand les règles ne sont plus dans le contexte. La solution est de remplacer la « conscience » par un « mécanisme » : registre + vérification scriptée + porte de validation humaine.

Trois règles d’airain :

  1. Le slogan / SLOGAN / phrase de clôture / signature doit être vérifié mot à mot par rapport à la source — la source = segment ANCHOR du script TTS segmenté ou source des sous-titres du film final. Interdiction de rédiger soi-même, interdiction de « micro-ajustements parlés ».
  2. Citer d'abord le texte source : après avoir rédigé un nouveau paragraphe, coller d'abord le texte source contenant le slogan mot à mot à l'utilisateur pour approbation, avant d'autoriser la génération.
  3. Passer la porte avant la génération payante : avant toute action utilisant des crédits (TTS, HeyGen, etc.), la vérification du slogan doit être PASS.

Opération (deux outils) :

  • Registre : 文案规范_定稿.json (source unique faisant autorité — tout nouveau slogan définitif doit être approuvé par l'utilisateur avant d'être enregistré).
  • Vérification : D:/Anaconda3/envs/ai/python.exe -X utf8 工具_口号校验.py <fichier_cible...>
    • Supporte .md/.txt/.json (lecture directe), .ass (extraction du texte des sous-titres sans balises), .py (extraction des chaînes littérales, couvre les constantes de texte TTS).
    • Normalisation automatique de la ponctuation / des espaces puis correspondance de sous-chaîne ; les cibles verrouillées closed_targets sont seulement signalées, pas bloquées.
    • exit 0 = PASS (peut continuer) ; exit 1 = FAIL (interdiction d'entrer en génération payante) ; --self-test pour autotest.
  • Documentation détaillée du mécanisme : references/copy-slogan-gate.md (version publiée).

Points d’insertion de la porte (à exécuter un par un à chaque édition) :

MomentAction
Après la rédaction, avant TTS工具_口号校验.py 工具_第XX期TTS.py → doit être PASS
Avant la soumission HeyGenVérification à nouveau (pour éviter la dérive due à des modifications intermédiaires)
Après montage final, avant publication工具_口号校验.py <sub.ass> <发布文案.md> → PASS seulement avant d’autoriser l’envoi à Feishu / la publication
En cas d’échecRevenir à la source et remplir mot à mot ; si c’est vraiment une nouvelle phrase définitive → approbation utilisateur → mise à jour du registre → relancer PASS

[1] Exigences du master

  • Fin de phrase complète (pas de version tronquée) ; niveau sonore -16 LUFS ; enregistrement propre de 30–90 s peut également servir de matériel d’enregistrement de clonage.
  • Utiliser 音频_口播原声_092211_句末收尾_69秒.m4a pour l’enregistrement du clonage (ne pas utiliser la version 74,8 s avec demi-phrase).

[2] Transcription ASR + table de découpage

D:/Anaconda3/envs/ai/python.exe -X utf8 工具_播客ASR转写.py <audio> --md 转写_xxx.md
  • Sortie : horodatages au niveau du mot (fichiers .asr_cache/*.json mis en cache, réexécution instantanée). Selon la transcription, découper environ 5 segments, marquer S1–S5 et les points d’information.
  • Segment de test : choisir 18–30 s : le plus représentatif est celui contenant des mélanges chinois/anglais et des pauses.

[3] Clonage vocal MiniMax + synthèse vocale

Outil : 工具_MiniMax声音克隆_通用.py (clé .secrets/minimax.key + minimax_group.txt, connexion directe au site national, pas de proxy nécessaire).

  • --check gratuit → --clone --yes pour cloner (règle voice_id : ≥8 caractères alphanumériques, commençant par une lettre ; utiliser haifengv1) → --t2a pour la synthèse vocale.
  • Recette vocale définitive « B2 » : speech-2.8-hd + speed:0.95, sans étiquette d'émotion (validation utilisateur : timbre acceptable, ton B2 acceptable).
  • Priorité des réglages pour un ton rigide : améliorer la formulation orale > speed 0.95 > emotion=happy > reclonage avec un matériel plus long.
  • Coût de référence : HD 3,5 ¥ / 10 000 caractères, une phrase < 0,01 ¥.

[4] Humain numérique HeyGen

Prérequis : le proxy doit être activé (vérification de l’écoute 127.0.0.1:7890 + test de connectivité mcp.heygen.com).

  • Outils : 工具_播客测试片A7_准备_2026-09-21.py (gratuit : vérification du quota / schéma / avatar / envoi audio) → 工具_播客测试片A7_提交_2026-09-21.py (porte --yes).
  • Avatar A7 + moteur avatar_v ; sortie vidéo en ~2 minutes, téléchargement puis inspection par probe.
  • ⚠️ Prix réel ~0,85 crédit / seconde (clip de 15,7 s testé à 13 crédits, 559→546). Avant de soumettre le clip complet, prendre d'abord un segment de 30 s au milieu pour estimer le coût.

[5] Calque transparent HyperFrames (animations de cartes / graphiques)

Projet : _cards_hf/compositions/v2_testcard.html (pour modifier le texte, ne changer que le texte et les horodatages).

  • Mode de pilotage : gsap.timeline({paused:true}) enregistré dans window.__timelines["main-video"] + éléments avec data-start / data-duration.
  • Rendu (environ 4,5–5 minutes machine, conserver overlay_v2.mov de 172 Mo jusqu'à la version définitive, ne pas supprimer en cours — le supprimer coûte 5 minutes de re-rendu) :
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"
  • ⚠️ Quatre pièges inévitables (tous résolus en pratique) :
    1. L’élément racine doit avoir data-composition-id="...", sinon HF_DE_COMPOSITION_ROOT_MISSING.
    2. Le format d’image doit utiliser data-width / data-height (data-composition-width n’est pas lu → sortie 1080×1920 en portrait).
    3. Le PATH de la machine de rendu doit contenir à la fois ffmpeg et ffprobe (D:\ffmpeg manquait ffprobe → npm i ffprobe-static --registry=https://registry.npmmirror.com résout en une minute ; ne pas télécharger le package de 114 Mo depuis gyan.dev — débit ~20 Ko/s avec coupures en Chine).
    4. La sortie du rendu est 1920×1080, à l’étape de montage, redimensionner à 1072 pour aligner sur le film final.

[6] Montage final ffmpeg et livraison

Outil : 工具_测试片v2合成_2026-09-22.py (copier pour chaque édition, ne modifier que les constantes SRC/OV/sous-titres/points en haut).

  • Chaîne : zoompan punch-in (5% à 8,45 / 13,25 s) → overlay ProRes4444 → Sous-titres ASS (le chemin ass= doit être un chemin relatif avec barres obliques, les barres obliques inverses sont échappées et perdues) → trois effets sonores (adelay pour synchronisation) → BGM de fond (sidechaincompress avec ducking vocal) → loudnorm -14 LUFS.
  • Sous-titres : découpage aux horodatages des mots, mot en surbrillance {\c&H6ABEE9&}mot{\r} (or BGR). Image miniature : image à 13,8 s.

Paradigmes BGM / effets sonores (documenté : 整理_知识类视频BGM与音效范式_2026-09-22.md)

Narration de connaissances = Paradigme BGM B « Accompagnement informatif » : le BGM est la lumière de la salle de classe, pas la musique de scène.

  1. Pas de mélodie (pincé, ne « chante pas ») ; 2. Registre médian / aigu C4+ (legato graves longues = drone d'ambiance = sensation d'oppression, leçon v2.2) ; 3. Espaces avec notes détachées ; 4. BPM 88–104 adapté au rythme de la parole ; 5. Fréquences évitant la voix humaine 300 Hz–3,4 kHz ; niveau -28 à -32 LUFS relatif à la voix + ducking sidechain (threshold 0,028 / ratio 7 / attack 180 ms / release 1000 ms).
  • Deux préréglages dans make_bgm_pluck (par défaut) / make_bgm_pad (A/B en réserve), changement par le mot BGM_STYLE ; pour changer de style, ne modifier que le tableau d’accords.

Trois effets sonores (recette fixe, ne changer que les points) : whoosh transition (lowpass ≤2400) → tick feedback (1,2–1,6 kHz, volume minimal) → thump accentuation (≤2 points d’exclamation dans toute la vidéo) ; rapport de volume : accentuation 0,24 : transition 0,22 : feedback 0,165 ; toute fenêtre de 2 s ≤ 1 point.

Registre des coûts (mesures réelles)

ÉlémentCoût
ASR / ffmpeg / HyperFrames / synthèse BGM0
Clonage MiniMax9,9 ¥ / timbre (facturé seulement à la première synthèse) ; TTS ≈0,02 ¥ / phrase
Clip test HeyGen13 crédits / 15,7 s ; estimation pour 69 s ~59 crédits, pour version 2:44 ~140 crédits

Checklist de validation (à parcourir après la sortie du film)

  1. Porte du slogan : 工具_口号校验.py <sub.ass> <发布文案.md> PASS (phrase définitive présente mot à mot, règles de la section [0] respectées).
  2. volumedetect : mean ≈ -17 dB / max ≤ -2,5 dB (pas d'écrêtage).
  3. Extraire 3 images (carte graphique / carte mot-clé / carte conclusion) : visage et mains non masqués (zones de sécurité : carte gauche 56–546 px, carte droite 1150–1860 px, titre supérieur 84 px, sous-titres inférieurs 200 px).
  4. Trois points d’écoute : début des 3 s avec dynamique, voix mise en avant, fin avec sensation de pause.

À faire (obligatoire avant la version définitive)

  • Approuver le master complet : version 69 s fin de phrase ou recoupage complet de 2:44 (version 74,8 s demi-phrase interdite).
  • Éléments supplémentaires pour le film complet : cartes de chapitre A7 ×5 segments, S4 affiché phrase par phrase, BGM étendu à une boucle de 4–8 mesures + conclusion, carte d’attention 3 s.

Skills associés