Lehrvideos mit KI: vom Skript zum fertigen Video, lokal
Du schreibst den Text, eine lokale KI spricht ihn, Skripte schneiden und prüfen. Ändert sich später ein Satz, machst Du nur diesen einen Abschnitt neu.
▶ Das entsteht in diesem Kurs
Worum geht's?
Ein Lehrvideo von Hand zu schneiden kostet Stunden, und nach dem ersten Update ist es veraltet. In diesem Kurs baust Du eine Kette: Aus einem Storyboard entstehen Sprechtext, Stimme, Schnitt, Untertitel und Transkript. Der Text ist die Quelle der Wahrheit. Alles andere wird daraus erzeugt und lässt sich neu erzeugen.
Das Beispiel ist die Übungsseite der fiktiven Nordwerk GmbH: ein Blick in den Browser, ein Befehl im Terminal. Beim Bau haben die Prüfschichten drei Fehler gefunden, die technisch fehlerfrei waren und trotzdem falsch:
- Stufe 8: Die Stimme sagt „das steht oben rechts im Bild“, aber auf den Titeltafeln stand dort nichts.
- Stufe 10: Die Prüfung meldete 22 Sekunden Schwarzbild. Es war das dunkle Terminal. Der Kontaktbogen hat es in zwei Sekunden geklärt.
- Stufe 11: Derselbe Schnitt kam aus Shotcut um 12 dB leiser heraus als aus dem Skript.
Selbstlern-Kurs zum Mitmachen. Dein Fortschritt wird nur in Deinem Browser gespeichert.
? Für wen ist das interessant?
↗ Was Du vorher brauchst
- Terminal-Grundlagen: einen Ordner öffnen, einen Befehl ausführen, eine Fehlermeldung lesen (Terminal-Basics).
- Python 3.11 oder neuer und ffmpeg im Suchpfad. Prüfen mit
python --versionundffmpeg -version. ffmpeg gibt es unter ffmpeg.org. - Für die Stimme eine NVIDIA-Grafikkarte mit 8 GB oder etwas Geduld: Ohne Grafikkarte lief es im Test nur halb so schnell (Stufe 5).
- OBS Studio für die Aufnahmen und Shotcut für den Feinschliff, beide kostenlos.
- Die Übungsdateien: lehrvideo-werkzeuge.zip (4,6 MB) herunterladen und entpacken. Darin liegen die zwölf Werkzeuge, das komplette Nordwerk-Beispiel mit Ton und Aufnahmen, eine Kunststimme zum Üben, die Übungsseite und die Checkliste vor der Aufnahme.
- Zeit: etwa 4 Stunden. Die Rechenzeit fürs ganze Beispiel lag mit Grafikkarte bei rund 6 Minuten.
📚 Die zwölf Stufen
ℹ Stand der Dinge
Gebaut und ausprobiert am 26. September 2026 unter Windows 11 mit einer RTX 3090 und einem Intel Core i9-11900KF: Qwen3-TTS (Paket qwen-tts 0.1.1, Modelle 1.7B VoiceDesign und Base), faster-whisper 1.2.1 mit large-v3, OBS Studio 32.2.2, ffmpeg 7.1, Pillow 12.3 und melt 7.41, der Schnitt-Engine von Shotcut 26.8.1. Das Shotcut-Projekt haben wir mit melt gerendert. Das Öffnen in der Shotcut-Oberfläche war nicht Teil der Messung.
Keine Rechtsberatung. Die Angaben zur KI-Verordnung geben den Stand vom September 2026 wieder, wie im Kurs KI-Sicherheit (Stufe 6).
Die Kette im Überblick
Acht Schritte vom Text zum Video. Die meisten erledigen Skripte, drei bleiben bei Dir.
1 Das Bild
2 Warum eine Kette und kein Schnittprogramm
| Situation | Von Hand geschnitten | Mit der Kette |
|---|---|---|
| Ein Menüname ändert sich | Neu sprechen, Tonspur austauschen, Schnitt nachziehen, Untertitel anpassen | Satz im Storyboard ändern, ein Befehl vertont nur diesen Abschnitt, zwei Befehle schneiden und prüfen |
| Ein Fachbegriff klingt falsch | Stelle suchen, neu einsprechen | Eine Zeile in aussprache.txt, betroffene Abschnitte entstehen von selbst neu |
| Untertitel | Abtippen oder Spracherkennung korrigieren | Fallen aus dem Storyboard heraus, Schreibweise stimmt |
| Feinschliff mit Musik und Blenden | Das kann ein Schnittprogramm besser | Darum gibt es Stufe 11: Die Kette liefert ein Shotcut-Projekt |
Mit dieser Kette sind die Lehrvideos der Kurse zu LM Studio, Open WebUI, LibreChat, n8n und Docling entstanden, dazu 30 Lehrvideos der AuxData-Akademie. 27 Kapitel davon wurden später mit einer anderen Stimme neu vertont, ohne ein Bild neu aufzunehmen.
3 Einrichten
lehrvideo-werkzeuge.zip ist entpackt. Ein Terminal steht im Ordner lehrvideo-werkzeuge.4 Kapitel, 11 Abschnitte, 6 Aussprache-Einträge · 0 Fehler, 0 WarnungenFEHLER: ffprobe nicht gefunden: ffmpeg installieren und das Terminal neu öffnen, damit der Suchpfad gilt. python unbekannt: unter Windows py versuchen.python -m venv .venv .venv\Scripts\activate pip install -r anforderungen/werkzeuge.txt ffmpeg -version python werkzeuge/pruefe_storyboard.py --projekt beispiel
source .venv/bin/activate. Die Umgebungen für Stimme und Rückprüfung legst Du erst in Stufe 4 und 5 an. Sie bringen große Bibliotheken mit, die hier noch niemand braucht.Jedes Werkzeug erklärt sich mit --help. Fehler kommen als deutscher Satz mit FEHLER: davor, nicht als Python-Traceback. Wer eine andere Meldung sieht, hat einen Fehler in den Werkzeugen gefunden.
✓ Kurz geprüft
Recht vor der ersten Stimme
Eine geklonte Stimme ist ein Werkzeug, mit dem man auch betrügen kann. Vier Regeln, bevor die erste entsteht.
1 Wessen Stimme?
Das Beispielvideo spricht mit der geklonten Stimme des Kursautors, also mit seiner eigenen. Seine Referenzaufnahme liegt nicht im Download: Aufnahme plus Transkript sind ein fertiger Bausatz zum Klonen. Zum Üben liegt stattdessen eine entworfene Kunststimme bei, die keinem Menschen gehört. Stufe 4 zeigt beide Wege.
2 Wann kennzeichnen?
Seit dem 2. August 2026 gelten die Transparenzpflichten der KI-Verordnung (Art. 50). Wer mit KI Audio oder Video erzeugt, das echte Personen täuschend echt darstellt, muss offenlegen, dass es künstlich ist. Eine geklonte Stimme eines echten Menschen gehört dazu.
3 Fremdes Material
- Musik: nur mit Lizenz, die Deine Nutzung abdeckt. „Hab ich auf YouTube gehört“ ist keine.
- Ausschnitte anderer Videos, Logos, Screenshots fremder Seiten: nur mit Rechten. Eine fertige Schulung des Kursautors ist bis heute unveröffentlicht, weil die Rechte an eingebauten Videoausschnitten ungeklärt sind.
- Menschen im Bild, auch in Kacheln einer Videokonferenz oder im Hintergrund einer Aufnahme: nur mit Einwilligung.
- Übungsdaten statt echter Daten. Kundennamen, E-Mail-Adressen und Preise aus dem echten System gehören nicht in ein Lehrvideo (Stufe 6).
4 Deine Regeln
Schreib Dir drei Regeln für Deine eigenen Videos auf, bevor Du weitermachst. Eine Vorlage:
1. Stimme: Ich verwende ________ (meine eigene / eine entworfene). Fremde Stimmen nur mit schriftlicher Einwilligung. 2. Kennzeichnung: Oben rechts steht „Stimme KI-generiert“, in der Beschreibung der Satz „________________________________________________“. 3. Material: Musik nur aus ________ (Quelle mit Lizenz), Daten nur aus ________.
Ergebnis dieser Stufe: drei Regeln, die Du im Team zeigen kannst. Die dritte wird in Stufe 6 noch einmal wichtig.
✓ Kurz geprüft
Das Storyboard schreiben
Eine JSON-Datei, aus der alles Weitere entsteht. Fürs Ohr geschrieben, mit Marken fürs Bild.
1 Der Aufbau
Ein Storyboard hat Kapitel, und jedes Kapitel hat Abschnitte. Ein Abschnitt ist ein bis vier Sätze, die zusammen vertont werden. Es gibt zwei Arten von Kapiteln:
- karte: Eine Tafel mit Titel und Untertitel, die Stimme spricht darüber.
- aufnahme: Ein Stück aus einer Bildschirmaufnahme. Jeder Abschnitt sagt mit
vonundbis, welches Stück er zeigt. Die Marken sind Namen, die Zeiten stehen getrennt inmarken.json.
{
"titel": "Die Nordwerk-Übungsseite",
"kennzeichnung": "Geklonte KI-Stimme von Florian Ludwig",
"sprache": "German",
"breite": 1920, "hoehe": 1080, "fps": 30,
"pause_nach_abschnitt": 0.4,
"kapitel": [
{ "id": "01-titel", "typ": "karte",
"titel": "Die Nordwerk-Übungsseite",
"untertitel": "Produkte ansehen und die Preisliste im Terminal ausgeben",
"abschnitte": [
{"id": "titel-1", "text": "Willkommen bei Nordwerk. In diesem kurzen Video zeige ich Dir die Übungsseite aus unserem Kurs."}
] },
{ "id": "03-terminal", "typ": "aufnahme", "datei": "aufnahmen/03-terminal.mkv",
"abschnitte": [
{"id": "term-1", "von": "prompt", "bis": "befehl",
"text": "Im Terminal stehen wir im Ordner der Übungsseite. Dort liegt die Datei app.js."},
{"id": "term-2", "von": "befehl", "bis": "ausgabe",
"text": "Mit node app.js startet das Programm und gibt die Preisliste aus."}
] }
]
}
audio/term-2.wav, aus/teile/08-term-2.mp4.2 Fürs Ohr schreiben
| Regel | Statt | Besser |
|---|---|---|
| Eine Aussage pro Satz | Nachdem Du die Seite, die im Ordner liegt, geöffnet hast, siehst Du … | Öffne die Seite aus dem Ordner. Oben siehst Du … |
| Höchstens vier Sätze je Abschnitt | Ein Abschnitt, der eine ganze Minute lang erklärt | Neuer Abschnitt, sobald sich im Bild etwas ändert |
| Zeichen ausschreiben | Produkte & Preise, 3/4 der Fälle | Produkte und Preise, drei Viertel der Fälle |
| Sagen, was man sieht | Hier klicken wir drauf. | Mit dem Knopf „Anfragen“ schickst Du eine Anfrage ab. |
3 Die Aussprache-Tabelle
Im Storyboard steht immer die richtige Schreibweise, denn daraus werden später die Untertitel. Wie ein Begriff gesprochen wird, steht getrennt in aussprache.txt:
# Begriff = Aussprache app.js = App Punkt Jot Es node = Noud KI = Ka-I Browser = Brauser 1290 = zwölfhundertneunzig 2120 = zweitausendeinhundertzwanzig
Vor dem Vertonen wird jeder Begriff durch seine Aussprache ersetzt, ganze Wörter, längere Begriffe zuerst. Eine Zeile ohne = ist ein Fehler, keine stille Auslassung. Wie wir auf diese Einträge gekommen sind, zeigt Stufe 5. Die Zeilen mit Zahlen zeigen den zweiten Nutzen: Im Untertitel steht „1290“, gesprochen wird „zwölfhundertneunzig“.
4 Die Prüfung, bevor irgendetwas entsteht
beispiel ist nach uebung kopiert. Darin hast Du bei term-2 „und“ durch „&“ ersetzt, als bis „ausgab“ eingetragen und web-1 um drei kurze Sätze verlängert.python werkzeuge/pruefe_storyboard.py --projekt uebungkein gültiges JSON: Zeile 23, Spalte 5: meist ein Komma zu viel oder zu wenig. Die Zeilenangabe stimmt, der Fehler steht oft eine Zeile darüber.Repariere alle vier Stellen, bis die Prüfung 0 Fehler, 0 Warnungen meldet. Dann schreibst Du ein Storyboard für ein eigenes Thema: zwei Kapitel, eine Tafel und eine Aufnahme. Die Marken erfindest Du vorerst, die Zeiten kommen in Stufe 6.
✓ Kurz geprüft
Eine Stimme festlegen
Eine Kunststimme entwerfen oder die eigene klonen. Beide Wege enden in denselben zwei Dateien.
1 Zwei Wege, ein Ergebnis
| Kunststimme entwerfen | Eigene Stimme klonen | |
|---|---|---|
| Woher | Das Modell VoiceDesign erzeugt eine Stimme aus einer Beschreibung | Du nimmst 10 bis 25 Sekunden Deiner Stimme auf |
| Rechtlich | Gehört keinem Menschen, trotzdem kennzeichnen | Deine Stimme, kennzeichnen ist Pflicht (Stufe 2) |
| Klang | Neutral, für Beispiele und Teams ohne Sprecher | Du, auch in Videos, die Du nie eingesprochen hast |
| Ergebnis | referenz.wav und referenz.txt mit genau dem Text, der darin gesprochen wird. Eine Kunststimme darf im Projekt unter stimme/ liegen, die eigene gehört in einen Ordner außerhalb (--stimme). Daraus klont vertonen.py in Stufe 5 jeden Abschnitt. | |
2 Die Umgebung für die Stimme
python -m venv .venv-stimme .venv-stimme\Scripts\activate pip install torch --index-url https://download.pytorch.org/whl/cu128 pip install -r anforderungen/stimme.txt
pip install torch. Beim ersten Aufruf lädt Qwen3-TTS seine Modelle von Hugging Face: je Modell etwa 4,3 GB, dazu 0,65 GB für den Tokenizer.Beim Bau lagen die Modelle schon auf dem Rechner. Den Download haben wir deshalb nicht gemessen.
3 Weg A: eine Kunststimme entwerfen
.venv-stimme ist aktiv, Dein Projektordner heißt mein-video und enthält Dein Storyboard aus Stufe 3.stimme_entwerfen.py mit Beschreibung und Probetext starten (Befehl unten).Referenz: …\stimme\referenz.wav (8.6 s), Rechenzeit 50 s auf cuda. Im Ordner stimme liegen die WAV, ihr Text und stimme.json mit allen Einstellungen.stimme umbenennen, Beschreibung ändern, neu entwerfen. Das Werkzeug überschreibt nie eine vorhandene Stimme.python werkzeuge/stimme_entwerfen.py --projekt mein-video \ --beschreibung "A native German female narrator in her thirties with a calm, friendly and clear voice. Natural conversational pace, explains software to a colleague. No advertising tone, no whispering, no background music." \ --probetext "Hallo, ich bin die Sprecherin für die Nordwerk-Beispiele. Ich erkläre ruhig und deutlich, was auf dem Bildschirm passiert, damit man gut folgen kann."
4 Weg B: die eigene Stimme
- Aufnehmen: 10 bis 25 Sekunden, ruhiger Raum ohne Hall, gleichmäßiger Abstand zum Mikrofon, keine Musik. Sprich so, wie Du erklären willst, nicht wie beim Vorlesen.
- Speichern als
referenz.wavin einem eigenen Ordner außerhalb Deiner Projekte, zum BeispielD:/stimmen/meine-stimme/. - Den Text exakt aufschreiben, so wie Du ihn gesprochen hast, auch mit „äh“ oder einem wiederholten Wort, in
referenz.txtdaneben. Der Klon lernt aus dem Zusammenspiel von Ton und Text. - Beim Vertonen darauf zeigen:
vertonen.py --projekt mein-video --stimme D:/stimmen/meine-stimme. So landet Deine Referenz in keinem Repository und in keinem Download.
Genau so spricht das Beispielvideo: mit der Stimme des Kursautors (florian-de, 20,4 s Referenz), vertont mit --stimme. Derselbe Weg läuft auf seiner Maschine seit dem 23.09.2026, 27 Kapitel der AuxData-Akademie sind damit neu vertont worden.
vertonen.py 0,6, für beide Stufen des Modells. Und ein Klangfilter, der die Stimme „verbessern“ sollte, hat sie schlechter gemacht. Vergleich vorher und nachher, bevor Du einen einsetzt.✓ Kurz geprüft
beispiel/kunststimme als stimme in Dein Projekt. Die Stimme entsteht dann auf dem Prozessor, das dauert etwas länger (Stufe 5).Vertonen, abhören, gegenprüfen
Die KI spricht, Whisper hört mit, und Du entscheidest. Warum der dritte Schritt nicht wegfällt.
1 Vertonen
.venv-stimme aktiv.python werkzeuge/vertonen.py --projekt mein-videoJetzt anhören, dann rueckpruefung.py. Im Ordner audio je Abschnitt eine WAV.SoX could not be found und flash-attn is not installed sind harmlos, die WAVs entstanden im Test trotzdem. Bricht das Werkzeug mit „Die Stimme ist nicht mehr dieselbe“ ab: Stufe 12.| Gemessen am 26.09.2026 | Mit Grafikkarte (RTX 3090) | Ohne (i9-11900KF, 8 Kerne) |
|---|---|---|
| Rechenzeit je Sekunde Ton | 3,2 s | 6,1 s |
| Ein Abschnitt mit Laden des Modells | 41 s für 9,0 s Ton | 46 s für 5,4 s Ton |
| Grafikspeicher zusätzlich | rund 5 GB (von 3,2 auf 8,4 GB) | – |
| Das ganze Beispiel (80 s Ton) | 267 s | nicht gemessen, gerechnet etwa 8 Minuten |
Je eine Messung, die Einzelwerte mit der Kunststimme, das ganze Beispiel mit der Stimme des Kursautors. Die Rechenzeit je Sekunde Ton war bei beiden Stimmen gleich. Ohne Grafikkarte war es nur halb so schnell, nicht zehnmal langsamer, wie wir vor dem Bau geschätzt hatten. Auf schwächeren Prozessoren dauert es länger.
2 Abhören, jede Datei
Hör jede WAV einmal ganz an. Achte auf drei Dinge: abgeschnittene Enden, falsch betonte Fachbegriffe und Zahlen. Eine Maschine hört Fehler, die Du überhörst, und Du hörst Fehler, die sie überhört. Deshalb machen es beide.
3 Whisper hört mit
python -m venv .venv-rueck .venv-rueck\Scripts\activate pip install -r anforderungen/rueckpruefung.txt pip install nvidia-cublas-cu12 nvidia-cudnn-cu12 (nur Windows mit Grafikkarte) python werkzeuge/rueckpruefung.py --projekt mein-video
rueckpruefung.py transkribiert jede WAV mit Whisper large-v3 und vergleicht mit dem Storyboard. Unter 90 % Ähnlichkeit steht PRÜFEN mit den abweichenden Wörtern. Im Beispiel dauerte das für alle elf Abschnitte 12 Sekunden. Ohne Grafikkarte: --geraet cpu.So lief es beim ersten Bau mit der Kunststimme, vier Durchläufe lang:
| Lauf | Aussprache | Whisper hörte bei term-2 | Ähnlichkeit |
|---|---|---|---|
| 1 | node = nohd, app.js = App Punkt J S | „Mit notapp.us startet das Programm …“ | 72 % |
| 2 | node = Noud | „Mit nautapp.us startet …“ | 78 % |
| 3 | app.js = App Punkt Jot Es | „Mit nautapp.js startet …“ | 87 % |
| 4 | unverändert, aber Whisper bekommt die Begriffe als Starthilfe | „Mit node app.js startet …“ | 100 % |
rueckpruefung.py Whisper die Begriffe aus aussprache.txt als Starthilfe mit und vergleicht mit beiden Fassungen: mit dem, was gesprochen werden sollte, und mit der Schreibweise. Beim ersten Lauf hatte Whisper in term-1 richtig „app.js“ geschrieben und war trotzdem mit 87 % aufgefallen, weil es nur mit „App Punkt J S“ verglichen wurde.Am Ende stand: Keine Auffälligkeiten. Abhören trotzdem. Dann bekam das Beispiel die Stimme des Kursautors, und die Rückprüfung fand Neues:
| Abschnitt | Whisper hörte | Was wir getan haben |
|---|---|---|
term-3, 87 % | „12.290 Euro“ statt 1290, „2212“ statt 2120 | Zahlen mit Sprechweise in aussprache.txt, nur term-3 neu vertont (39 s): 92 % |
term-2, 96 % → 88 % | „node-app.j, es“, obwohl die WAV unverändert war | Die Zahlen standen jetzt auch in Whispers Starthilfe und haben verschoben, wie es den Nachbarabschnitt hört. Zahlen bleiben seitdem draußen: wieder 96 % |
web-2, 90 % | „der Stuhllüt“ statt „der Stuhl Lütt“ | Nichts verbogen: Das klärt das Ohr, nicht die Schwelle |
Zwei Lehren daraus. Eine neue Stimme heißt neu prüfen, denn ihre Fehler sind andere. Und die Rückprüfung ist ein Hinweisgeber, kein Urteil: Ob „Noud“ oder „Stuhl Lütt“ so klingen, wie Du es willst, entscheidet Dein Ohr.
4 Nur neu, was sich geändert hat
Steht eine neue Zeile in aussprache.txt, startest Du einfach wieder vertonen.py. Es erzeugt nur die Abschnitte neu, deren gesprochener Text sich dadurch geändert hat, und schreibt dazu, warum: (… s gerechnet, Text oder Aussprache geändert). Alle anderen WAVs bleiben, wie sie sind.
✓ Kurz geprüft
Aufnehmen, ohne etwas zu verraten
Eine Aufnahme zeigt alles, was im Bild ist, Bild für Bild und gestochen scharf. Erst prüfen, dann aufnehmen, dann die Marken ablesen.
1 Vorab-Prüfung, jedes Mal
.env in einem Editor offen, im Hintergrund. In einem einzelnen Bild der Aufnahme waren Zugangsdaten im Klartext zu lesen. Die Datei hat die Maschine nie verlassen. Die Lehre ist nicht „besser aufpassen“: Wer nach Plan aufnimmt, schaut auf den Plan und nicht auf den Rand des Bildschirms.Im Download liegt vorab-pruefung.md. Die wichtigsten Punkte:
- Fensteraufnahme statt Bildschirmaufnahme. Sie zeigt ein Programm und keine Benachrichtigung, die hereinplatzt.
- Nur Übungsdaten im Bild. Kein Editor mit
.env, auch nicht in einem Hintergrund-Tab: Der Fenstertitel zeigt nur den aktiven. - Browser mit eigenem Profil, ohne Lesezeichen, Verlauf und angemeldete Konten. Terminal mit neutralem Prompt, im Beispiel
PS nordwerk-website>, ohne Benutzer- und Rechnernamen. - War doch etwas im Bild: Take löschen und neu aufnehmen, nicht wegschneiden. Ein Zugangsdatum, das im Bild war, gilt als bekannt und wird gewechselt.
2 OBS einrichten
- Einstellungen → Video: Basis- und Ausgabeauflösung 1920 × 1080, 30 Bilder pro Sekunde. So wie
breite,hoeheundfpsim Storyboard. - Einstellungen → Ausgabe: Aufnahmeformat MKV. Stürzt OBS ab, bleibt eine MKV lesbar, eine MP4 nicht. Die Werkzeuge lesen MKV direkt.
- Quelle „Fensteraufnahme“ anlegen und beim Fensterabgleich die Option wählen, bei der der Titel übereinstimmen muss. Beim Bau zeigte die Quelle zuerst ein anderes, privates Chrome-Fenster, weil sie nach dem Programm gesucht hatte statt nach dem Titel. Aufgefallen ist es beim Einrichten, vor dem ersten Take. Ein Blick in die OBS-Vorschau zeigt es genauso.
- Terminal unter Windows: Aufnahmemethode „Windows 10 (1903 and up)“. Mit „BitBlt“ blieb bei einer früheren Produktion ein ganzes Terminal-Kapitel 65 Sekunden lang schwarz, und OBS hat nichts gemeldet.
- Fenster fest einstellen, nicht maximieren. Etwas größer als 1920 × 1080, dann in OBS die Titelleiste wegschneiden (Alt und am Rand der Quelle ziehen).
--lang=de startete, und die Bildlaufleiste stand im Bild. Für Deine Videos ist der Weg von Hand der Hauptweg. Die Marken liest Du danach ab.3 Marken ablesen
marken_bilder.py legt aus einer Aufnahme einen Bogen an, mit einem Bild je halbe Sekunde und der Zeit darunter:

--von 8.4 --bis 9.6 --schritt 0.1 wird es genauer: Die erste Zeile der Ausgabe erscheint bei 9,1 s.von-Marke bis kurz vor seiner bis-Marke. Reicht der Ton länger, bleibt das letzte Bild davor stehen. Im Beispiel liegt ausgabe deshalb bei 10,7 s und nicht bei 9,1 s. Bei 9,1 s bliebe term-2 auf dem Bild ohne Preisliste stehen, während die Stimme sagt, dass das Programm sie ausgibt. Also: von auf das erste Bild, das dazugehört, bis hinter das, was am Ende noch zu sehen sein soll.4 Deine Aufnahme
nordwerk-website/index.html ist im Browser offen.aufnahmen/02-website.mkv in Dein Projekt legen, dann marken_bilder.py --kapitel 02-website.aus/. Daraus trägst Du die Zeiten in marken.json ein, und pruefe_storyboard.py meldet keinen Fehler zu Marken mehr.Marke … liegen hinter dem Ende der Aufnahme: Tippfehler in der Zeit oder falscher Take.✓ Kurz geprüft
Bild und Ton zusammenbringen
Der Satz dauert, so lange er dauert. Das Bild passt sich an, nach drei festen Regeln.
1 Die Regeln
- Satz länger als Bild: Das letzte Bild bleibt stehen. Gestreckt wird nie, denn gestrecktes Bild ruckelt und sieht nach Fehler aus.
- Bild länger als Satz: Das Bild läuft weiter, der Ton bekommt Stille dahinter.
- Viel zu langes Bild, etwa eine Installation, die 40 Sekunden läuft: Mit
"raffen": trueim Abschnitt läuft es schneller, mit der Einblendung „Zeitraffer“. Ein Zeitraffer, den man nicht sieht, ist eine falsche Aussage über die Geschwindigkeit.
Hinter jedem Abschnitt folgt eine kurze Pause, im Beispiel 0,4 Sekunden (pause_nach_abschnitt).
2 So ging es im Beispiel auf
3 Schneiden
python werkzeuge/karten.py --projekt beispiel, dann python werkzeuge/schneiden.py --projekt beispiel --stumm, ansehen, danach dasselbe ohne --stumm.…die-nordwerk-uebungsseite.mp4 · 83.6 s. Im Test dauerte der Schnitt 21 Sekunden, ohne Grafikkarte.audio/… .wav fehlt. Erst vertonen.: Stufe 5, oder zur Bildabnahme --stumm. karten/… .png fehlt: erst karten.py.Warum zuerst --stumm: Ohne Ton schaust Du nur aufs Bild. Springt es, steht es zu lange, fehlt etwas? Mit Stimme hört man darüber hinweg. Ein zweiter Lauf erzeugt übrigens bis aufs Byte dasselbe Video. Wer nur einen Satz ändert, bekommt auch nur dort ein anderes Bild.

✓ Kurz geprüft
Tafeln und Kennzeichnung
Einheitliche Tafeln aus dem Storyboard und ein Hinweis, der in keinem einzigen Bild fehlt.
1 Tafeln als Bilder
karten.py zeichnet mit Pillow je Karten-Kapitel eine Tafel mit Titel und Untertitel, dazu die Kennzeichnung aus dem Storyboard und die Einblendung „Zeitraffer“. Warum Bilder und nicht der Textfilter von ffmpeg: Unter Windows braucht drawtext einen Schriftpfad mit maskiertem Doppelpunkt, in manchen schlanken ffmpeg-Paketen fehlt er ganz, und ein PNG kannst Du ansehen, bevor geschnitten wird.

2 Drei Fehler, die erst im fertigen Bild auffielen
| Was auffiel | Warum | Was jetzt gilt |
|---|---|---|
| Die Stimme sagt „das steht auch oben rechts im Bild“, doch während sie das sagt, ist dort nichts. | Die Kennzeichnung lag nur über den Aufnahmen. Auf den Tafeln stand sie klein unten links. | Der Hinweis liegt über jedem Bild oben rechts, auch über den Tafeln. |
| Die Titeltafel stand am Anfang 20 Sekunden lang, drei Sätze lang dieselbe Tafel. | Alle drei Abschnitte des Titel-Kapitels zeigten die Kapiteltafel. | Ein Abschnitt kann eigenen titel und untertitel bekommen. Die Storyboard-Prüfung warnt, sobald eine Tafel länger als 12 Sekunden steht. |
| Mit der Stimme des Kursautors hieß der Hinweis zuerst „Stimme KI-generiert (geklonte Stimme von Florian Ludwig)“. Im Kontaktbogen verdeckte er bei web-3 das Ende des Hinweisfensters im Browser. | 823 Pixel breit, und das Fenster erscheint oben in der Mitte. | Kürzer, mit derselben Aussage: „Geklonte KI-Stimme von Florian Ludwig“, 568 Pixel. Die ausführliche Fassung steht in der Beschreibung. |
Alle drei waren technisch einwandfrei. Den ersten und den dritten findet keine Prüfung, sie fallen nur auf, wenn man hinsieht und zuhört. Den zweiten meldet die Prüfung aus Stufe 10 als Warnung, und seitdem schon die Storyboard-Prüfung, bevor irgendetwas geschnitten wird.
{"id": "titel-2", "titel": "Zwei Schritte",
"untertitel": "Erst die Produkte im Browser, dann die Preisliste im Terminal",
"text": "Zuerst schauen wir uns die Produkte im Browser an. Danach geben wir die Preisliste im Terminal aus."}
✓ Kurz geprüft
Untertitel aus dem Storyboard
Der Text steht fest. Eine Spracherkennung müsste ihn nur noch einmal raten.
1 Warum nicht Whisper
Whisper hat in Stufe 5 aus „node app.js“ erst „notapp.us“ gemacht, dann „nautapp.us“. Genau solche Fehler landen in Untertiteln, wenn man sie mit einer Spracherkennung erzeugt. Dabei steht der richtige Text schon da, im Storyboard und in der richtigen Schreibweise. Whisper bleibt das Werkzeug für die Rückprüfung, nicht für die Untertitel.
2 So entstehen sie
untertitel.py nimmt den Text jedes Abschnitts aus dem Storyboard und seine Lage im Video aus aus/zeitleiste.json, die schneiden.py geschrieben hat. Lange Abschnitte teilt es an Satzgrenzen. Jeder Satz bekommt den Anteil an der Sprechzeit, der seiner Länge entspricht. Das ist eine Näherung, denn die Stimme spricht nicht völlig gleichmäßig. Im Beispiel lag keine Zeile spürbar daneben.
python werkzeuge/untertitel.py --projekt beispiel20 Untertitel · aus/…vtt · aus/…srt · aus/…-transkript.txtaus/zeitleiste.json fehlt: erst schneiden. Die Untertitel hängen am geschnittenen Video, nicht am Storyboard allein.Gesprochen wurde „App Punkt Jot Es“, im Untertitel steht app.js. Genauso bei den Preisen: gesprochen „zwölfhundertneunzig“, im Untertitel „1290“. Die Aussprache-Tabelle wirkt nur auf die Stimme. Das Transkript entsteht aus derselben Quelle, Kapitel für Kapitel mit Überschrift: für die Kursseite, für Suchmaschinen und für alle, die lieber lesen.
Probier es aus: Auf der läuft das Beispielvideo mit genau dieser Datei. Im Player die Untertitel einschalten.
3 VTT oder SRT?
| Format | Wofür |
|---|---|
.vtt | Webseiten: <track kind="captions" src="….vtt"> im <video>-Element, so wie auf der Übersicht dieses Kurses. |
.srt | Hochladen bei Videoplattformen und Öffnen in Schnittprogrammen. Shotcut und Resolve lesen SRT. |
✓ Kurz geprüft
Prüfen: Maschine und Auge
Ein leeres Video ist technisch einwandfrei. Deshalb prüfen zwei: ein Skript die Technik, Du den Inhalt.
1 Die Maschine
pruefe_video.py misst mit ffmpeg: Auflösung, Bildrate, Länge, Tonspur, Schwarzbild, lange Standbilder, Lautheit und ob das Video im Web sofort startet (faststart). Ein Fehler hält an, eine Warnung nicht.
2 Das Auge
kontaktbogen.py legt ein Bild aus der Mitte jedes Abschnitts auf ein Blatt, beschriftet mit Abschnitt und Zeit. In zwei Sekunden siehst Du, was die Maschine meinte:

| Meldung | Was der Kontaktbogen zeigte | Was wir geändert haben |
|---|---|---|
| Schwarzbild ab 49,1 s | Kein Schwarzbild, sondern das dunkle Terminal. ffmpeg zählt in der Grundeinstellung alles unter 10 % Helligkeit als schwarz. | Nur noch echtes Schwarz zählt (pix_th=0.02). Gegenprobe mit einem Testvideo: dunkles Terminal-Grau wird nicht gemeldet, 1,5 s echtes Schwarz dazwischen schon. |
| Schwarzbild am Ende | Die gewollte Abblende der letzten 0,6 s | Blenden am Anfang und am Ende zählen nicht mehr. |
| Standbild 19,6 s ab 0,5 s | Dieselbe Titeltafel über drei Sätze | Eigene Tafeln je Abschnitt (Stufe 8). |
| Standbild 13,2 s ab 58,3 s | Die Preisliste im Terminal, während die Stimme sie vorliest | Nichts. Das Bild steht mit Absicht, dafür gibt es Warnungen. |
3 Deine Prüfung
python werkzeuge/pruefe_video.py --projekt beispiel, dann python werkzeuge/kontaktbogen.py --projekt beispiel und den Bogen ansehen.0 Fehler, 1 Warnungen. Die Warnung ist das Standbild bei 61,8 s, die vorgelesene Preisliste. Der Bogen sieht aus wie oben.aus/teile/ geprüft statt des fertigen Videos? Die Teile sind vor der Lautheitsangleichung (Stufe 11).Bei Deinem eigenen Video gehst Du den Bogen mit einer Frage durch: Gehört alles, was zu sehen ist, ins Video? Ein fremdes Fenster, ein Name, ein Kontostand, ein Browser-Tab mit verräterischem Titel. Bei erkennbaren Personen ist dieser Blick Pflicht.
✓ Kurz geprüft
Feinschliff in Shotcut
Blenden, Musik, eine zweite Tonspur: Das kann ein Schnittprogramm besser. Die Kette liefert das Projekt dafür.
1 Der Schnitt als Projekt
als_shotcut.py schreibt den Schnitt als MLT-Datei, das Projektformat von Shotcut. Jeder Abschnitt aus aus/teile/ wird ein Clip auf der Zeitleiste, beschriftet mit seiner ID. In Shotcut öffnest Du die Datei mit Datei → Öffnen.
python werkzeuge/als_shotcut.py --projekt beispiel, dann die .mlt in Shotcut öffnen, etwas ändern und exportieren.…die-nordwerk-uebungsseite.mlt · 11 Clips · 80.0 s, in Shotcut elf Clips hintereinander auf einer Videospur.aus/teile/. Nach dem Verschieben des Ordners das Werkzeug neu laufen lassen.avformat, nicht avformat-novalidate. Und die Mischung der Videospuren braucht disable=0, sonst kommt nur der schwarze Hintergrund durch.Gerendert haben wir das Projekt mit melt 7.41, der Engine, die in Shotcut 26.8.1 steckt: melt die-nordwerk-uebungsseite.mlt -consumer avformat:export.mp4 vcodec=libx264 crf=20 acodec=aac ab=160k, 45 Sekunden. Das Öffnen in der Shotcut-Oberfläche war nicht Teil der Messung.
2 Die Lautheitsfalle
Der Export aus dem Shotcut-Projekt hatte Bild und Ton und hat trotzdem die Prüfung aus Stufe 10 nicht bestanden. Gemessen mit beiden Stimmen:
| Aus schneiden.py | Aus dem Shotcut-Projekt | Nach fertigstellen.py | |
|---|---|---|---|
| Lautheit, Kunststimme | -16,2 LUFS | -21,7 LUFS | -15,9 LUFS |
| Lautheit, geklonte Stimme | -16,9 LUFS | -28,8 LUFS | -16,2 LUFS |
| faststart | ja | nein | ja |
Der Grund: schneiden.py gleicht die Lautheit erst an, wenn es die Teile zusammenfügt. Die Teile selbst, aus denen das Shotcut-Projekt besteht, sind noch nicht angeglichen. Deshalb gibt es fertigstellen.py: Es gleicht die Lautheit an und schiebt den Index an den Anfang. Das Bild wird nur kopiert, nicht neu kodiert. Beide Werkzeuge messen erst und gleichen dann an. Die geklonte Stimme kam mit -28,9 LUFS und hohen Spitzen aus dem Modell. Für eine rein lineare Anhebung auf -16 fehlte der Platz, ffmpeg regelt dann dynamisch und landet bei -16,9: in der Toleranz.
python werkzeuge/fertigstellen.py --datei export.mp4 python werkzeuge/pruefe_video.py --datei export-fertig.mp4
Die Regel dahinter gilt für jedes Schnittprogramm: Nach jedem Export wird neu geprüft.
3 Vertiefung: DaVinci Resolve
DaVinci Resolve ist das stärkere Programm, und die kostenlose Fassung reicht für Lehrvideos. Für eine Kette wie diese hat sie einen Haken: Seit Version 21.1 lässt sich Resolve nur noch in der bezahlten Studio-Fassung mit Python steuern. In der kostenlosen Fassung bleibt die Lua-Konsole im Programm. Auf der Maschine des Kursautors ist so ein Weg bis zum Export erprobt, halb per Lua, halb per Bedienung der Oberfläche. Für diesen Kurs ist Shotcut der einfachere Weg, weil sein Projektformat eine offene Textdatei ist.
✓ Kurz geprüft
Veröffentlichen und pflegen
Kennzeichnen, den Stand festhalten, und später einen einzigen Satz ändern, ohne alles neu zu machen.
1 Vor dem Hochladen
- Kennzeichnung im Bild: steht über jedem Bild (Stufe 8).
- Kennzeichnung in der Beschreibung, zum Beispiel: „Die Stimme in diesem Video ist mit KI erzeugt (Qwen3-TTS, entworfene Stimme). Bild und Inhalt stammen von uns.“ Bei einer geklonten eigenen Stimme: „… geklonte Stimme von Vorname Nachname“.
- Untertitel und Transkript gehören dazu: VTT auf der Webseite, SRT bei der Videoplattform, das Transkript als Text daneben.
- Prüfung und Kontaktbogen der Fassung, die Du hochlädst. Nicht einer älteren.
2 Den Stand festhalten
Ein halbes Jahr später willst Du wissen, woraus ein Video entstanden ist. Alles Nötige liegt schon im Projekt: storyboard.json und aussprache.txt für den Text, stimme/stimme.json für die Stimme, audio/stimme.json für Referenz, Temperatur und Modell der Vertonung, marken.json und aus/zeitleiste.json für den Schnitt. Leg den Projektordner ohne aus/ in Git (Git-Kurs) und schreib ins Commit, welche Fassung veröffentlicht ist.
3 Einen Satz ändern
So lief es in einer Kopie des Beispiels. In web-4 wurde aus „Die Preise stehen nicht auf der Seite. Die holen wir uns im nächsten Schritt aus dem Programm.“ der Satz „Preise stehen nicht auf der Seite. Die holen wir uns gleich aus dem Programm.“
pruefe_storyboard.py, vertonen.py, rueckpruefung.py, schneiden.py, untertitel.py, pruefe_video.py. Immer ohne weitere Angaben außer --projekt.Ton noch alt: web-4. vertonen.py erzeugt genau diesen Abschnitt neu: web-4 4.1 s Audio (12.1 s gerechnet, Text oder Aussprache geändert). Die Schritte brauchten zusammen rund eine Minute Rechenzeit.4 Stimmen nicht mischen
Alle Abschnitte eines Videos kommen von derselben Stimme mit denselben Einstellungen. Sonst hört man die Nahtstelle. vertonen.py passt darauf auf. Als wir in der Kopie einen einzelnen Abschnitt mit Temperatur 0,9 neu erzeugen wollten, kam:
Soll ein Video eine neue Stimme bekommen, dann alle Abschnitte auf einmal. So sind 27 Kapitel der AuxData-Akademie neu vertont worden, ohne ein einziges Bild neu aufzunehmen. Und so ist dieses Beispielvideo von der Kunststimme auf die Stimme des Kursautors umgezogen: alle elf Abschnitte in 267 Sekunden, dieselben Aufnahmen, danach alles neu geprüft. Die neue Stimme brachte neue Befunde (Stufe 5 und 8).
✓ Kurz geprüft
Befehle, Dateien, Meldungen
Alles aus dem Kurs auf einer Seite.
1 Die Werkzeuge
| Stufe | Werkzeug | Macht | Braucht |
|---|---|---|---|
| 3 | pruefe_storyboard.py | prüft Storyboard, Marken, Aussprache, veralteten Ton, zu lange Tafeln | Python, ffprobe |
| 4 | stimme_entwerfen.py | entwirft eine Kunststimme als Referenz | Umgebung „stimme“ |
| 5 | vertonen.py | vertont fehlende und geänderte Abschnitte | Umgebung „stimme“ |
| 5 | rueckpruefung.py | Whisper hört ab und vergleicht mit dem Text | Umgebung „rueckpruefung“ |
| 6 | marken_bilder.py | Bildbogen mit Zeitstempeln zum Ablesen der Marken | ffmpeg, Pillow |
| 7 | schneiden.py | schneidet an den Marken, legt Ton, Tafeln und Hinweise an | ffmpeg |
| 8 | karten.py | Tafeln und Einblendungen als PNG | Pillow |
| 9 | untertitel.py | VTT, SRT und Transkript aus dem Storyboard | Python |
| 10 | pruefe_video.py | Technik-Prüfung, auch für fremde Dateien mit --datei | ffmpeg |
| 10 | kontaktbogen.py | ein Bild je Abschnitt auf einem Blatt | ffmpeg, Pillow |
| 11 | als_shotcut.py | Schnitt als Shotcut-Projekt | Python |
| 11 | fertigstellen.py | Lautheit und faststart für einen fremden Export | ffmpeg |
2 Ein Projektordner
mein-video/ ├─ storyboard.json Text, Kapitel, Abschnitte, Marken-Namen (Du) ├─ aussprache.txt Begriff = Aussprache (Du) ├─ marken.json Zeiten der Marken je Aufnahme (Du, aus dem Bildbogen) ├─ stimme/ referenz.wav, referenz.txt, stimme.json (die eigene besser außerhalb, --stimme) ├─ audio/ eine WAV je Abschnitt, dauern.json, stimme.json ├─ aufnahmen/ die Takes aus OBS (.mkv) ├─ karten/ Tafeln und Einblendungen (erzeugt) └─ aus/ Video, Teile, Zeitleiste, Untertitel, Bögen (erzeugt, nicht in Git)
3 Meldungen und was hilft
| Meldung | Was hilft |
|---|---|
ffprobe nicht gefunden | ffmpeg installieren, Terminal neu öffnen |
Marke … fehlt in marken.json | Tippfehler im Storyboard oder Marke noch nicht abgelesen (Stufe 6) |
Ton noch alt: … | kein Fehler: vertonen.py erzeugt genau diese Abschnitte neu |
referenz.wav und referenz.txt fehlen in … | Stimme anlegen (Stufe 4) oder mit --stimme auf den Ordner Deiner Stimme zeigen |
Die Stimme ist nicht mehr dieselbe | alte Einstellungen nehmen oder alle Abschnitte neu (Stufe 12) |
SoX could not be found, flash-attn is not installed | harmlos, die WAVs entstehen trotzdem |
Library cublas64_12.dll is not found | Windows: pip install nvidia-cublas-cu12 nvidia-cudnn-cu12 in der Umgebung „rueckpruefung“ |
Schwarzbild bei einem dunklen Bild | Kontaktbogen ansehen. Echtes Schwarz: Aufnahmemethode prüfen (Stufe 6) |
| Lautheit weit unter -16 LUFS nach einem Export | fertigstellen.py (Stufe 11) |
4 Offizielle Seiten
- Qwen3-TTS: Modellseiten Base und VoiceDesign bei Hugging Face, dort auch Lizenz und Hinweise zur Nutzung
- faster-whisper
- OBS Studio, Shotcut, ffmpeg
Quiz
Zehn Situationen aus der Praxis. Ab acht richtigen Antworten ist das Quiz bestanden. Die Antworten stehen jedes Mal in anderer Reihenfolge.
Deine Teilnahmebestätigung
Sie bestätigt, was Du wirklich getan hast: die Übungen gemacht und das Quiz bestanden.