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

69 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).