Produktvideo KI-Voiceover: Vom „klingt irgendwie komisch“ zur Profi-Erzählqualität
Dieses Skill entstammt einer echten Überarbeitung. Ein 2:43-minütiges englisches Hackathon-Produktvideo (11 Voiceover-Sätze, getaktet auf Bildschnitte) erhielt das Feedback, die Sprachausgabe „klinge irgendwie komisch“. Nach 9 Versionen, über einem Dutzend TTS-Engines und -Stimmen, kalibrierten Bewertungen und großen Stichproben wurde schließlich MOSS-TTS einmalige kontinuierliche Generierung + inhaltsbasierte Satztrennung + nur klassisches, stimmschonendes Post-Processing eingesetzt – mit Zustimmung des Nutzers.
Evaluierungsmethode siehe references/evaluation.md, Abwägungen zur akustischen Verarbeitung unter references/acoustic-polish.md, wiederverwendbare Skripte in scripts/.
1. Zuerst diagnostizieren, wo das „Komische“ liegt: Meist nicht die Klangqualität, sondern die Prosodie
[!IMPORTANT] Gute TTS-Systeme übertreffen in der Klangqualität längst normale Aufnahmen. UTMOS / Distill-MOS-Bewertungen liegen über sauberem echten Sprechen (LibriSpeech), daher kommt „komisch“ fast immer von der Prosodie. Mit professionellen Erzählungen aus Public Domain (NASA-Dokumentation, Demucs-getrennte Stimme) als Referenz ergeben sich folgende gemessene Merkmale:
| Merkmal | Professionelle Erzählung | Satzweise geklontes TTS (erste Version) |
|---|---|---|
| Tonhöhenvariation (F0-Standardabweichung, Halbtöne) | 4.6 | 2.7 (flach) |
| Satzendabsenkung (Halbtöne) | 0.7 | 2.3 (Satzende fällt ab) |
| Sprechgeschwindigkeit (Silben/Sekunde) | 4.2 | 4.55 (etwas schnell) |
| Durchschnittspause (Sekunden) | 0.39 | 0.54 |
Mit scripts/prosody_compare.py, scripts/end_fall.py und scripts/take_features.py werden Kandidat und Referenz anhand derselben Merkmale verglichen – datenbasiert, nicht nach Eindruck.
2. Generierung: Gesamten Text in einem Durchlauf, nicht satzweise zusammensetzen
- Kontinuierliche Generierung priorisieren. Bei satzweiser Generierung beginnen Tonhöhenvariation, Betonung und Atempausen jedes Satzes von neuem – zusammengesetzt ergibt das „komisch“. Lassen Sie das TTS den gesamten Voiceover-Text in einem Durchlauf lesen, mit Leerzeilen zwischen den Sätzen. Das Modell sieht den Kontext und die Sätze sind flüssig verbunden. In diesem Beispiel wurde MOSS-TTS v1.5 im Klonmodus verwendet, mit einer etwa 15-sekündigen Referenzaufnahme mit passender Betonung. Vier verschiedene Seeds generierten jeweils eine Version von ca. 2:10 Dauer mit einer Wortfehlerrate (WER) von 2–6%.
- Ergebnisse des Kandidatenvergleichs (gleiche Evaluierung):
- MOSS einmalige kontinuierliche Generierung: Prosodie-Distanz zur Profi-Erzählung 0.29 (am nächsten), wenigste Mängel;
- Qwen3-TTS VoiceDesign satzweise generiert, mit Performance-Anweisungen, mehrfach gezogen und prosodisch ausgewählt: Distanz 0.37, Natürlichkeit gleichauf mit MOSS;
- OpenAI gpt-audio: Distanz 0.57;
- Satzweises Klonen: Distanz 0.89.
- Bekannte Fallstricke:
- MOSS-VoiceGenerator (Textbeschreibung der Stimme) stoppt bei langen Texten bereits nach ca. 33 Sekunden, daher nicht für durchgehende Generierung geeignet.
- Gemini TTS erfordert das Format „AUDIO PROFILE / DIRECTOR'S NOTES / TRANSCRIPT“, sonst werden die Anweisungen mit vorgelesen; kostenlose Stufe: 10 Aufrufe pro Modell pro Tag.
- OpenAIs Stimmenvariation fiel in der Bewertung zu gering aus. Wenn kommerzielle KI-Stimmen verwendet werden, muss dies im Abspann vermerkt werden.
- Seed nach Prosodie-Merkmalen wählen: Bei akzeptabler WER den Seed mit geringster Distanz zur Profi-Referenz wählen. Falls ein einzelner Satz schlecht abschneidet (z.B. der Schlussslogan klingt wie Gluckern), kann nur dieser Satz durch eine Version des gleichen Referenz-Audios mit einem anderen Seed ersetzt werden.
3. Satztrennung: Inhaltsbasiert verifizieren, nicht nur Zeitstempeln vertrauen
Das gesamte, kontinuierlich generierte Audio muss wieder in einzelne Sätze geschnitten werden, um auf das Bild zu passen. scripts/align_split.py geht folgendermaßen vor:
- Mit SenseVoice werden Wort-Zeitstempel ermittelt und per Edit-Distanz mit dem Skript abgeglichen.
- An der Stille zwischen zwei Sätzen wird geschnitten.
- Inhaltsbasiert verifizieren: Für jede Stille innerhalb von 1,5 Sekunden um die Schnittstelle herum werden beide Seiten probehalber geschnitten, neu erkannt und die Position mit der geringsten Summe der Wortfehlerraten (WER) beider Seiten gewählt.
Nur Zeitstempel zu vertrauen führt zu Fehlern: TTS macht oft Pausen innerhalb von Sätzen (z.B. „Just | sentences“) und liest zwischen Sätzen flüssig weiter, wobei die Wort-Zeitstempel hinter dem tatsächlichen Einsetzen der Sprache liegen. Ohne inhaltsbasierte Verifikation würden „does | it“ und „Just | sentences“ fälschlich zum nächsten Satzanfang geschnitten.
4. Post-Processing: Nur quantifizierbare Probleme beheben, Tonhöhe nicht anfassen
| Behandlung | Ergebnis |
|---|---|
Pausen nach Satzzeichen glätten (pause_fix_en.py: innerhalb von Wortgruppen 0,10 s, Komma 0,25 s, Doppelpunkt 0,33 s, Satzende 0,45 s; kurzer Slogan 0,8 s Pause) | Beibehalten: Nur kürzen, nicht verlängern; Pausen nähern sich professionellen Erzählungen an |
Lautstärke vereinheitlichen (-20 LUFS pro Satz), Hochpass 70 Hz, -2 dB bei 300 Hz, leichte Entsibilisierung, 6% kleiner Raumhall (vo_post.py) | Beibehalten: Klangqualität bleibt gleich |
| Limiter | Entfernt: Distill-MOS fällt um ca. 0,14; ersetzt durch lineare Gain-Steuerung der Spitzenwerte |
| Mit WORLD-Vocoder oder Praat PSOLA Satzenden anheben, Tonhöhenvariation insgesamt erhöhen | Verworfen: Merkmale nähern sich zwar Profi-Erzählungen an, aber die strenge Bewertung fällt schlechter aus (je stärker WORLD bearbeitet, desto schlechter; stärkste Stufe −0,30, Konfidenzintervall [−0,61, −0,03]) |
Prinzip: Probleme an Satzenden und bei Tonhöhenvariation durch mehrfache Generierung und Auswahl lösen, nicht durch nachträgliche Tonhöhenveränderung.
5. Mischung: Musik soll zwischen den Sätzen nicht „pumpen“
scripts/duck_curve.py: Wenn die Pause zwischen Sätzen kürzer als 2,5 Sekunden ist, bleibt die Musik leise (−11 dB); das Ducken beginnt 0,25 Sekunden vor der Sprachwiedergabe, die Wiederherstellung erfolgt mit einem einpoligen Smoothing von 0,9 Sekunden. Der ursprüngliche gleitende Mittelwert von 0,3 Sekunden ließ die Musik in jeder Pause anschwellen, was vom Zuhörer als „Hecheln“ empfunden wurde. Endabmischung bei −14 LUFS, Spitzenpegel unter −1 dBFS; ASR-Wortfehlerrate der Sprachaufnahme in der Mischung zwischen 0 und 6,5%.
6. Bildtiming
- Wenn der Voiceover nicht in das Bild passt, kann die Animationssequenz insgesamt um ca. 5% verlangsamt werden; bei Bildschirmaufnahmen kann die Standzeit verlängert werden. Die Sprachaufnahme sollte nicht gestaucht werden.
- Viele Kommata lassen TTS oft steif klingen. Falls nötig, kann der Text leicht umformuliert werden, ohne den Sinn zu verändern, z.B. aus „Here it is, live, on real footage“ wird „running live on real footage“.
7. Freigabekriterien
- Wortfehlerrate jedes einzelnen Satzes im Skript ≤ 0,08; erneute Messung in der Mischung ebenfalls bestanden.
- Jeder Satz wird einzeln durch Gemini auf Mängel geprüft (jeweils nur eine Datei): keine Schnitt-, Verschleif-, Fehlaussprachen oder glucksende Satzenden.
- Prosodie-Distanz zur professionellen Erzählung und strenge Natürlichkeitstests (Einzelsätze, große Stichprobe, Bootstrap-Konfidenzintervalle) sind nicht schlechter als die Referenz (siehe Evaluierungsdokument).
- Endgültige Freigabe durch Hörprobe des Nutzers. KI-Bewertungen können nicht nachweisen, dass es „nicht komisch klingt“, siehe nächster Abschnitt.
8. Lehren aus „KI-Bewertung“
- Gemini-Paarvergleiche unbrauchbar: In 86% der Fälle wurde die zuerst abgespielte Datei bevorzugt, umgekehrte Reihenfolge ergab gegensätzliche Ergebnisse.
- Ranking mehrerer Dateien instabil: Dieselben Materialien in zwei Runden lieferten widersprüchliche Rangfolgen.
- Bewertungen ohne Referenz unzuverlässig: Amateur-Echtaufnahmen erhielten nur etwa 5 Punkte, während TTS etwa 6 Punkte bekam.
- Verwendbare Methode: Einzelsatz-Strenge-Tests mit professioneller Erzählung als Referenz, kombiniert mit großen Stichproben und Konfidenzintervallen. Selbst dabei ist die Einstufung als „menschlich“ verrauscht (gleiches Audio kann 0/8 oder 3/8 erhalten; auch echte Schauspieler werden manchmal als KI eingestuft).
- KI-Bewertungsaussagen überprüfen: Z.B. die Behauptung „das Mixing pumpt“ widerspricht der gemessenen Gain-Kurve; es sollte auf Messungen vertraut werden.