ElevenLabs Voiceover-Generierung
Erstellen Sie professionelle KI-Voiceovers für Remotion-Videos mit der ElevenLabs-API.
Voraussetzungen
ELEVENLABS_API_KEYin.env.local
Schnellstart
# Voiceover aus Text generieren
node .claude/skills/elevenlabs-remotion-skill/generate.js --text "Ihr Text hier" --output public/audio/voiceover.mp3
# Mit Erzähler-Stil generieren (natürlicher)
node .claude/skills/elevenlabs-remotion-skill/generate.js --text "Ihr Text" --character narrator --output voiceover.mp3
# Szenen mit Request Stitching generieren
node .claude/skills/elevenlabs-remotion-skill/generate.js --scenes remotion/scenes.json --output-dir public/audio/projekt/
# Einzelne Szene regenerieren
node .claude/skills/elevenlabs-remotion-skill/generate.js --scenes scenes.json --scene scene2 --new-text "Aktualisierter Text"
# Verfügbare Stimmen und Charakter-Presets auflisten
node .claude/skills/elevenlabs-remotion-skill/generate.js --list-voices
node .claude/skills/elevenlabs-remotion-skill/generate.js --list-characters
Charakter-Presets
Verwenden Sie Charakter-Presets für natürlichere Voiceovers anstatt wörtlicher Bildschirmtext-Wiedergabe:
| Charakter | Beschreibung | Am besten geeignet für |
|---|---|---|
literal | Liest Text genau wie geschrieben | Bildschirmtext, Zitate |
narrator | Professioneller Geschichtenerzähler, flüssig, fesselnd | Erklärvideos, Dokumentationen |
salesperson | Begeistert, überzeugend, energiegeladen | Marketing, Werbung |
expert | Autoritär, selbstbewusst, kenntnisreich | Rechtliche Inhalte, Tutorials |
conversational | Lässig, freundlich, natürlich | Soziale Medien, lockere Inhalte |
dramatic | Intensiv, emotional, wirkungsvoll | Hooks, Problemdarstellungen |
calm | Beruhigend, beruhigend, sanft | Vertrauensaufbau, Schlussfolgerungen |
# Erzähler-Stil global verwenden
node .claude/skills/elevenlabs-remotion-skill/generate.js --scenes scenes.json --character narrator --output-dir public/audio/
# Oder pro Szene in scenes.json festlegen
{
"scenes": [
{ "id": "scene1", "text": "Problemdarstellung", "character": "dramatic" },
{ "id": "scene2", "text": "Lösung", "character": "calm" }
]
}
Szenenbasierte Generierung mit Request Stitching
Generieren Sie mehrere Szenen mit konsistenter Prosodie durch ElevenLabs Request Stitching:
scenes.json Format
{
"name": "produkt-demo",
"voice": "George",
"character": "narrator",
"scenes": [
{
"id": "scene1",
"text": "Generische Text-to-Speech klingt roboterhaft. Ihre Marke verdient Besseres.",
"duration": 4.5,
"character": "dramatic"
},
{
"id": "scene2",
"text": "Mit Sprachklonen können Sie Ihre eigene Stimme für unbegrenzte Inhalte nutzen.",
"duration": 5.5
},
{
"id": "scene3",
"text": "Nehmen Sie eine kurze Probe auf. Klonen Sie sie. Erstellen Sie in Minuten professionelle Voiceovers.",
"duration": 6,
"delay": 0.3
}
]
}
Alle Szenen generieren
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--scenes remotion/produkt-demo-szenen.json \
--output-dir public/audio/produkt-demo/
Dies erstellt:
produkt-demo-szene1.mp3bisszeneN.mp3produkt-demo-kombiniert.mp3(alle Szenen zusammengefügt)produkt-demo-info.json(Metadaten mit Dauern)
Einzelszene-Regeneration
Wenn eine Szene zu früh beginnt, falsches Timing hat oder einen anderen Text benötigt:
# Szene2 mit neuem Text regenerieren
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--scenes remotion/scenes.json \
--scene scene2 \
--new-text "Aktualisierter Szenentext 2" \
--output-dir public/audio/projekt/
# Szene3 mit anderem Charakter regenerieren
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--scenes remotion/scenes.json \
--scene scene3 \
--character salesperson \
--output-dir public/audio/projekt/
# Einfach regenerieren (gleicher Text, gleicher Charakter)
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--scenes remotion/scenes.json \
--scene scene1 \
--output-dir public/audio/projekt/
# Ein Thumbnail in ein MP4-Video einbetten
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--embed-thumbnail public/videos/mein-video.mp4 \
--thumbnail public/videos/mein-thumbnail.png \
--output public/videos/mein-video-mit-thumb.mp4
Das Tool führt automatisch Folgendes aus:
- Verwendet Request Stitching von vorherigen Szenen für konsistente Prosodie
- Aktualisiert die info.json-Datei mit neuen Metadaten
- Aktualisiert scenes.json, wenn
--new-textangegeben wurde
Thumbnail-Einbettung
Betten Sie ein Thumbnail-Bild in MP4-Videos ein, damit Plattformen wie Twitter, YouTube und Videoplayer Ihr benutzerdefiniertes Thumbnail anstelle des ersten Frames anzeigen.
Thumbnail in Video einbetten
# Grundlegende Verwendung – Ausgabe nach video-thumb.mp4
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--embed-thumbnail public/videos/promo.mp4 \
--thumbnail public/videos/thumbnail.png
# Benutzerdefinierter Ausgabepfad
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--embed-thumbnail public/videos/promo.mp4 \
--thumbnail public/videos/thumbnail.png \
--output public/videos/promo-final.mp4
Workflow mit Remotion
# 1. Video rendern
npx remotion render MyVideo public/videos/mein-video.mp4
# 2. Thumbnail rendern (Still-Komposition verwenden)
npx remotion still MyVideoThumbnail public/videos/mein-thumbnail.png
# 3. Thumbnail einbetten
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--embed-thumbnail public/videos/mein-video.mp4 \
--thumbnail public/videos/mein-thumbnail.png \
--output public/videos/mein-video-final.mp4
Unterstützte Formate
- Video: MP4 (H.264/H.265)
- Thumbnail: PNG, JPG, JPEG
Die Einbettung verwendet ffmpegs -disposition:v:1 attached_pic-Flag, um das Thumbnail als angehängtes Bild zu setzen, was von den meisten Videoplayern und Plattformen erkannt wird.
Timing-Validierung
Die Fähigkeit validiert automatisch das Timing nach der Generierung mit ffprobe:
Was geprüft wird
| Prüfung | Schwelle | Beschreibung |
|---|---|---|
| Dauerabweichung | >15% | Warnt, wenn die tatsächliche von der erwarteten Dauer abweicht |
| Anfangsstille | >200ms | Audio beginnt spät (Voiceover verzögert) |
| Endstille | >500ms | Unnötige Stille am Ende |
| Sprechgeschwindigkeit | 2-4,5 wps | Optimal ~3 Wörter/Sekunde |
Vorhandenes Audio validieren
# Alle Szenen in einem Projekt validieren
node .claude/skills/elevenlabs-remotion-skill/generate.js --validate public/audio/produkt-demo/
Ausgabebeispiel:
🔍 Validiere produkt-demo (6 Szenen)
❌ szene1: 3,00s (erwartet: 4,5s)
❌ Audio 1,50s kürzer als erwartet
👍 8 Wörter @ 3,1 Wörter/s
⚠️ szene2: 6,35s (erwartet: 5,5s)
⚠️ Anfangsstille: 235ms (kann spät beginnen)
🐢 10 Wörter @ 1,8 Wörter/s
✅ szene4: 4,36s (erwartet: 4s)
👍 9 Wörter @ 2,3 Wörter/s
📊 Gesamtdauer: 30,80s (erwartet: 30,00s)
Aktualisierte info.json
Nach der Validierung enthält die info.json tatsächliche Messungen:
{
"scenes": [
{
"id": "scene1",
"duration": 4.5,
"actualDuration": 3.0,
"leadingSilence": 0.05,
"wordsPerSecond": 3.1
}
]
}
Verwenden Sie actualDuration in Ihrer Remotion-Komposition für präzise Synchronisation.
Optionen
| Option | Beschreibung | Standard |
|---|---|---|
--text, -t | Umzuwandelnder Text | Erforderlich (oder --file/--scenes) |
--file, -f | Text aus Datei lesen | - |
--output, -o | Ausgabedateipfad | output.mp3 |
--output-dir | Ausgabeverzeichnis für Szenen | public/audio |
--voice, -v | Stimmenname oder ID | George |
--model, -m | Modell-ID | eleven_multilingual_v2 |
--character, -c | Charakter-Preset | literal |
--scenes | JSON-Datei mit Szenen | - |
--scene | Einzelne Szenen-ID zur Regeneration | - |
--new-text | Neuer Text für Szenenregeneration | - |
--validate | Vorhandenes Audio-Verzeichnis validieren | - |
--skip-validation | Automatische Validierung überspringen | false |
--embed-thumbnail | Videodatei, in die Thumbnail eingebettet werden soll | - |
--thumbnail | Thumbnail-Bilddatei (PNG/JPG) | - |
--stability | Stimmstabilität (0-1) | variiert je nach Charakter |
--similarity | Stimmähnlichkeit (0-1) | variiert je nach Charakter |
--style | Stil-Übertreibung (0-1) | variiert je nach Charakter |
--no-combined | Kombinierte Datei überspringen | false |
Empfohlene Stimmen
| Stimme | Stil | Am besten geeignet für |
|---|---|---|
George | Warme, fesselnde britische Stimme | Erzählung, Erklärvideos |
Antoni | Professionell, warm | Rechtliche Inhalte, Tutorials |
Arnold | Autoritär, tief | Unternehmensinhalte, ernste Themen |
Josh | Freundlich, gesprächig | Marketing, lockere Inhalte |
Integration mit Remotion
Nachdem Sie Szenen-Voiceovers generiert haben, verwenden Sie sie in Ihrer Komposition:
import { Audio, Sequence, staticFile } from "remotion";
// Verwenden Sie einzelne Szenen-Audiodateien für präzise Synchronisation
const SCENE_DURATIONS = {
scene1: 4.5, // Aus info.json
scene2: 5.5,
scene3: 8.0,
};
export const VideoWithVoiceover: React.FC = () => {
const { fps } = useVideoConfig();
const scene1Frames = Math.round(SCENE_DURATIONS.scene1 * fps);
const scene2Frames = Math.round(SCENE_DURATIONS.scene2 * fps);
return (
<>
<Sequence from={0} durationInFrames={scene1Frames}>
<Audio src={staticFile("audio/projekt/projekt-szene1.mp3")} />
<Scene1Visual />
</Sequence>
<Sequence from={scene1Frames} durationInFrames={scene2Frames}>
<Audio src={staticFile("audio/projekt/projekt-szene2.mp3")} />
<Scene2Visual />
</Sequence>
</>
);
};
Tipps für beste Ergebnisse
- Charakter-Presets verwenden: Lesen Sie Bildschirmtext nicht wörtlich vor – verwenden Sie
narratoroderexpertfür einen natürlichen Fluss - Interpunktion ist wichtig: Verwenden Sie Punkte für Pausen, Kommas für kurze Unterbrechungen
- Zahlen: Schreiben Sie Zahlen aus ("fünfhundert" nicht "500") für natürliche Sprache
- Abkürzungen: Schreiben Sie ganze Wörter ("vierundzwanzig Stunden" nicht "24h")
- Szene für Szene: Unterschiedliche Szenen können verschiedene Charaktere haben (dramatischer Einstieg, ruhiger CTA)
- Feinabstimmung: Verwenden Sie
--scene, um einzelne Szenen zu regenerieren, ohne alles neu zu machen - Request Stitching: Hält die Stimme über alle Szenen hinweg konsistent
Workflow-Beispiel
# 1. scenes.json mit Ihrem Skript erstellen
# 2. Alle Szenen mit Erzähler-Stil generieren
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--scenes remotion/mein-video-szenen.json \
--character narrator \
--output-dir public/audio/mein-video/
# 3. In Remotion Vorschau anzeigen, feststellen dass Szene2 zu früh beginnt
# 4. Nur Szene2 mit aktualisiertem Text regenerieren
node .claude/skills/elevenlabs-remotion-skill/generate.js \
--scenes remotion/mein-video-szenen.json \
--scene scene2 \
--new-text "Etwas längerer Text, um das visuelle Timing zu füllen" \
--output-dir public/audio/mein-video/
# 5. Videokomposition mit neuer Dauer aus info.json aktualisieren
# 6. Wiederholen, bis das Timing perfekt ist