Communitygithub.com

viral-voice

Füge Voiceover, wortgenaue Untertitel und Soundeffekte zu einem gesichtslosen Reel hinzu und erstelle das fertige Video. Funktioniert mit einer kostenlosen KI-Stimme (Malayalam, Englisch, Hindi, Tamil und vielen mehr), ElevenLabs oder der eigenen Aufnahme des Benutzers. Verwende dies, wenn jemand eine Sprachaufnahme, Untertitel oder Soundeffekte für ein animiertes Reel benötigt oder ein mit viral-animate erstelltes Reel fertigstellen, rendern oder exportieren möchte. Der vierte Schritt des viral-Pakets.

Was ist viral-voice?

`viral-voice` ist der vierte Schritt des viral-Pakets und fügt einem animierten Reel Voiceover, wortgenaue Untertitel und Soundeffekte hinzu, um ein fertiges Video zu produzieren. Es unterstützt mehrere Sprachoptionen: eine kostenlose KI-Stimme (über Microsoft Edge Read Aloud via `edge-tts` für viele Sprachen), ElevenLabs für natürlich klingende Stimmen oder eigene Aufnahmen des Benutzers. Das Tool generiert automatisch Zeitstempel für Untertitel, sodass jedes Wort beim Sprechen hervorgehoben wird – bei der kostenlosen und ElevenLabs-Engine exakt, bei eigenen Aufnahmen je nach Aufnahmemethode geschätzt oder präzise. Es integriert synthetische Soundeffekte (z. B. Thumps, Whooshes, Pops) für Übergänge und Höhepunkte, die über `script.json` konfiguriert werden können. Der letzte Schritt (`finish.py`) rendert das Video in voller Qualität, mischt die Effekte und schreibt `final.mp4` mit einer normierten Lautstärke von ca. -14 LUFS. Das Tool ist plattformunabhängig und wird über die Kommandozeile gesteuert. Es erfordert keine spezielle IDE und funktioniert mit jedem Projektordner, der mit `viral-animate` erstellt wurde. Die Dokumentation betont, dass die Sprachausgabe nicht automatisch gehört werden kann – der Benutzer muss die generierte Audiodatei überprüfen oder transkribieren. Bei falscher Aussprache kann ein korrigierter Schreibweise pro Beat in `script.json` hinterlegt werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hadi-a-azeez/viral-agent/tree/main/skills/viral-voice

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht viral-voice?

Einmaliges Setup: bash setup.sh. Skripte in dieser Anleitung befinden sich neben dieser Datei, verwende daher ihren vollständigen Pfad.

1. Eine Stimme auswählen

Frage den Benutzer, welche er möchte, und sei direkt bei den Vor- und Nachteilen:

OptionKostenQualitätZeitsteuerung der Untertitel
Kostenlose Stimme (Standard)KostenlosDeutlich, etwas flachExakt, jedes Wort leuchtet beim Sprechen auf
ElevenLabsDeren kostenpflichtiger Tarif oder kostenloses GuthabenAm natürlichstenExakt, wenn das Modell Zeitstempel liefert
Eigene StimmeKostenlosAm persönlichstenGeschätzt pro Zeile. Enger, wenn taktweise aufgenommen

Die eigene Stimme ist in der Regel am besten, weil man hört, wenn es jemand ernst meint. Ein gesichtsloses Reel muss nicht stimmlos sein.

# Kostenlose Stimme. Wählt Midhun für Malayalam. --voice ml-IN-SobhanaNeural für die andere Malayalam-Stimme.
python3 voice.py <projekt>

# ElevenLabs. Benötigt ELEVENLABS_API_KEY und eine Stimmen-ID. Malayalam benötigt ein Modell, das es unterstützt, wie eleven_v3.
python3 voice.py <projekt> --engine elevenlabs --voice <stimmen-id> --model eleven_v3

# Eigene Aufnahme, ein Durchlauf des gesamten Skripts in Reihenfolge
python3 voice.py <projekt> --engine file --audio aufnahme.m4a

# Eigene Aufnahme, eine Datei pro Takt (voice/b1.m4a, voice/b2.m4a). Die Zeitsteuerung ist so genauer.
python3 voice.py <projekt> --engine file --audio voice/

Audio aus anderen Tools funktioniert ebenfalls über --engine file. Wenn also ein Sprachgenerierungstool angeschlossen ist, generiere eine Datei pro Takt und übergib den Ordner.

Bei Aufnahmen wird jede Zeile anhand der Wortlänge zwischen Pausen zeitlich eingeordnet, sodass ein Untertitel bei einem einzelnen langen Durchlauf bis zu etwa einer Sekunde abweichen kann. In unserem Test mit einem echten 48-sekündigen Malayalam-Reel lagen die meisten Untertitel innerhalb einer halben Sekunde. Wenn es nicht passt, nimm taktweise auf.

Die kostenlose Stimme läuft über den Edge-Vorlesedienst von Microsoft durch das Open-Source-Tool edge-tts. Es ist keine offizielle API, daher könnte sie sich ändern oder nicht mehr funktionieren, und jeder, der sie für Kunden- oder kommerzielle Arbeiten nutzt, sollte zuerst die Bedingungen prüfen. Sage dies, wenn der Benutzer Videos für ein Unternehmen erstellt.

2. Jemand muss zuhören

Du kannst Audio nicht durch diese Tools hören, und timing.json zeigt nur die Wörter aus dem Skript, niemals, was die Stimme tatsächlich gesagt hat. Nichts hier kann also die Aussprache bestätigen. Bitte den Benutzer, voice.wav anzuhören, oder wenn ein Transkriptionstool angeschlossen ist, transkribiere es und vergleiche. Sage klar, dass es ungehört bleibt, wenn keines von beidem geschieht.

Wenn die Stimme ein Wort falsch ausspricht, füge "tts" zu diesem Takt in script.json hinzu, mit einer Schreibweise, die es richtig ausspricht, und führe es erneut aus. Der Untertitel verwendet weiterhin say. Behalte möglichst die gleiche Anzahl von Wörtern in tts wie in say. Wenn sie abweichen, gibt voice.py einen Hinweis aus und die Zeitsteuerung des Untertitels für diesen Takt wird zu einer Schätzung.

Wenn eine Zeile gehetzt klingt, ändere --rate (Standard +8%). --gap legt die Pause zwischen den Takten fest.

Die Längenschätzungen von lint_script.py und timing.py sind nur grob und können 10 bis 15 % zu kurz sein. Die tatsächliche Länge gibt voice.py aus. Um eine Zielzeit zu erreichen, ändere --rate oder kürze Wörter und führe es dann erneut aus.

3. Das Bild noch einmal ansehen

Die echte Stimme hat alles verschoben, also schau vor dem endgültigen Rendern nach:

node <viral-animate-ordner>/render.mjs <projekt> --stills beats

Öffne stills/beats.jpg. Bewegungen, die an k, d oder kit.at gebunden sind, sind der Stimme gefolgt. Alles mit festen Sekunden darin ist es nicht, also korrigiere diese in scenes.js.

4. Soundeffekte

sfx.py läuft automatisch: ein leiser Schlag am Anfang und ein leises Whoosh bei jedem Taktwechsel. Für ein ruhiges, emotionales Stück schalte diese mit "sfx_auto": false in script.json aus. Um weitere hinzuzufügen, liste sie auf, auf einem Wort, damit sie synchron bleiben:

"sfx": [{ "beat": "b2", "word": "charger", "kind": "pop", "db": -14 }]

Verwende "at": 1.1 anstelle von word für Sekunden innerhalb des Taktes. Ein Wort, das der Takt nicht sagt, stoppt mit einer klaren Meldung. Arten:

ArtKlingt wieGut für
whoosh swellAufsteigende LuftWechsel, hereinfliegende Dinge
swipeSchnelles Streifen von LuftSchnelle Bewegungen
popKleiner runder PloppErscheinende Dinge
tickWinziger trockener TickZähler, kleine Momente
clickScharfer SchalterklickLichtschalter, Knöpfe
knockKnöchel auf HolzTüren, Tische
thumpTiefer SchlagEröffnungen, große Enthüllungen
stampHarter Schlag mit GewichtUrteile, einen Punkt landen

Sie sind alle synthetisch, daher gibt es kein Lizenzrisiko. Das Paket fügt keine Musik hinzu: Es hält die Stimme klar und vermeidet Urheberrechtsverletzungen. Wenn der Benutzer Musik wünscht, kann er sie im Instagram-Editor hinzufügen.

5. Fertigstellen

python3 finish.py <projekt>

Dies rendert das Bild in voller Qualität auf der echten Stimmenzeitsteuerung, mischt die Effekte ein, stellt die Lautstärke auf etwa -14 LUFS ein und schreibt final.mp4. Füge --no-render hinzu, um nur den Ton neu zu mischen.

Testversionen: Um die anderen Hooks zu testen, kopiere den Projektordner, setze das say eines anderen Hooks in b1 und dessen label in das oberste label, und führe dann voice.py und finish.py auf der Kopie aus. Bewegungen, die an k, d oder kit.at gebunden sind, folgen. Überprüfe, ob jedes kit.at-Wort noch im neuen Hook ist.

Gehe dann zu /viral-check. Bezeichne das Reel nicht als fertig, bevor das geschehen ist.

Verwandte Skills