Worum es geht
Die Figur braucht eine Stimme, die immer gleich klingt – in jedem Clip, bei jedem Text. Eine echte Stimme zu klonen kommt nicht infrage: Die Figur ist erfunden, ihre Stimme soll es auch sein.
Das gelingt mit zwei Modellen der Familie Qwen3-TTS. Das erste, VoiceDesign, erfindet eine Stimme aus einer Beschreibung wie „warm, ruhig, Anfang 30, leicht norddeutsch“. Davon entstehen mehrere Entwürfe; einen wählst du als Referenz. Das zweite, Base, nimmt diese Referenz und spricht damit jeden neuen Text. So bleibt die Stimme gleich, egal was die Figur sagt.
Was vorher passiert ist
Nur Lektion A0: Im Kursordner liegt figur.json, darin unter stimme die Beschreibung. Gesicht und LoRA sind für
diesen Schritt egal – die Stimme kannst du auch parallel zu A1 bis A4 entwerfen.
Der Ablauf
1. Einrichten
Qwen3-TTS bekommt eine eigene Python-Umgebung in werkzeuge/tts/, die Modelle landen in modelle/: VoiceDesign und
Base mit je rund 4,3 GB, dazu ein kleines Whisper-Modell für die Mitschrift.
2. Acht Entwürfe
Alle acht Entwürfe sprechen denselben Text und bekommen dieselbe Beschreibung. Sie unterscheiden sich nur im Seed – jeder Seed ergibt eine andere, aber reproduzierbare Stimme. Die Beschreibung schreibst du am besten auf Englisch: So stehen die Beispiele in der Modellkarte, und so lief es bei mir. Die Stimme selbst spricht trotzdem Deutsch.
A deep, low-pitched male voice in the bass-baritone range, of a man in his early thirties.
The voice has a husky, slightly raspy texture and sits low and resonant in the chest.
Warm, calm and charismatic. Clear standard German pronunciation with a very slight
northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher.
3. Tonhöhe messen
Ob eine Stimme „tief“ ist, hört man nicht immer sicher – vor allem nicht nach dem achten Entwurf. Ein kleines Werkzeug misst darum die mittlere Tonhöhe jedes Entwurfs. Für die Beschreibung oben ergab das:
| Entwurf | Tonhöhe |
|---|---|
| stimme_3 | 93 Hz |
| stimme_6 | 106 Hz |
| stimme_7 | 128 Hz |
| stimme_5 | 135 Hz |
| stimme_8 | 153 Hz |
| stimme_1 | 173 Hz |
| stimme_4 | 182 Hz |
| stimme_2 | 223 Hz |
Gleiche Beschreibung, acht Seeds – und eine Spanne von 93 bis 223 Hz. Zum Vergleich: Männerstimmen liegen grob bei 85 bis 180 Hz.
4. Wählen und übernehmen
Die Messung sortiert vor, entschieden wird mit dem Ohr. Gewählt habe ich Entwurf 7 – nicht den tiefsten. Die Wahl
wird zur Referenz: die Aufnahme als figur/stimme/referenz.wav, der gesprochene Text als referenz.txt. Beides
braucht das Base-Modell, um die Stimme zu klonen.
5. Sprechen und prüfen
Ab jetzt spricht die Figur jeden Text in dieser Stimme. Das Skript sprechen.py hängt vorn und hinten je eine Sekunde
Stille an und schreibt zum Schluss mit, was gesprochen wurde. So siehst du sofort, ob ein Wort verschluckt oder falsch
betont wurde. Beim Satz für die Startseite dieser Webseite kam heraus: „Deine Figur, deine Stimme, dein Text, in
sieben Schritten zum ersten Clip auf deinem Rechner mit einem KI-Agenten oder von Hand, du triffst die
Entscheidungen.“ – wortgetreu, 9,6 Sekunden plus Stille.
Von Hand: der ganze Weg
Drei Skripte aus dem Kit erledigen die Schritte, die Wahl und das Übernehmen machst du selbst. Mit -v gibt jedes
Skript vor dem Ausführen aus, welche Befehle es aufruft; danach liegt ein Protokoll (protokoll_stimme_entwerfen.sh, protokoll_sprechen.sh) im Ergebnisordner, das du
lesen oder erneut ausführen kannst. Mit --zeigen siehst du die Befehle, ohne dass etwas passiert.
Im Terminal, im Kursordner
# 1. Einrichten: Umgebung werkzeuge/tts, Modelle nach modelle/ (rund 9 GB)
python3 skripte/einrichten/tts.py -v
# 2. Acht Entwürfe aus der Stimmbeschreibung in figur.json, mit Tonhöhe
python3 skripte/stimme_entwerfen.py -v
cat figur/stimme/entwuerfe/tonhoehe.txt
# 3. Anhören (mpv oder ein anderer Player)
mpv figur/stimme/entwuerfe/stimme_*.wav
# 4. Wahl übernehmen (hier Entwurf 7) und festhalten
cp figur/stimme/entwuerfe/stimme_7.wav figur/stimme/referenz.wav
cp figur/stimme/entwuerfe/text.txt figur/stimme/referenz.txt
echo "| A5 | $(date +%F) | Stimme 7 | warm, ruhig, nicht zu tief |" >> entscheidungen.md
# 5. Probe: einen Satz sprechen, mit 1 s Stille vorn und hinten und Mitschrift
python3 skripte/sprechen.py "Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen." --aus clips/probe/stimme.wav -v
python3 skripte/pruefen.py A5Was -v bei Schritt 2 ausgibt – die Befehle, die das Skript tatsächlich aufruft:
Im Terminal, im Kursordner
python3 skripte/werkzeuge/comfy.py frei
cat > figur/stimme/entwuerfe/text.txt <<'EOF'
Hallo zusammen! Heute schauen wir uns an, warum es eigentlich regnet. …
EOF
werkzeuge/tts/venv/bin/python skripte/werkzeuge/tts_entwerfen.py --beschreibung 'A deep, low-pitched male voice of a man in his early thirties, slightly husky and raspy, warm, calm and charismatic. Clear standard German pronunciation with a very slight northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher explaining something to a class.' --text 'Hallo zusammen! …' --seeds 1 2 3 4 5 6 7 8 --ordner figur/stimme/entwuerfe
werkzeuge/tts/venv/bin/python skripte/werkzeuge/tonhoehe.py figur/stimme/entwuerfe/stimme_1.wav … figur/stimme/entwuerfe/stimme_8.wav --aus figur/stimme/entwuerfe/tonhoehe.txtDer erste Befehl gibt Grafikspeicher frei, falls ComfyUI aus einer früheren Lektion noch Modelle hält; läuft ComfyUI nicht, scheitert er harmlos. Der Grund in der Entscheidungszeile ist deiner.
Entscheidungen
Eine echte Stimme klonen oder eine erfinden?
Erfinden – aus einer Beschreibung
Die Figur ist erfunden, ihre Stimme auch. Eine echte Stimme zu klonen bräuchte die Einwilligung der Person und wäre ein Deepfake im Sinne des EU AI Act. VoiceDesign erzeugt eine Stimme, die es nicht gibt.
Wie viele Entwürfe?
Acht, je mit festem Seed
Die Streuung ist groß: Dieselbe Beschreibung ergab 93 bis 223 Hz. Bei vier Entwürfen kann die passende Stimme schlicht fehlen. Feste Seeds machen jeden Entwurf reproduzierbar.
Welcher Entwurf?
Entwurf 7 mit 128 Hz – nicht der tiefste
Die Messung hilft beim Vorsortieren, wenn „tief“ gewünscht ist. Gewählt wird mit dem Ohr: Klang, Wärme, Natürlichkeit. Die Wahl steht in entscheidungen.md.
Für jeden Text neu entwerfen?
Nein: einmal entwerfen, dann klonen
VoiceDesign erfindet bei jedem Aufruf neu – mit anderem Text klingt auch derselbe Seed nicht garantiert gleich. Die Base-Variante klont dagegen die gewählte Referenz. So bleibt die Stimme über alle Clips dieselbe.
Stille vor und nach dem Text?
Je 1 Sekunde
Das Videomodell in A6 erzeugt so viele Bilder, wie die Tonspur lang ist. Mit Stille hat die Figur Zeit, ruhig anzufangen und ruhig aufzuhören, statt mitten in der Bewegung zu beginnen oder abzubrechen.
Fallstricke
„Tief und rau“ ergibt nicht unbedingt eine tiefe Stimme
Wörter wie „rau“ oder „kratzig“ setzt das Modell oft mit einer höheren Stimme um. Bei meiner ersten Runde mit „warm, ruhig, mittlere Tonlage“ lagen alle Entwürfe zwischen 115 und 148 Hz; die Bitte um mehr Tiefe brachte erst mit acht Seeds die Auswahl.
LösungMehrere Seeds erzeugen und die Tonhöhe messen.
Abkürzungen werden falsch gesprochen
Das Modell liest „KI“ eher als Wort. Für die Stimme steht im Text „Ka-I-Agenten“, auf der Webseite bleibt „KI“. Die Mitschrift erkannte trotzdem „KI-Agenten“ – ein gutes Zeichen, dass es richtig klang.
LösungIm gesprochenen Text lautschriftlich schreiben, z. B. „Ka-I“ statt „KI“.
Der Clip beginnt oder endet abgehackt
Ohne Stille setzt die Stimme im ersten Bild ein und endet im letzten. Im Video sieht das aus, als sei es angeschnitten.
Lösungsprechen.py hängt je 1 s Stille an (--stille 1.0).
Die Mitschrift bricht mit einem Fehler in PyAV ab
Der eigene Decoder von faster-whisper verträgt sich nicht mit jeder Version von PyAV („unexpected keyword argument ‘metadata_errors’“). Wer das Werkzeug selbst baut, umgeht ihn so.
LösungAudio vorher mit librosa auf 16 kHz laden – so macht es mitschrift.py.
Kein Grafikspeicher für das Sprachmodell
ComfyUI behält Modelle aus früheren Lektionen im Speicher – bei mir über 20 GB. Die Skripte geben ihn zu Beginn frei.
LösungVorher ComfyUI entladen: python3 skripte/werkzeuge/comfy.py frei.
Mit KI vereinfacht
Der Agent richtet die Umgebung ein, erzeugt die Entwürfe, misst die Tonhöhe und legt dir alles zum Anhören hin. Das Anhören und die Wahl bleiben bei dir – dafür gibt es kein Maß, das dein Ohr ersetzt.
Der Agent
- richtet Qwen3-TTS und die Modelle ein
- erzeugt acht Entwürfe aus deiner Beschreibung
- misst die Tonhöhe und sortiert
- übernimmt die Wahl als Referenz und trägt sie ein
- spricht Probesätze und prüft sie per Mitschrift
Du
- beschreibst, wie die Stimme klingen soll
- hörst die Entwürfe an und wählst
Mit dem Skill avatar-stimme reicht ein Satz; die Beschreibung liest der Agent aus figur.json:
Entwirf acht Stimmen für meine Figur, miss die Tonhöhe
und leg sie mir zum Anhören hin.Der Skill ist in Vorbereitung und erscheint mit dem Video zu dieser Lektion.
Mit lokalem Qwen: Das Sprachmodell des Agenten und Qwen3-TTS teilen sich die Grafikkarte. Mit
OLLAMA_KEEP_ALIVE=0 aus der Einrichtung ist der Agent nach jeder Antwort entladen; Qwen3-TTS braucht ohnehin nur
einen kleinen Teil der 24 GB.