Communitygithub.com

BigBeeCN/vertical-talking-head-edit

Montage de courtes vidéos verticales (9:16) pour TikTok, WeChat Video et Kuaishou à partir de rushes existants (talking heads + plans de coupe) sous Windows avec Codex + Jianyin.

Qu'est-ce que vertical-talking-head-edit ?

Ce skill permet de transformer des rushes bruts (interviews, plans de coupe) en vidéos verticales de 30 à 50 secondes prêtes pour les plateformes comme TikTok, WeChat Video et Kuaishou. Il est conçu pour Windows avec l’agent Codex et le logiciel de montage Jianyin (剪映). L’utilisateur fournit des rushes (pas de tournage), et le skill produit un storyboard complet, une vidéo montée, des sous-titres (SRT), un rapport de contrôle qualité (QC), et optionnellement un projet Jianyin ou des calques de surcouche en ProRes 4444. Le flux de travail inclut l’inventaire des rushes, la transcription avec Whisper (avec étalonnage humain), la réorganisation narrative en 3–4 points forts, l’écriture du storyboard JSON (spec.json), le montage précis image par image avec détection d’énergie, les animations typographiques et effets spéciaux (deux niveaux : normal et moment fort), la gestion audio (mixage, compression, sonorisation, conformité LUFS -14), le rendu final H.264 ou Jianyin (route A) ou parcalques Playwright + ProRes (route B), et un contrôle qualité rigoureux. Le tout est supporté par des fichiers de configuration et de commandes Windows.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/BigBeeCN/Video-Edit-Skills/tree/HEAD/.agents/skills/vertical-talking-head-edit

Demander à votre IA préférée

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

Documentation

Montage de vidéos verticales avec rushes réels (Windows + Codex + Jianyin)

Contexte : vous disposez de rushes fournis par quelqu’un d’autre (talking head + plans de coupe). Vous devez produire une vidéo verticale de 30 à 50 secondes, en 1080×1920, destinée aux réseaux sociaux, et laisser éventuellement le monteur finaliser dans Jianyin ou exporter directement.

Règle absolue (non négociable) : voir references/AGENTS_rules.md. Lisez-la avant toute action. Ce fichier ne décrit que le processus.

Entrée

  • Répertoire des rushes (lecture seule — ne jamais modifier les originaux ; copiez d’abord dans votre répertoire de travail).
  • Habitudes de style du monteur (si connues). Les habitudes déclarées par le monteur sont la référence absolue ; les vidéos de référence sont une source d’inspiration technique, pas de paramètres. En cas de conflit, suivez le monteur.
  • Optionnel : vidéo de référence, emplacement du logo, texte CTA de fin (n’inventez jamais de numéro de téléphone ou d’adresse non vérifiés).

Sortie

  • spec.json (storyboard, seule source de vérité pour le montage), montage brut ou final (mp4), .srt, mosaïque de contrôle qualité image par image, rapport QC.
  • Route A supplémentaire : projet Jianyin. Route B supplémentaire : calque de surcouche transparent ProRes 4444 .mov.

Étape 0 : Auto-vérification de l’environnement (ne pas commencer sans)

Exécutez l’auto-vérification selon references/windows_env.md : ffmpeg complet (avec zscale, tonemap, prores_ks), Python 3.10/3.11, faster-whisper + whisperX, Playwright + Chromium + police chinoise cible, optionnellement demucs / RVM ; le répertoire des projets Jianyin doit être configuré et ajouté à writable_roots. Le bac à sable Codex est hors ligne par défaut : les modèles et dépendances doivent être préinstallés. Signalez les échecs sans forcer. Les commandes spécifiques sont dans references/windows_commands.md.

Étape 1 : Inventaire des rushes

  1. ffprobe chaque fichier : résolution, framerate (variable ?), rotation, durée, transfert colorimétrique (HLG/PQ = HDR). Écrivez dans inventory.csv.
  2. N’exportez pas de fichiers intermédiaires SDR : appliquez les conversions à la volée dans le filtre de lecture. Tous les rushes : fps=30. Pour les rushes HDR, la chaîne de filtres commence par une conversion HDR→SDR (sinon l’image est grise — idem pour l’extraction d’une image de couverture ; commandes dans windows_commands.md section 2).
  3. Pour chaque rush, extrayez une miniature et étiquetez : contenu, personnage(s), plage utilisable, occultation/noir/début sombre, marque d’autrui. Signalez les rushes et plages inutilisables.
  • Vérification : chaque rush a une étiquette ; les rushes avec transfert arib-std-b67 ou smpte2084 ont une chaîne de filtres commençant par la conversion HDR.

Étape 2 : Transcription et relecture

  1. faster-whisper en mode brut : modèle medium, device='cpu', compute_type='int8', language='zh', vad_filter=True, word_timestamps=True, initial_prompt avec vocabulaire métier. Le VAD peut sauter des phrases : relancez avec vad_filter=False et condition_on_previous_text=False.
  2. Relecture humaine obligatoire de l’intégralité du texte : mots techniques, chiffres, homophones ; Whisper hallucine parfois des phrases inexistantes — supprimez-les. Supprimez les mots inaudibles sans deviner.
  3. Avant la transcription, extrayez un fichier WAV 16 kHz mono avec ffmpeg, puis passez-le à whisper. Envoyez le texte relu à whisperX pour alignement forcé (résultat dans le champ align du spec), pour obtenir le début mot par mot (tolérance 0–3 images). La fin de mot whisperX est peu fiable : utilisez la détection d’énergie pour la fin.
  • Vérification : pas de mot technique ou chiffre non relu ; chaque phrase a un début mot par mot.

Étape 3 : Réorganisation narrative (d’abord le récit, ensuite les effets)

  1. La 1ʳᵉ seconde est un accroche : « contraste + résultat », avec les mots exacts. Pas de plan de coupe ni logo au début.
    • L’accroche peut assembler deux phrases non adjacentes, mais chaque moitié doit porter src_t. Le sens original doit être préservé.
    • Deux options (à écrire dans spec) : la 1ʳᵉ phrase commence normalement avec un gros titre ; ou la phrase de résultat (≤3 s) est placée en ouverture « à froid », puis le retour à l’ordre normal.
  2. Supprimez les phrases qui ne font pas avancer l’histoire (slogans, préparations, répétitions). Objectif : 30–50 secondes.
  3. Identifiez 3–4 points forts narratifs (accroche / changement de scène / point culminant / phrase conclusive). Les moments forts (explosifs) uniquement à ces endroits. Le point culminant a la priorité maximale, l’accroche vient ensuite. Deux points forts espacés d’au moins 6 secondes. Une vidéo de ~30 s a 3 points forts, ~50 s en a 4.
  • Vérification : chaque texte à l’écran peut être retrouvé dans la transcription avec son horodatage, et le contexte est vérifié (un même mot peut avoir un sens différent dans une autre phrase).

Étape 4 : Rédiger le storyboard spec.json, demander validation

Voir references/spec_schema.md pour les champs, et references/kw_class.example.json pour les catégories de mots-clés (les exemples sont liés à un projet ; réécrivez pour chaque projet). Chaque segment doit préciser : rush source et points d’entrée/sortie, mise en page, sous-titres, kw_class, préréglages d’effets, B-roll, effets sonores, section musicale, src_t (horodatage des mots exacts). Avant le rendu, envoyez le storyboard à l’utilisateur pour validation.

Étape 5 : Montage

  1. Détection des points d’entrée/sortie par énergie RMS sur des fenêtres de 10 ms (pas de fin de mot Whisper). Coupez net les silences : inspirations, paroles inutiles — rien.
    • Méthode éprouvée : découpez d’abord par énergie (seuil = max(10ᵉ percentile + 14 dB, −48 dBFS), 3 fenêtres de 10 ms consécutives pour considérer une parole, marge avant = 0,10 s, marge après = 0,14 s), puis resserrage manuel. Vérifiez que la longueur cumulée des silences (sous −42 dBFS) autour des points de coupe est ≤ 90 ms.
    • Objectif du monteur : 1 à 2 images (≤67 ms) avant le début de chaque mot. Non encore testé selon cette norme (à valider). Méthode de validation : isolez la voix avec demucs, mesurez du point de coupe au début de 3 fenêtres de 10 ms consécutives au-dessus de −42 dBFS. Validez : chaque point ≤67 ms, la consonne initiale n’est pas coupée, et la ré-exécution de l’ASR sur le segment coupé ne montre pas de mot coupé. Ensuite, adoptez par défaut.
    • Possibilité de produire une version avec 2–3 images entre les phrases, pour que le monteur choisisse.
  2. Exportez chaque segment image par image : -ss avant -i, -vf avec fps=30, durée fixe via -frames:v nf (nf = round((sortie − entrée) × 30)), codec libx264 -preset veryfast -crf 12, avec les 3 marqueurs de couleur BT.709 ; audio assemblé point par point, avec 8 ms de fondu entrant et 15 ms de fondu sortant par segment pour éviter les clics.
  3. Les jump cuts sur le même plan doivent inclure un zoom avant/arrière de ×1,08 ; l’entrée/sortie du B-roll se fait avec un « whip pan » + flou horizontal.
  4. Le B-roll n’est inséré que lorsque la voix mentionne son contenu. Ne forcez pas de B-roll pour le rythme.

Étape 6 : Effets de sous-titres et animations (deux niveaux)

Niveau normal : toutes les 1,5 à 2 secondes, intervalle max ≤3 secondes, sobre.

  • Sous-titres en bas : blanc avec contour noir, max 12 caractères par ligne, apparaissant en phrase entière (la coloration des mots-clés est un paramètre laissé au monteur).
  • Accentuation au niveau intermédiaire : gros caractères dorés (mots-clés ×1,75, chiffres ×2), entrée caractère par caractère de 115 % à 100 %, sur 6–8 images ; possibilité d’ajouter des soulignements/cercle dessinés à la main, grain de papier, ombre douce.
  • Techniques optionnelles : animation de chiffres, incrustation d’objets avec bruitage correspondant, listes cumulatives (taille de police ≥1,2× celle des sous-titres du bas, puis agrandissement), phrases choc verticales en vis-à-vis (cacher le sous-titre identique en bas), étiquette d’identité au début (utilisation unique, préciser « pas les mots exacts »).

Niveau « point fort » (explosif) : 3–4 au total, comptabilisés dans la densité générale, chaque occurrence maximale :

  • Grands caractères : 75–85 % de la largeur de l’image (85 % est le max ; priorité à la zone de sécurité) ; zoom avant de ×1,15 à ×1,25 en 4 images ; tremblement d’écran sur 2–3 images avec flou de mouvement ; arrière-plan assombri de 6–30 %, légère désaturation (paramètres à régler pour que le visage reste net sur un téléphone) ; le calque de la personne n’est pas coloré ; effet sonore composé pré-mixé (compté comme 1).
  • Gradation de la puissance : le plus fort a un zoom de ×1,25 et un tremblement de 3 images ; les autres ×1,15 et 2 images.
  • Chaque technique utilisée une seule fois dans toute la vidéo : texte derrière le personnage (incrustation) / transition par masque de texte / défilement de chiffres plein écran + tampon rouge / phrase verticale s’écrivant + effet de lumière balayante.
  • Texte derrière le personnage : placez le texte au-dessus des épaules, évitez les mains et accessoires ; la tête doit occulter 25–30 % du texte (moins de 15 % n’est pas visible sur mobile) ; avant d’ajouter le contour blanc, effacez les objets mal incrustés (chaise, etc.) du masque.
  • Tampon rouge : seule couleur rouge de la vidéo, largeur 30–40 % de l’image, animation de 150 % à 100 % en 3 images + tremblement de 2 images.
  • Arrêt sur image : uniquement sur un silence naturel après une phrase (voix < −45 dB), choisissez l’image la plus proche de la bouche fermée, durée ≤0,4 s, maximum un seul dans la vidéo, effet sonore lourd au début. C’est l’unique exception à la règle « aucun silence ».
  • Toutes les animations d’entrée commencent 1 image plus tôt.

Étape 7 : Son

  • Voix : filtre passe-haut 80 Hz → débruitage → léger EQ → compression.
  • Musique : changement de morceau par section (habitude du monteur), fondu croisé 300–600 ms ; compression side-chain pendant la parole. Utilisez uniquement de la musique sous licence ou auto-produite.
  • Effets sonores : environ 0,5 par seconde, répartis uniformément, fenêtre de 4 secondes : 1–3 effets, intervalle entre deux ≥0,25 s. Niveau par défaut : RMS de l’effet sonore = −14 dB par rapport à la voix (paramètre db=-14). Les bruitages réalistes sont prioritaires sur les pops génériques.
  • Loudness : premier passage loudnorm=I=-14:TP=-1.5:LRA=11 pour mesurer ; second passage avec linear=true en utilisant les mesures, suivi de aresample=48000,alimiter=limit=0.7:attack=1:release=30:level=false. Mesure finale avec ebur128, gain supplémentaire : g = min(−14 − I, −2.9 − Peak). Objectif : −14 LUFS, pic vrai ≤−1 dBTP.

Étape 8 : Rendu et livraison (choisir A, B ou les deux)

  • Route A : Projet Jianyin (par défaut si le monteur utilise uniquement Jianyin). Codex produit un montage brut, les sous-titres, les points de temps pour effets sonores et musique. Utilisez pyJianYingDraft pour créer un nouveau projet. Le monteur ouvre Jianyin et finalise. Limitations et consignes : voir references/jianying_route.md. Testez cette route uniquement sur une machine Windows réelle.
  • Route B : Calque de surcouche (obligatoire si effets « point fort »). Effets rendus via HTML/Canvas, Playwright pilote Chrome système pour capturer chaque image en PNG transparent : viewport 1080×1920, device_scale_factor=1, paramètres de lancement --font-render-hinting=none, attendez window.READY et document.fonts.ready, omit_background=True. Toutes les animations sont des fonctions pures du temps t. La séquence PNG est lue avec -framerate 30, encodée en ProRes 4444 (-alpha_bits 16), puis composée avec ffmpeg overlay. Placez le calque de surcouche comme piste vidéo dans le projet Jianyin : non testé à ce jour. ffmpeg drawtext ne permet pas l’entrée caractère par caractère ni le texte derrière le personnage.
  • Livraison de secours : montage brut + SRT + storyboard, finalisation par le monteur dans Jianyin.
  • Avant la surcouche, appliquez un léger étalonnage au fond : eq=contrast=1.04:saturation=1.07.
  • Encodage final : libx264 -profile:v high -preset slow -crf 17 -maxrate 16M -bufsize 24M -g 60 -r 30 -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709, AAC 192k, -movflags +faststart.

Étape 9 : Contrôle qualité (tout doit passer avant livraison)

Suivez point par point references/qc_checklist.md. Le rapport ne contient que ce que vous avez vous-même vérifié (images, audio), chaque donnée avec une unité. Les mesures impossibles sont notées « non mesuré », sans inventer.

Vignette de couverture

  • Répartition : le planificateur fournit le texte et les images candidates (dans le champ cover du spec), le monteur produit la mise en page et l’export (1080×1920 et 3:4).
  • Titre principal : extrait des mots exacts, ordre éventuellement modifié (ex. « un mois et demi à visser »), max 7 caractères, 2 lignes maximum. Sous-étiquette : chiffres de résultat, 2–3 stickers.
  • Titre et visage dans la zone centrale 1080×1440 (y 240–1680). La grille de la page d’accueil TikTok recadre en 3:4.
  • Fournissez au moins 3 images candidates, avec horodatage et justification. Légende « pas la version finale ».
  • Parcourez la vidéo toutes les 0,5 s pour trouver des profils ou expressions. La direction du regard détermine la mise en page (regard vers le haut à gauche → personne en bas à droite, titre en haut à gauche). Si les vêtements ou l’arrière-plan contiennent du texte, interdiction de faire une symétrie miroir.

Critères de succès

  • Durée 30–50 s, 1ʳᵉ seconde = accroche avec mots exacts. Texte à l’écran 100 % traçable jusqu’à la transcription.
  • Effets normaux : intervalle max ≤3 s. Points forts : 3–4, avec gradation de puissance, techniques non répétées.
  • Effets sonores ≈0,5/s, sans superposition. Calage ≤2 images. −14 LUFS ±1, pic vrai ≤−1 dBTP.
  • Aucun débordement de la zone de sécurité. Pas d’image noire ou figée inattendue. Texte ne chevauchant ni visage ni logo.
  • Utilisateur a validé le storyboard. Livrables complets.

Pièges courants → Solutions

PiègeSolution
Rushes HLG grisConversion avec zscale + tonemap=hable vers SDR, gamma ≈1,12
Whisper : début trop tôt, fin trop longueDébut avec whisperX, fin avec détection d’énergie
VAD saute des phrasesRelancez sans VAD
Texte à l’écran ≠ mot exact / mauvais contexteChaque mot avec src_t, QC vérifié sur transcription
Tous les effets ont la même forceDistinguez niveau normal et point fort ; les points forts sont max.
Texte derrière le personnage peu visibleMesurez le taux d’occultation : tête couvrant 25–30 %
Chaise incrustée dans le personnageTexte au-dessus des épaules ; effacez avant contour
Calage mal mesuréMesurez à partir de la 1ʳᵉ image visible ; animation 1 image plus tôt
Sifflements détectés comme effets sonoresIsolez la voix avec demucs, mesurez uniquement sur la bande d’accompagnement
Effets sonores groupésFenêtre de 4 s : 1–3 effets ; l’effet composé compte pour 1
Texte ou gros titre dans la zone du bouton TikTokBord droit ≤ x 930
Arrêt sur image pendant la paroleUniquement dans un silence, ≤0,4 s
Animation glissante traverse le visage ou sort du cadreRemplacez par fondu sortant + fondu entrant à la position cible
Outil d’inspection affiche une image en cacheRenommez le fichier à chaque vérification
Échec d’une commande à cause d’un chemin chinois ou d’espacesUtilisez subprocess avec liste d’arguments ; fichiers en utf-8 explicite
Whisper hallucine des phrases inexistantesRelecture audio humaine complète avant alignement
Envie d’utiliser une autre solution de rendu (ex. Remotion)Non vérifiée, ne remplacez pas ; utilisez uniquement HTML/Canvas + Playwright pour les calques
Nouveau projet Jianyin introuvable ou police erronéeOuvrez/fermez un projet existant ou redémarrez ; ouvrez le projet deux fois

Skills associés