Files
nas-runbooks/hermes-nyora/iakifech-ep2-subtitle-desync-freeze-postmortem.md

3.8 KiB
Raw Permalink Blame History

IAKifech Ep02 — postmortem sous-titres desync + freeze fin + logo (24/07/2026)

Contexte

iakifech_ep02_final_v3.mp4 (99,46s) analysé sur demande de Nabil : sous-titres en avance sur la voix, long silence/image figée en fin de vidéo, doute sur le logo.

1. Sous-titres en avance sur la voix — CONFIRMÉ, cause trouvée

Mesure : pixel-diff de la zone sous-titres vs onset audio réel (RMS 10ms) sur 3 transitions → sous-titres changent 0,40 à 0,70s avant que la voix ne reprenne (moyenne ~0,57s).

Cause : le corps vidéo (ep02_body.mp4 = final-1.mp4 du skill moneyprinterturbo, task 2fbc4b36-44de-48e4-8e3f-704c84c78eb1 sur moneyprinterturbo-api, VPS) est généré avec voix + sous-titres synchronisés en interne sur la voix edge-tts par défaut (fr-FR-RemyMultilingualNeural-Male, audio.mp3 = 75,55s, subtitle.srt calé dessus). Ensuite la piste audio a été remplacée manuellement par une voix ElevenLabs (ep02_george.mp3, 79,49s, débit différent) SANS régénérer subtitle.srt sur ce nouveau timing. Les sous-titres restent gravés aux timestamps Rémy, qui ne collent plus au débit George.

C'est déjà documenté (mais pas corrigé) dans BRAND.md du projet : « edge-tts déjà utilisé par erreur sur l'épisode 2 ».

2. Silence + image figée en fin de vidéo — CONFIRMÉ, cause partielle

  • Silence audio réel : 79,06s → fin (99,46s) = 20,4s de silence.
  • ep02_george.mp3 (voix utilisée) = 79,49s → colle à la fin de la parole détectée.
  • ep02_body.mp4 (corps vidéo) = 75,57s seulement → manque ~3,9s pour couvrir la voix George.
  • Assemblage final : image quasi figée ~79s→90,5s (11,5s), puis outro.mp4 (5,5s, fichier validé BRAND.md) 90,5s→96s. Total vidéo 96s, total audio 99,46s.
  • Total body(75,57)+outro(5,5)=81,07s attendu au minimum, réel 99,46s → ~18s d'écart non expliqué. Script d'assemblage non retrouvé (probablement commande ffmpeg ad hoc de l'agent pendant la session, non sauvegardée en fichier) — donc padding non reproductible, cause exacte du delta encore ouverte.

3. Logo — présent et correct (à corriger : mon diagnostic initial était faux)

Vérifié par comparaison pixel des coins entre ep02_body.mp4 (aucun logo, std=8,9 coin haut-gauche) et iakifech_ep02_final_v3.mp4 (logo présent, std=70,5, même zone) → le logo est ajouté après le rendu moneyprinterturbo, dans une étape séparée.

Mesures sur le logo appliqué : cercle marine ~115px de diamètre (10,6% de la largeur 1080px, cohérent avec le ~8% visé dans BRAND.md), coin haut-gauche, icône blanche + accent or (RGB 237,213,48 — cohérent avec le ton "accent_bright" navy-safe du système de marque Nyora). Présent aussi sur l'écran de fin. Correctement appliqué sur ce rendu — pas de logo gris/minuscule comme sur une version antérieure.

Recommandations pour la suite (saison 2 / ep03+)

  1. Ne jamais garder les sous-titres brûlés par moneyprinterturbo si la voix est remplacée après coup : soit regénérer un .srt aligné sur ep02_george.mp3 (whisper ou timestamps ElevenLabs) puis re-burn, soit désactiver le burn-in sous-titre côté moneyprinterturbo et le faire dans une étape dédiée post-voix.
  2. Calculer la durée de hold/freeze dynamiquement (durée_voix durée_body), jamais une valeur fixe/ad hoc, et sauvegarder la commande d'assemblage dans un script versionné (pas une commande one-shot en session agent).
  3. logo_B_v6.png validé dans BRAND.md — fonctionne bien tel qu'appliqué ici, rien à changer sur ce point.

Fichiers sources (VPS hermes-nabil, /data/nyora/ia-tn/) : ep02_body.mp4, ep02_george.mp3, ep02_elevenlabs.mp3 (non utilisé), outro.mp4, BRAND.md, ENDING-BRIEF.md, TACHES.md. Skill source : moneyprinterturbo (manuellement rédigé, hors curator auto).