Que fait Présentation avec voix off ?
Outils : $VIDEO_ROOT/voice/ de video-generations (speak.py, speak_cast.py, polish_vo.py, mix_narration.py, el_cache.py) ; modèles dans $VIDEO_ROOT/models (python studio/get_models.py).
1. Écrire comme un présentateur (le script compte plus que la voix)
-
Ne lisez jamais l'écran. Le texte à l'écran énonce le fait ; la voix ajoute du sens, de l'émotion ou l'histoire derrière ce fait. Si une ligne répète mot pour mot ce qui est à l'écran, réécrivez-la ou supprimez-la. Exceptions : les noms de produits et le slogan final.
-
Une idée par ligne. Phrases courtes, 6 à 12 mots. Anglais parlé, contractions autorisées.
-
Fil conducteur (héros). Suivez une personne (par exemple Aroon, Anita, Dr Rao) et faites-y référence ; les gens se souviennent des histoires, pas des fonctionnalités.
-
Accent final. Placez le mot clé en dernier dans sa phrase (« …chaque équipe n'en a qu'un. ») ; la voix s'y pose naturellement. Chargez le contexte en début de phrase : « À … deux heures quatorze, tôt le matin, // Aroon // s'effondre. »
-
Règle de trois pour les avantages et les listes, avec des temps égaux.
-
Contraste et retournement : problème → « Imaginez maintenant… » → solution.
-
Débuts : commencez chaque section par une ancre (« D'abord, pour les familles. », « Maintenant, entrez dans l'hôpital. »).
-
Fins : les déclarations se terminent par un point pour un ton descendant et terminé. Terminez par la promesse ou le slogan, une invitation claire, puis « Merci. »
-
Rythme (style maison) : un débit lent et des pauses trop nombreuses donne un son robotique (« trop de pauses, trop peu de mots »). Par défaut, adoptez un rythme de présentateur fluide :
- vitesse 1.00 pour la plupart des lignes, 1.02 pour les longues listes/explications, 0.95–0.97 pour les slogans et fins, 0.93 uniquement pour l'accroche émotionnelle unique.
- Au maximum un temps d'arrêt
...par ligne, et seulement au moment du retournement émotionnel (« À deux heures quatorze, tôt le matin ... Aroon s'effondre », « Et si ... il suffisait d'un seul clic ? »). Utilisez/avec parcimonie ; préférez les virgules simples. - Débit mesuré pour ce style : environ 2,6–2,8 mots parlés par seconde (af_kore). Budget = mots / 2,7 + 0,35 s de queue de polissage ; une ligne doit tenir avant le prochain temps visuel.
- Laissez un silence délibéré (1–1,5 s, sans ligne) après la construction du problème et après le moment de récompense émotionnelle de la solution (« Plus calme que cette première nuit. »).
- Densité : environ 230–250 mots narrés pour un film de 2,5 minutes ; chaque scène reçoit au moins une ligne, donc aucune scène ne reste silencieuse plus de ~3 s, sauf les silences planifiés.
-
Honnêteté : pas de résultats inventés ; les noms et chiffres fictifs sont des données de démo.
-
Chemin rapide (pour gagner du temps) : écrivez toutes les lignes → estimez les durées avec le budget ci-dessus → corrigez les dépassements dans le texte avant de générer → générez une fois. Régénérer sur le portable coûte environ 25–40 s par ligne, donc la majeure partie du temps est consacrée au texte qui est réécrit.
2. Balisage (fichier de narration)
LINES = [(start_s, speed, text), ...], VOICE = '...', plus une docstring avec des notes de livraison. Exemple : voice/examples/narration_demo.py.
/= pause de respiration (0,25 s),//= pause dramatique (0,55 s),...= temps d'arrêt (0,8 s).- Ré-épeler dans
voice/lexicon.pyles noms que le moteur prononce mal (par exemple Arun → « Aroon », Dr → « Doctor ») et testez d'abord une ligne. - Dialogue avec plusieurs voix :
LINES = [(key, voice, speed, text), ...]pourspeak_cast.py(voice/examples/dialogue_demo.py).
3. Voix
- Moteur : Kokoro via kokoro-onnx, hors ligne, 50+ voix. Bons choix pour un présentateur : af_kore / af_heart (femme calme et confiante), hm_omega / hm_psi (homme indien), am_onyx (homme grave), bm_george (homme britannique), hf_alpha / hf_beta (femme indienne). Les mélanges fonctionnent :
hm_omega:0.6,am_onyx:0.4. - Pour un nouveau choix de voix, lisez 3 lignes représentatives (accroche, solution, slogan) par candidat et laissez l'utilisateur choisir avant l'exécution complète.
- L'accentuation au niveau du mot ne peut pas être forcée ; créez-la avec la formulation, la ponctuation, les pauses et la vitesse. Une emphase exacte nécessite un enregistrement humain.
- Voix cloud premium :
voice/el_cache.py(ElevenLabs ; chaque ligne facturée une fois, puis mise en cache).
4. Générer → polir → mixer
python voice/speak.py <narration>.py work/vo [voice]— reprenable ; chaque phrase est parlée séparément et jointe avec les silences marqués.python voice/polish_vo.py work/vo work/vo_polished— coupe, égalisation chaleur/clarté, compression douce, réverbération subtile, fondu de fin.python voice/mix_narration.py <silent.mp4> <music.wav> <narration>.py work/vo_polished <out.mp4>— place les lignes, accélère une ligne longue d'au plus 1,08×, décale les lignes ultérieures uniquement si nécessaire, réduit la musique, −16 LUFS, écrit.srt.- Vérifiez le rapport de dérive. Chaque ligne doit être à moins de ~0,5 s de son visuel. Si la dérive s'accumule, raccourcissez ou supprimez une ligne (préférez les lignes qui répètent l'écran) et déplacez les heures de début vers leurs temps visuels ; re-mixez sans régénérer les lignes non modifiées.
Pour refaire certaines lignes, déplacez leurs anciens fichiers et relancez
speak.py; il ne remplit que les fichiers manquants. Maintenez la numérotation des fichiers en synchronisation avec LINES. - Livrez le MP4 et le SRT.