runbook: iakifech ep02 postmortem sous-titres desync + freeze fin (24/07)

This commit is contained in:
2026-07-24 12:48:41 +00:00
parent 850a7d8f08
commit f749256b0e
@@ -0,0 +1,68 @@
# 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).