Communitygithub.com

Génération de voix off IA (ElevenLabs)

Générez des voix off professionnelles avec l'IA ElevenLabs. Idéal pour les doublages vidéo, narrations audio ou contenu texte-parole. Prend en charge plusieurs voix avec des préréglages de personnage (narrateur, commercial, expert) pour un rendu naturel et une régénération scène par scène.

Qu'est-ce que Génération de voix off IA (ElevenLabs) ?

Cette compétence permet de générer des voix off de qualité professionnelle pour des vidéos Remotion via l'API ElevenLabs. Elle simplifie la création de contenus audio narrés en automatisant la conversion de texte en parole avec un contrôle fin sur la voix, le style et la synchronisation temporelle. La compétence prend en charge la génération par scènes (chaque scène peut avoir son propre texte, personnage et durée), la régénération individuelle de scènes pour affiner le timing ou le texte sans tout refaire, et l'assemblage automatique des scènes en un fichier audio combiné. Elle inclut également la validation automatique de la durée, des silences et du débit de parole via ffprobe, ainsi que l'incorporation de vignettes dans les vidéos MP4 pour un meilleur affichage sur les réseaux sociaux. Fonctionnelle dans tout environnement shell (CLI local, pipeline CI/CD, éditeurs comme Cursor ou Codex), elle nécessite une clé API ElevenLabs dans les variables d'environnement. Les préréglages de personnage (narrateur, commercial, expert, etc.) permettent d'adapter le ton sans avoir à réécrire le texte. L'intégration native avec Remotion permet d'utiliser les fichiers audio générés directement dans les séquences de composition vidéo.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Amartileyton/autovideo/tree/HEAD/.agent/skills/elevenlabs-remotion

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Génération de voix off ElevenLabs

Générez des voix off professionnelles avec l'IA ElevenLabs pour les vidéos Remotion.

Prérequis

  • ELEVENLABS_API_KEY dans .env.local

Démarrage rapide

# Générer une voix off à partir d'un texte
node .claude/skills/elevenlabs-remotion-skill/generate.js --text "Votre texte ici" --output public/audio/voiceover.mp3

# Générer avec un style narrateur (plus naturel)
node .claude/skills/elevenlabs-remotion-skill/generate.js --text "Votre texte" --character narrator --output voiceover.mp3

# Générer des scènes avec assemblage de requêtes
node .claude/skills/elevenlabs-remotion-skill/generate.js --scenes remotion/scenes.json --output-dir public/audio/project/

# Régénérer une seule scène
node .claude/skills/elevenlabs-remotion-skill/generate.js --scenes scenes.json --scene scene2 --new-text "Texte mis à jour"

# Lister les voix et préréglages de personnage disponibles
node .claude/skills/elevenlabs-remotion-skill/generate.js --list-voices
node .claude/skills/elevenlabs-remotion-skill/generate.js --list-characters

Préréglages de personnage

Utilisez les préréglages de personnage pour des voix off plus naturelles, au lieu d'une lecture littérale du texte à l'écran :

PersonnageDescriptionIdéal pour
literalLit le texte exactement tel qu'écritTexte à l'écran, citations
narratorConteur professionnel, fluide, captivantVidéos explicatives, documentaires
salespersonEnthousiaste, persuasif, dynamiqueMarketing, publicités
expertAutoritaire, confiant, savantContenu juridique, tutoriels
conversationalDécontracté, amical, naturelRéseaux sociaux, contenu décontracté
dramaticIntense, émotionnel, percutantAccroches, énoncés de problèmes
calmApaisant, rassurant, douxConstruction de confiance, conclusions
# Utiliser le style narrateur globalement
node .claude/skills/elevenlabs-remotion-skill/generate.js --scenes scenes.json --character narrator --output-dir public/audio/

# Ou définir par scène dans scenes.json
{
  "scenes": [
    { "id": "scene1", "text": "Énoncé du problème", "character": "dramatic" },
    { "id": "scene2", "text": "Solution", "character": "calm" }
  ]
}

Génération par scènes avec assemblage de requêtes

Générez plusieurs scènes avec une prosodie cohérente grâce à l'assemblage de requêtes ElevenLabs :

Format scenes.json

{
  "name": "demo-produit",
  "voice": "George",
  "character": "narrator",
  "scenes": [
    {
      "id": "scene1",
      "text": "La synthèse vocale générique sonne robotique. Votre marque mérite mieux.",
      "duration": 4.5,
      "character": "dramatic"
    },
    {
      "id": "scene2",
      "text": "Avec le clonage vocal, vous pouvez utiliser votre propre voix pour un contenu illimité.",
      "duration": 5.5
    },
    {
      "id": "scene3",
      "text": "Enregistrez un court échantillon. Clonez-le. Créez des voix off professionnelles en quelques minutes.",
      "duration": 6,
      "delay": 0.3
    }
  ]
}

Générer toutes les scènes

node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --scenes remotion/demo-produit-scenes.json \
  --output-dir public/audio/demo-produit/

Ceci crée :

  • demo-produit-scene1.mp3 à sceneN.mp3
  • demo-produit-combined.mp3 (toutes les scènes assemblées)
  • demo-produit-info.json (métadonnées avec durées)

Régénération d'une seule scène

Si une scène commence trop tôt, a un mauvais timing ou nécessite un texte différent :

# Régénérer scene2 avec un nouveau texte
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --scenes remotion/scenes.json \
  --scene scene2 \
  --new-text "Texte mis à jour de la scène 2" \
  --output-dir public/audio/project/

# Régénérer scene3 avec un personnage différent
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --scenes remotion/scenes.json \
  --scene scene3 \
  --character salesperson \
  --output-dir public/audio/project/

# Simplement régénérer (même texte, même personnage)
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --scenes remotion/scenes.json \
  --scene scene1 \
  --output-dir public/audio/project/

# Intégrer une vignette dans une vidéo MP4
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --embed-thumbnail public/videos/ma-video.mp4 \
  --thumbnail public/videos/ma-vignette.png \
  --output public/videos/ma-video-avec-vignette.mp4

L'outil automatise automatiquement :

  • L'assemblage de requêtes des scènes précédentes pour une prosodie cohérente
  • La mise à jour du fichier info.json avec les nouvelles métadonnées
  • La mise à jour du fichier scenes.json si --new-text est fourni

Intégration de vignette

Intégrez une image de vignette dans les vidéos MP4 pour que les plateformes comme Twitter, YouTube et les lecteurs vidéo affichent votre vignette personnalisée au lieu de la première image.

Intégrer une vignette dans une vidéo

# Utilisation de base - sortie vers video-thumb.mp4
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --embed-thumbnail public/videos/promo.mp4 \
  --thumbnail public/videos/vignette.png

# Chemin de sortie personnalisé
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --embed-thumbnail public/videos/promo.mp4 \
  --thumbnail public/videos/vignette.png \
  --output public/videos/promo-final.mp4

Workflow avec Remotion

# 1. Rendre votre vidéo
npx remotion render MaVideo public/videos/ma-video.mp4

# 2. Rendre votre vignette (utiliser une composition Still)
npx remotion still MaVignetteVideo public/videos/ma-vignette.png

# 3. Intégrer la vignette
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --embed-thumbnail public/videos/ma-video.mp4 \
  --thumbnail public/videos/ma-vignette.png \
  --output public/videos/ma-video-finale.mp4

Formats supportés

  • Vidéo : MP4 (H.264/H.265)
  • Vignette : PNG, JPG, JPEG

L'intégration utilise le drapeau -disposition:v:1 attached_pic de ffmpeg pour définir la vignette comme image jointe, reconnue par la plupart des lecteurs vidéo et plateformes.

Validation du timing

La compétence valide automatiquement le timing après la génération à l'aide de ffprobe :

Ce qu'elle vérifie

VérificationSeuilDescription
Écart de durée>15%Avertit si la durée réelle diffère de la durée attendue
Silence en début>200msL'audio commence tard (voix off retardée)
Silence en fin>500msSilence inutile à la fin
Débit de parole2-4.5 mots/sOptimal ~3 mots/seconde

Valider un audio existant

# Valider toutes les scènes d'un projet
node .claude/skills/elevenlabs-remotion-skill/generate.js --validate public/audio/demo-produit/

Exemple de sortie :

🔍 Validation de demo-produit (6 scènes)

❌ scene1 : 3,00s (attendu : 4,5s)
   ❌ Audio 1,50s plus court que prévu
   👍 8 mots @ 3,1 mots/s
⚠️ scene2 : 6,35s (attendu : 5,5s)
   ⚠️ Silence en début : 235ms (peut commencer tard)
   🐢 10 mots @ 1,8 mots/s
✅ scene4 : 4,36s (attendu : 4s)
   👍 9 mots @ 2,3 mots/s

📊 Durée totale : 30,80s (attendu : 30,00s)

Fichier info.json mis à jour

Après validation, le fichier info.json inclut les mesures réelles :

{
  "scenes": [
    {
      "id": "scene1",
      "duration": 4.5,
      "actualDuration": 3.0,
      "leadingSilence": 0.05,
      "wordsPerSecond": 3.1
    }
  ]
}

Utilisez actualDuration dans votre composition Remotion pour une synchronisation précise.

Options

OptionDescriptionPar défaut
--text, -tTexte à convertir en paroleRequis (ou --file/--scenes)
--file, -fLire le texte depuis un fichier-
--output, -oChemin du fichier de sortieoutput.mp3
--output-dirRépertoire de sortie pour les scènespublic/audio
--voice, -vNom ou ID de la voixGeorge
--model, -mID du modèleeleven_multilingual_v2
--character, -cPréréglage de personnageliteral
--scenesFichier JSON avec les scènes-
--sceneID de la scène à régénérer-
--new-textNouveau texte pour la régénération de scène-
--validateValider un répertoire audio existant-
--skip-validationIgnorer la validation automatiquefalse
--embed-thumbnailFichier vidéo dans lequel intégrer une vignette-
--thumbnailFichier image de vignette (PNG/JPG)-
--stabilityStabilité de la voix (0-1)varie selon le personnage
--similaritySimilarité de la voix (0-1)varie selon le personnage
--styleExagération du style (0-1)varie selon le personnage
--no-combinedIgnorer le fichier combinéfalse

Voix recommandées

VoixStyleIdéal pour
GeorgeBritannique chaleureux et captivantNarration, vidéos explicatives
AntoniProfessionnel, chaleureuxContenu juridique, tutoriels
ArnoldAutoritaire, graveSujets d'entreprise, sérieux
JoshAmical, conversationnelMarketing, contenu décontracté

Intégration avec Remotion

Après avoir généré les voix off des scènes, utilisez-les dans votre composition :

import { Audio, Sequence, staticFile } from "remotion";

// Utiliser les fichiers audio individuels des scènes pour une synchronisation précise
const DUREES_SCENES = {
  scene1: 4.5,  // Depuis info.json
  scene2: 5.5,
  scene3: 8.0,
};

export const VideoAvecVoixOff: React.FC = () => {
  const { fps } = useVideoConfig();

  const scene1Images = Math.round(DUREES_SCENES.scene1 * fps);
  const scene2Images = Math.round(DUREES_SCENES.scene2 * fps);

  return (
    <>
      <Sequence from={0} durationInFrames={scene1Images}>
        <Audio src={staticFile("audio/project/project-scene1.mp3")} />
        <VisuelScene1 />
      </Sequence>

      <Sequence from={scene1Images} durationInFrames={scene2Images}>
        <Audio src={staticFile("audio/project/project-scene2.mp3")} />
        <VisuelScene2 />
      </Sequence>
    </>
  );
};

Conseils pour de meilleurs résultats

  1. Utilisez les préréglages de personnage : Ne lisez pas le texte à l'écran littéralement - utilisez narrator ou expert pour un flux naturel
  2. La ponctuation compte : Utilisez des points pour les pauses, des virgules pour de brèves coupures
  3. Nombres : Écrivez les nombres en toutes lettres ("cinq cents" pas "500") pour un discours naturel
  4. Abréviations : Écrivez les mots complets ("vingt-quatre heures" pas "24h")
  5. Scène par scène : Différentes scènes peuvent avoir différents personnages (intro dramatique, appel à l'action calme)
  6. Réglage fin : Utilisez --scene pour régénérer des scènes individuelles sans tout refaire
  7. Assemblage de requêtes : Maintient la cohérence vocale sur toutes les scènes

Exemple de workflow

# 1. Créez scenes.json avec votre script
# 2. Générez toutes les scènes avec le style narrateur
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --scenes remotion/ma-video-scenes.json \
  --character narrator \
  --output-dir public/audio/ma-video/

# 3. Prévisualisez dans Remotion, remarquez que scene2 commence trop tôt
# 4. Régénérez uniquement scene2 avec un texte mis à jour
node .claude/skills/elevenlabs-remotion-skill/generate.js \
  --scenes remotion/ma-video-scenes.json \
  --scene scene2 \
  --new-text "Texte légèrement plus long pour remplir le timing visuel" \
  --output-dir public/audio/ma-video/

# 5. Mettez à jour la composition vidéo avec la nouvelle durée depuis info.json
# 6. Répétez jusqu'à ce que le timing soit parfait

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills associés