Communitygithub.com

iamaanahmad/voiceover-tts

Générez et synchronisez des narrations avec text-to-speech (ElevenLabs, OpenAI TTS, Kokoro, Piper) ou préparez une voix enregistrée – préparation de script, fichiers audio par scène, rythme, prononciation, nettoyage et volume sonore. À utiliser lorsque l'utilisateur a besoin d'une voix off, d'une narration, d'un doublage ou de conseils pour cloner une voix.

Qu'est-ce que voiceover-tts ?

Cette compétence est un assistant complet pour la génération de voix off et de narrations destiné aux outils d'IA agent comme Claude Code, Cursor ou Codex. Elle couvre l'ensemble du pipeline : de la préparation du script à la génération audio, en passant par le nettoyage et l'assemblage final. Elle prend en charge plusieurs moteurs de synthèse vocale (ElevenLabs, OpenAI TTS, Kokoro, Piper) ainsi que l'enregistrement vocal réel, avec des conseils sur le choix du moteur, la configuration des clés API, et la production de fichiers audio individuels par scène. La compétence inclut des commandes pour mesurer et ajuster le rythme (140-160 mots/minute), nettoyer les enregistrements audio (filtre passe-haut, réduction de bruit, compression, normalisation du volume) et assembler les fichiers avec des pauses. Elle met également l'accent sur les aspects éthiques et légaux : consentement pour le clonage vocal, divulgation des voix synthétiques et vérification des licences des fournisseurs. L'utilisateur peut ainsi produire des narrations professionnelles sans quitter l'environnement de développement, en automatisant les tâches répétitives et en garantissant la qualité audio.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/voiceover-tts

Demander à votre IA préférée

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

Documentation

Voix off et Synthèse Vocale (TTS)

La voix off pilote la timeline. Générez-la avant de construire les visuels.

Choisir un moteur

MoteurEmplacementPoints fortsAttention
ElevenLabsAPI cloudMeilleure naturalité, clonage vocalPayant ; ne clonez que les voix pour lesquelles vous avez le consentement
OpenAI TTSAPI cloudSimple, cohérentChoix de voix limité
KokoroLocalGratuit, bonne qualité, hors ligneNécessite une configuration Python
PiperLocalRapide, fonctionne sur CPUMoins expressif
Voix enregistréeMicroLa plus authentiqueNécessite un nettoyage

Conservez les clés API dans des variables d'environnement ou un fichier .env qui est ignoré par git. Ne les imprimez ni ne les commettez jamais.

Préparer le script pour la synthèse

  • Écrivez les nombres, unités et acronymes comme ils sont prononcés : "vingt vingt-six", "A P I" s'il doit être épelé, "gigaoctets".
  • Ajoutez des virgules pour les respirations ; utilisez un point pour un arrêt ; évitez les parenthèses.
  • Placez les noms difficiles dans une liste de prononciation et testez-les d'abord dans un court échantillon.
  • Divisez en un fichier par scène (audio/scene-01.mp3). Les fichiers par scène vous permettent de réenregistrer une seule ligne et de garder la synchronisation flexible.

Générer (exemple, ElevenLabs REST)

import os, requests, pathlib

def tts(texte: str, voix_id: str, sortie: pathlib.Path) -> None:
    r = requests.post(
        f"https://api.elevenlabs.io/v1/text-to-speech/{voix_id}",
        headers={"xi-api-key": os.environ["ELEVENLABS_API_KEY"], "Accept": "audio/mpeg"},
        json={"text": texte, "model_id": "eleven_multilingual_v2",
              "voice_settings": {"stability": 0.5, "similarity_boost": 0.75}},
        timeout=120,
    )
    r.raise_for_status()
    sortie.write_bytes(r.content)

Les noms de modèles et les points de terminaison changent. Confirmez avec la documentation actuelle du fournisseur avant utilisation.

Mesurer et rythmer

ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 audio/scene-01.mp3
  • Visez 140 à 160 mots par minute (mots / secondes * 60). Régénérez avec un débit légèrement différent ou raccourcissez le texte si une scène dépasse 180 mots par minute ; cela semblera précipité.
  • N'étirez pas temporellement la parole de plus d'environ 10 % ; cela sonne synthétique. Réécrivez plutôt.

Nettoyer la voix enregistrée

# Passe-haut, réduction de bruit douce, compression, volume sonore
ffmpeg -i raw.wav -af "highpass=f=80,afftdn=nf=-25,acompressor=threshold=-18dB:ratio=3:attack=5:release=80,loudnorm=I=-16:TP=-1.5:LRA=11" -ar 48000 clean.wav

Supprimez le silence au début et à la fin :

ffmpeg -i in.wav -af "silenceremove=start_periods=1:start_threshold=-45dB,areverse,silenceremove=start_periods=1:start_threshold=-45dB,areverse" out.wav

Assembler

# Joindre les fichiers de scène avec des intervalles de 0,4 s
python - <<'PY'
import subprocess, pathlib
fichiers = sorted(pathlib.Path("audio").glob("scene-*.mp3"))
parties = []
for i, f in enumerate(fichiers):
    parties += ["-i", str(f)]
n = len(fichiers)
filtr = "".join(f"[{i}:a]apad=pad_dur=0.4[a{i}];" for i in range(n)) + "".join(f"[a{i}]" for i in range(n)) + f"concat=n={n}:v=0:a=1[out]"
subprocess.run(["ffmpeg", "-y", *parties, "-filter_complex", filtr, "-map", "[out]", "voiceover.mp3"], check=True)
PY

Ensuite, mixez avec la musique dans audio-mixing et ajoutez des sous-titres avec captions-subtitles.

Éthique et droits

  • Clonez une voix uniquement avec l'autorisation explicite du locuteur.
  • Divulguez la voix synthétique lorsque les règles de la plateforme ou la loi l'exigent.
  • Vérifiez la licence du fournisseur TTS pour une utilisation commerciale.

Individual skills in this repo

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

iamaanahmad/captions-subtitles

Create, edit, translate and burn in captions and subtitles - transcribe speech with Whisper, write SRT/VTT/ASS files, style them, and hard-burn word-highlight captions for Shorts, Reels and TikTok. Use for any captioning, subtitle, transcript or accessibility request.

iamaanahmad/ffmpeg-essentials

Core FFmpeg and ffprobe recipes for trimming, joining, converting, resizing, compressing, speed changes, fades, audio extraction and GIF conversion. Use for any direct media transformation task, or when a video will not play, has odd dimensions, or is out of sync.

iamaanahmad/motion-design-craft

Motion design rules for programmatic and edited video - durations, easing, springs, staggering, read time for on-screen text, beat grids, transitions and visual hierarchy, plus the defaults that make a video look AI-generated. Use when animating scenes, choosing timings, or reviewing a video that feels off.

iamaanahmad/moviepy-python-video

Compose and edit video in pure Python with moviepy 2.x - overlay text, lower thirds and captions on footage, cut and join clips, add audio, build short single-file build.py videos without Node. Use when the user wants Python-based video editing or deterministic text over AI-generated video.

iamaanahmad/remotion-programmatic-video

Build videos as React code with Remotion - compositions, sequences, springs, interpolation, audio sync, data-driven props, studio preview and rendering to MP4. Use for explainers, product demos, release notes, data charts, branded templates, or any video that should be reproducible from code.

iamaanahmad/screen-recording-demos

Record clean product and web app demos - scripted browser recording with Playwright, cursor and zoom polish, speed ramps, trimming dead time and syncing to narration. Use when the user wants a walkthrough, tutorial, UI demo or release video of a web app, or a repeatable recording.

Skills associés