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 avecD:/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 :
- 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 ».
- 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.
- 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_targetssont seulement signalées, pas bloquées. - exit 0 = PASS (peut continuer) ; exit 1 = FAIL (interdiction d'entrer en génération payante) ;
--self-testpour 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) :
| Moment | Action |
|---|---|
| Après la rédaction, avant TTS | 工具_口号校验.py 工具_第XX期TTS.py → doit être PASS |
| Avant la soumission HeyGen | Vé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’échec | Revenir à 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秒.m4apour 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/*.jsonmis 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).
--checkgratuit →--clone --yespour cloner (règle voice_id : ≥8 caractères alphanumériques, commençant par une lettre ; utiliserhaifengv1) →--t2apour 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é danswindow.__timelines["main-video"]+ éléments avecdata-start/data-duration. - Rendu (environ 4,5–5 minutes machine, conserver
overlay_v2.movde 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) :
- L’élément racine doit avoir
data-composition-id="...", sinonHF_DE_COMPOSITION_ROOT_MISSING. - Le format d’image doit utiliser
data-width/data-height(data-composition-widthn’est pas lu → sortie 1080×1920 en portrait). - 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.comré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). - La sortie du rendu est 1920×1080, à l’étape de montage, redimensionner à 1072 pour aligner sur le film final.
- L’élément racine doit avoir
[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.
- 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 motBGM_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ément | Coût |
|---|---|
| ASR / ffmpeg / HyperFrames / synthèse BGM | 0 |
| Clonage MiniMax | 9,9 ¥ / timbre (facturé seulement à la première synthèse) ; TTS ≈0,02 ¥ / phrase |
| Clip test HeyGen | 13 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)
- Porte du slogan :
工具_口号校验.py <sub.ass> <发布文案.md>PASS (phrase définitive présente mot à mot, règles de la section [0] respectées). volumedetect: mean ≈ -17 dB / max ≤ -2,5 dB (pas d'écrêtage).- 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).
- 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.