Édition #4 · 8 août 2026
Un stream n’est pas un podcast — donc le crop non plus
Le 4 août, on a isolé un chemin Stream / gaming : facecam en haut, gameplay en bas, sans passer par le smart-crop talk. Dans la foulée, Twitch livrait des sous-titres en retard de deux secondes, YouTube faisait sauter la RAM du worker, et un décalage forcé « −2 s » empirait le cas où il n’y avait presque pas de parole. Une semaine à recoller l’image, le son, et le texte.
En une phrase
Coche Gaming : Upcut empile webcam et jeu en 9:16, et aligne les captions sur l’audio — plus un décalage de deux secondes « pour voir ».
01 — Deux produits dans le même bouton
Le crop talk détruisait les VOD de jeu.
Mono / split, c’est fait pour des visages autour d’une table. Sur un stream, la tête utile est un rectangle dans le coin, et le sujet c’est la map. Passer ça dans le même smart-crop, c’était zoomer n’importe où — ou traiter le perso comme un invité de podcast.
Chemin isolé : content_family=stream. Stack ~47 % facecam / reste gameplay. Le talk (podcast, just chatting) ne rentre pas dans ce code. Early-exit. Deux contrats, un toggle.
→ Just chatting reste du talk. Une ranked a enfin un layout de ranked.
02 — Les deux secondes
On avait compensé trop fort.
Les captions Gaming arrivaient en retard. Le réflexe : pousser tout le monde de −2 s. Sur une VOD où la bande parole est presque vide, ce lead forcé décalait dans l’autre sens. Les lèvres disaient une chose, le texte une autre — ou le texte une phrase déjà finie.
Twitch, en plus, livrait parfois image et son qui ne commençaient pas au même endroit (PTS plats, trim=0). On réaligne V/A sur les packets, on décode les frames stream avec ffmpeg sur la même horloge que l’audio, et Whisper ne sert plus que d’ajustement ±0,5 s. Si l’offset est fiable, on le croit. On ne pousse plus « plus tard » par principe.
- Plus de OpenCV POS_FRAMES pour le rendu stream — mauvaise horloge
- Logs : trust | fallback | clamp_positive — une décision, pas un magic number
- Twitch négatif côté PTS : ignoré pour le trim, au lieu de casser le sync
→ Tu parles, le mot apparaît. Le silence, le mot s’en va. Plus un lag de replay YouTube.
03 — Le silence
Whisper étirait les blocs. Le texte restait collé.
Une phrase courte, puis cinq secondes de rien : le bloc sous-titre occupait tout le trou. Plafond à 2,8 s à l’écran, talk et stream. Le reburn (réécriture des captions) cassait ensuite les mots trop long — on a recollé le split pour ne pas avaler de la parole au milieu d’une phrase.
→ Une pause dans le discours n’est plus une légende figée au milieu du 9:16.
04 — YouTube, la RAM, le manuel
Certaines VOD ne doivent plus faire semblant d’être clipables.
Le worker Railway tombait OOM en téléchargeant du YouTube : 360p deux fois, puis un merge DASH. On force un 720p progressif, un seul fragment à la fois. Et le mode manuel YouTube est fermé (Twitch et upload, eux, restent). Au-delà d’1h15 en auto, c’est bloqué — avec une bannière, pas un bouton mort.
→ Moins de jobs fantômes « serveur a crash ». Moins de « essaie le manuel » sur une source où le manuel n’existe pas.
Chronologie express
- 04/08Mode Stream / gaming isolé (stack cam + jeu)
- 04/08YouTube : download ram-safe, manuel fermé, limites visibles
- 04/08Twitch A/V realign + decode ffmpeg (plus de −2 s forcé)
- 05/08Captions plafonnées à 2,8 s ; reburn qui ne mange plus les mots
- 08/08Alerte crédits + expiration free 2 jours (suite en #5)
Pour les curieux
Sous le capot, sans jargon inutile
stream_layout.py + flag --stream-stack. Talk mono/split : early-exit, non modifié dans cette édition.
Segment Twitch : sync par PTS / nb_frames / download V+A séparés. Whisper offset borné à ±0,5 s.
yt-dlp YouTube : format progressif height>=720, concurrent-fragments 1 — évite le double 360p + merge qui tuait Railway (~25 Go).
Prêt à générer ?
Colle un lien YouTube ou Twitch — Gaming, talk ou podcast, les clips suivent ce que tu as lancé.