Medien mit KI · Lehrvideos

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

Die Nordwerk-Übungsseite · 84 Sekunden
Komplett mit den Werkzeugen aus diesem Kurs entstanden: Die Stimme ist die geklonte Stimme des Kursautors (Qwen3-TTS), beide Aufnahmen kommen aus OBS, Schnitt, Tafeln, Untertitel und Prüfung übernehmen Skripte. Untertitel lassen sich im Player zuschalten.

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?

🎓
Wer schult
Trainerinnen, Berater, interne Schulungsverantwortliche, die Anleitungen als Video brauchen.
🧑‍💻
Wer Software erklärt
Teams, deren Oberfläche sich ständig ändert und deren Videos mithalten sollen.
🔁
Wer es wiederholbar mag
Keine Videoprofis. Wer ein Terminal bedienen kann, kommt mit.

↗ Was Du vorher brauchst

  1. Terminal-Grundlagen: einen Ordner öffnen, einen Befehl ausführen, eine Fehlermeldung lesen (Terminal-Basics).
  2. Python 3.11 oder neuer und ffmpeg im Suchpfad. Prüfen mit python --version und ffmpeg -version. ffmpeg gibt es unter ffmpeg.org.
  3. 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).
  4. OBS Studio für die Aufnahmen und Shotcut für den Feinschliff, beide kostenlos.
  5. 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.
  6. Zeit: etwa 4 Stunden. Die Rechenzeit fürs ganze Beispiel lag mit Grafikkarte bei rund 6 Minuten.
💡 Ohne Grafikkarte geht fast alles: Im Download liegen Ton und Aufnahmen schon fertig. Schneiden, Tafeln, Untertitel, Prüfung und Shotcut laufen mit Python und ffmpeg allein. Aus den Übungsdateien entsteht so das Video oben, im Test bis aufs Byte gleich.

📚 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).

Stufe 1

Die Kette im Überblick

Acht Schritte vom Text zum Video. Die meisten erledigen Skripte, drei bleiben bei Dir.

1 Das Bild

Vom Storyboard zum Video
Skizze
StoryboardSprechtext je Abschnitt, Marken, Aussprache. Die Quelle für alles.Du
Stimmeentworfen oder aus Deiner eigenen Aufnahme geklontKI
Vertoneneine WAV je Abschnitt, dazu ihre DauerKI
AbhörenWhisper hört mit, Du entscheidestKI Du
AufnehmenBrowser und Terminal mit OBS, nach der Vorab-PrüfungDu
Schneidenan den Marken, mit Tafeln und KennzeichnungSkript
UntertitelVTT, SRT und Transkript aus dem StoryboardSkript
PrüfenTechnik per Skript, Inhalt mit dem KontaktbogenSkript Du
Du entscheidest und verantwortest KI erzeugt, kann sich irren Skript macht immer dasselbe
Ändert sich ein Satz, läuft die Kette ab Schritt 3 nur für diesen Abschnitt noch einmal. Aufnehmen musst Du nur neu, wenn sich das Bild ändert.

2 Warum eine Kette und kein Schnittprogramm

SituationVon Hand geschnittenMit der Kette
Ein Menüname ändert sichNeu sprechen, Tonspur austauschen, Schnitt nachziehen, Untertitel anpassenSatz im Storyboard ändern, ein Befehl vertont nur diesen Abschnitt, zwei Befehle schneiden und prüfen
Ein Fachbegriff klingt falschStelle suchen, neu einsprechenEine Zeile in aussprache.txt, betroffene Abschnitte entstehen von selbst neu
UntertitelAbtippen oder Spracherkennung korrigierenFallen aus dem Storyboard heraus, Schreibweise stimmt
Feinschliff mit Musik und BlendenDas kann ein Schnittprogramm besserDarum 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

📍
Ausgangslage
lehrvideo-werkzeuge.zip ist entpackt. Ein Terminal steht im Ordner lehrvideo-werkzeuge.
👉
Deine Handlung
Umgebung anlegen, Pillow installieren, dann die erste Prüfung starten (Befehle unten).
✅
Das siehst Du danach
4 Kapitel, 11 Abschnitte, 6 Aussprache-Einträge · 0 Fehler, 0 Warnungen
🛟
Wenn es anders aussieht
FEHLER: ffprobe nicht gefunden: ffmpeg installieren und das Terminal neu öffnen, damit der Suchpfad gilt. python unbekannt: unter Windows py versuchen.
1Im Ordner lehrvideo-werkzeuge (Windows)
python -m venv .venv
.venv\Scripts\activate
pip install -r anforderungen/werkzeuge.txt
ffmpeg -version
python werkzeuge/pruefe_storyboard.py --projekt beispiel
Unter Linux und macOS heißt die zweite Zeile 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

Stufe 2

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?

⚠️ Nur Deine eigene Stimme, oder eine mit schriftlicher Einwilligung. Eine Sprachnachricht des Chefs, ein Mitschnitt aus einem Meeting, ein Interview auf YouTube: Nichts davon ist eine Einwilligung. Mit geklonten Stimmen werden Überweisungen erschlichen. Wie die Masche läuft und warum die Rückruf-Regel hilft, steht im Kurs KI-Sicherheit in Stufe 5.

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.

💡 Die einfache Regel für diesen Kurs: Jedes Video mit KI-Stimme bekommt einen sichtbaren Hinweis im Bild und einen Satz in der Beschreibung, auch mit einer entworfenen Stimme. Das ist mehr, als das Gesetz in jedem Fall verlangt. Es kostet nichts, und niemand fühlt sich getäuscht. Im Beispielvideo steht „Geklonte KI-Stimme von Florian Ludwig“ die ganze Zeit oben rechts.

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

Stufe 3

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 von und bis, welches Stück er zeigt. Die Marken sind Namen, die Zeiten stehen getrennt in marken.json.
1beispiel/storyboard.json (gekürzt)
{
  "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."}
      ] }
  ]
}
Die IDs sind frei wählbar, müssen aber eindeutig sein. Sie tauchen als Dateinamen wieder auf: audio/term-2.wav, aus/teile/08-term-2.mp4.

2 Fürs Ohr schreiben

RegelStattBesser
Eine Aussage pro SatzNachdem 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 AbschnittEin Abschnitt, der eine ganze Minute lang erklärtNeuer Abschnitt, sobald sich im Bild etwas ändert
Zeichen ausschreibenProdukte & Preise, 3/4 der FälleProdukte und Preise, drei Viertel der Fälle
Sagen, was man siehtHier 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

📍
Ausgangslage
Der Ordner 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.
👉
Deine Handlung
python werkzeuge/pruefe_storyboard.py --projekt uebung
✅
Das siehst Du danach
Drei Warnungen und ein Fehler, Ausgabe unten. Der Fehler hält die Kette an (Exit-Code 1), die Warnungen nicht.
🛟
Wenn es anders aussieht
kein 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.
Ausgabe, 26.09.2026
WARNUNG web-1: 5 Sätze. Fürs Ohr besser höchstens 4 je Abschnitt. WARNUNG term-2: Sonderzeichen & im Sprechtext. Ausschreiben oder in aussprache.txt eintragen. WARNUNG Text oder Aussprache geändert, Ton noch alt: web-1, term-2. vertonen.py erzeugt genau diese neu. FEHLER term-2: Marke ausgab fehlt in marken.json unter „03-terminal“. 4 Kapitel, 11 Abschnitte, 6 Aussprache-Einträge · 1 Fehler, 3 Warnungen

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

Stufe 4

Eine Stimme festlegen

Eine Kunststimme entwerfen oder die eigene klonen. Beide Wege enden in denselben zwei Dateien.

1 Zwei Wege, ein Ergebnis

Kunststimme entwerfenEigene Stimme klonen
WoherDas Modell VoiceDesign erzeugt eine Stimme aus einer BeschreibungDu nimmst 10 bis 25 Sekunden Deiner Stimme auf
RechtlichGehört keinem Menschen, trotzdem kennzeichnenDeine Stimme, kennzeichnen ist Pflicht (Stufe 2)
KlangNeutral, für Beispiele und Teams ohne SprecherDu, auch in Videos, die Du nie eingesprochen hast
Ergebnisreferenz.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

1Einmal einrichten (Windows, NVIDIA-Grafikkarte)
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
Die dritte Zeile holt PyTorch passend zu CUDA 12.8. Welche Zeile zu Deiner Grafikkarte passt, zeigt pytorch.org. Ohne Grafikkarte genügt 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

📍
Ausgangslage
Die Umgebung .venv-stimme ist aktiv, Dein Projektordner heißt mein-video und enthält Dein Storyboard aus Stufe 3.
👉
Deine Handlung
stimme_entwerfen.py mit Beschreibung und Probetext starten (Befehl unten).
✅
Das siehst Du danach
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.
🛟
Wenn es anders aussieht
Gefällt die Stimme nicht: Ordner stimme umbenennen, Beschreibung ändern, neu entwerfen. Das Werkzeug überschreibt nie eine vorhandene Stimme.
2So entstand die Kunststimme im Download (beispiel/kunststimme)
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."
Die Beschreibung haben wir auf Englisch formuliert, der Probetext ist Deutsch. Der Probetext wird zur Referenz: Er sollte klingen wie Deine späteren Texte, ruhig und erklärend.

4 Weg B: die eigene Stimme

  1. 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.
  2. Speichern als referenz.wav in einem eigenen Ordner außerhalb Deiner Projekte, zum Beispiel D:/stimmen/meine-stimme/.
  3. Den Text exakt aufschreiben, so wie Du ihn gesprochen hast, auch mit „äh“ oder einem wiederholten Wort, in referenz.txt daneben. Der Klon lernt aus dem Zusammenspiel von Ton und Text.
  4. 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.

🎚️ Zwei Fallen aus dieser Produktion. Bei Temperatur 0,9, der Vorgabe des Modells, lag die geklonte Stimme etwa zwei Halbtöne höher als das Original (gemessen: 122 statt 108 Hz). Mit 0,6 passte sie (110 Hz), deshalb nimmt 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

💡 Ohne Grafikkarte weiter: Kopiere beispiel/kunststimme als stimme in Dein Projekt. Die Stimme entsteht dann auf dem Prozessor, das dauert etwas länger (Stufe 5).
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

📍
Ausgangslage
Storyboard geprüft, Stimme angelegt, .venv-stimme aktiv.
👉
Deine Handlung
python werkzeuge/vertonen.py --projekt mein-video
✅
Das siehst Du danach
Je Abschnitt eine Zeile mit Tondauer und Rechenzeit, am Ende Jetzt anhören, dann rueckpruefung.py. Im Ordner audio je Abschnitt eine WAV.
🛟
Wenn es anders aussieht
Die Meldungen 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.
Neuvertonung des Beispiels mit der Stimme des Kursautors, RTX 3090 (gekürzt)
titel-1 6.9 s Audio (22.8 s gerechnet, angefordert) titel-2 5.8 s Audio (18.5 s gerechnet, angefordert) web-1 9.6 s Audio (34.7 s gerechnet, angefordert) … term-3 11.1 s Audio (34.4 s gerechnet, angefordert) ende-1 7.0 s Audio (21.0 s gerechnet, angefordert) 11 Abschnitte vertont in 267 s auf cuda. Jetzt anhören, dann rueckpruefung.py.
Gemessen am 26.09.2026Mit Grafikkarte (RTX 3090)Ohne (i9-11900KF, 8 Kerne)
Rechenzeit je Sekunde Ton3,2 s6,1 s
Ein Abschnitt mit Laden des Modells41 s für 9,0 s Ton46 s für 5,4 s Ton
Grafikspeicher zusätzlichrund 5 GB (von 3,2 auf 8,4 GB)–
Das ganze Beispiel (80 s Ton)267 snicht 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

1Eigene Umgebung für die Rückprüfung
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:

LaufAusspracheWhisper hörte bei term-2Ähnlichkeit
1node = nohd, app.js = App Punkt J S„Mit notapp.us startet das Programm …“72 %
2node = Noud„Mit nautapp.us startet …“78 %
3app.js = App Punkt Jot Es„Mit nautapp.js startet …“87 %
4unverändert, aber Whisper bekommt die Begriffe als Starthilfe„Mit node app.js startet …“100 %
🔎 Was daraus folgt. Whisper kennt Fachbegriffe genauso wenig wie die Stimme. Ein „nautapp“ kann heißen, dass die Stimme falsch spricht, oder dass Whisper das Wort nicht kennt. Deshalb gibt 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:

AbschnittWhisper hörteWas wir getan haben
term-3, 87 %„12.290 Euro“ statt 1290, „2212“ statt 2120Zahlen 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 warDie 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

Stufe 6

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

⚠️ Der Vorfall, der diese Stufe erklärt. Am 13.09.2026 lag bei einer automatisch gesteuerten Testaufnahme auf der Maschine des Kursautors eine .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

  1. Einstellungen → Video: Basis- und Ausgabeauflösung 1920 × 1080, 30 Bilder pro Sekunde. So wie breite, hoehe und fps im Storyboard.
  2. Einstellungen → Ausgabe: Aufnahmeformat MKV. Stürzt OBS ab, bleibt eine MKV lesbar, eine MP4 nicht. Die Werkzeuge lesen MKV direkt.
  3. 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.
  4. 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.
  5. Fenster fest einstellen, nicht maximieren. Etwas größer als 1920 × 1080, dann in OBS die Titelleiste wegschneiden (Alt und am Rand der Quelle ziehen).
🧩 Wenn OBS nach einem Absturz nicht mehr aufnimmt: Beim nächsten Start fragt OBS, ob es im abgesicherten Modus starten soll. Solange diese Frage offen ist, reagiert es auf nichts. Beim Bau hing eine Aufnahme genau daran. Erst die Frage beantworten, dann weiter.
ℹ️ Wie das Beispiel aufgenommen wurde: Browser und Terminal hat je ein Skript gesteuert, Chrome über seine Entwicklerschnittstelle und das Terminal über ein PowerShell-Skript. Niemand hatte die Hand an der Maus, und die Skripte haben die Marken gleich mitgeschrieben. Zwei Dinge fielen erst in der Aufnahme auf: Der Hinweis nach „Anfragen“ kam auf Englisch, bis Chrome mit --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:

aus/marken-03-terminal.jpg · die ersten 12 Sekunden
Bildbogen der Terminal-Aufnahme: 24 kleine Bilder im Abstand von einer halben Sekunde. Ab 7,0 Sekunden wird node app.js getippt, ab 9,0 Sekunden steht die Preisliste im Bild, ab 10,5 Sekunden der neue Prompt.
Ab 7,0 s wird getippt, ab 9,0 s steht die Preisliste da, ab 10,5 s ist der Prompt zurück. Mit --von 8.4 --bis 9.6 --schritt 0.1 wird es genauer: Die erste Zeile der Ausgabe erscheint bei 9,1 s.
💡 Die Regel für „bis“: Ein Abschnitt zeigt das Bild von seiner 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

📍
Ausgangslage
OBS ist eingerichtet, die Vorab-Prüfung abgehakt. nordwerk-website/index.html ist im Browser offen.
👉
Deine Handlung
Etwa 30 Sekunden aufnehmen: Seite zeigen, nach unten scrollen, „Anfragen“ klicken, Hinweis schließen. Als aufnahmen/02-website.mkv in Dein Projekt legen, dann marken_bilder.py --kapitel 02-website.
✅
Das siehst Du danach
Ein Bogen in aus/. Daraus trägst Du die Zeiten in marken.json ein, und pruefe_storyboard.py meldet keinen Fehler zu Marken mehr.
🛟
Wenn es anders aussieht
Bogen nur schwarz: Aufnahmemethode wechseln (oben, Punkt 4). Marke … liegen hinter dem Ende der Aufnahme: Tippfehler in der Zeit oder falscher Take.

✓ Kurz geprüft

Stufe 7

Bild und Ton zusammenbringen

Der Satz dauert, so lange er dauert. Das Bild passt sich an, nach drei festen Regeln.

1 Die Regeln

  1. Satz länger als Bild: Das letzte Bild bleibt stehen. Gestreckt wird nie, denn gestrecktes Bild ruckelt und sieht nach Fehler aus.
  2. Bild länger als Satz: Das Bild läuft weiter, der Ton bekommt Stille dahinter.
  3. Viel zu langes Bild, etwa eine Installation, die 40 Sekunden läuft: Mit "raffen": true im 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

Bild gegen Ton, die sieben Aufnahme-Abschnitte
Skizze aus den Messwerten
web-1
web-2
web-3
web-4
term-1
term-2
term-3
Bild aus der Aufnahmeletztes Bild stehtTon mit Pause
Sechsmal war der Satz länger als das Bild. Am längsten steht das Bild in web-3: 3,9 Sekunden auf dem Hinweis nach „Anfragen“. Ein Hinweisfenster darf stehen, es bewegt sich auch in echt nicht.

3 Schneiden

📍
Ausgangslage
Die Umgebung aus Stufe 1 ist aktiv. Das Beispiel ist komplett: Storyboard, Marken, Ton, Aufnahmen.
👉
Deine Handlung
python werkzeuge/karten.py --projekt beispiel, dann python werkzeuge/schneiden.py --projekt beispiel --stumm, ansehen, danach dasselbe ohne --stumm.
✅
Das siehst Du danach
Je Abschnitt eine Zeile, zuletzt …die-nordwerk-uebungsseite.mp4 · 83.6 s. Im Test dauerte der Schnitt 21 Sekunden, ohne Grafikkarte.
🛟
Wenn es anders aussieht
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.

Zeitraffer in einer Übung: term-1 bis zur Ausgabe, gerafft ×1,4
Terminal mit dem Prompt oben links, oben rechts die Hinweise „Geklonte KI-Stimme von Florian Ludwig“ und darunter „Zeitraffer“.
Im ersten Test lag „Zeitraffer“ oben links, genau über dem Prompt. Dort beginnt im Terminal der Inhalt. Jetzt steht der Hinweis unter der Kennzeichnung.

✓ Kurz geprüft

Stufe 8

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.

Tafel zu titel-3, mit der Kennzeichnung oben rechts
Dunkelblaue Tafel mit grünem Balken links, Titel „Diese Stimme ist KI-generiert“, Untertitel „Geklont aus der Stimme von Florian Ludwig. Der Hinweis steht oben rechts, solange das Video läuft“, oben rechts die Pille „Geklonte KI-Stimme von Florian Ludwig“.

2 Drei Fehler, die erst im fertigen Bild auffielen

Was auffielWarumWas 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.

1Ein Abschnitt mit eigener Tafel
{"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."}
ℹ️ Vertiefung „Erklär-Animation“: Für ein Prinzip, das sich nicht abfilmen lässt, etwa wie eine Anfrage durch mehrere Systeme läuft, eignet sich Manim. Es rendert Animationen aus Python-Code. Das Ergebnis ist ein Video, das Du wie eine Aufnahme als Kapitel einbindest.

✓ Kurz geprüft

Stufe 9

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.

📍
Ausgangslage
Das Beispiel ist geschnitten (Stufe 7).
👉
Deine Handlung
python werkzeuge/untertitel.py --projekt beispiel
✅
Das siehst Du danach
20 Untertitel · aus/…vtt · aus/…srt · aus/…-transkript.txt
🛟
Wenn es anders aussieht
aus/zeitleiste.json fehlt: erst schneiden. Die Untertitel hängen am geschnittenen Video, nicht am Storyboard allein.
aus/die-nordwerk-uebungsseite.vtt (Ausschnitt)
00:00:51.990 --> 00:00:56.215 Im Terminal stehen wir im Ordner der Übungsseite. 00:00:56.215 --> 00:00:58.630 Dort liegt die Datei app.js. 00:00:59.030 --> 00:01:05.110 Mit node app.js startet das Programm und gibt die Preisliste aus.

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?

FormatWofür
.vttWebseiten: <track kind="captions" src="….vtt"> im <video>-Element, so wie auf der Übersicht dieses Kurses.
.srtHochladen bei Videoplattformen und Öffnen in Schnittprogrammen. Shotcut und Resolve lesen SRT.

✓ Kurz geprüft

Stufe 10

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.

Erster Lauf auf dem Beispiel, 26.09.2026
OK Auflösung 1920x1080 OK Bildrate 30.00 fps OK Tonspur vorhanden OK Länge 80.1 s (Zeitleiste 80.1 s) OK Lautheit -16.2 LUFS (Ziel -16 ±2) OK faststart: ja, startet im Web sofort WARNUNG Standbilder ab 12 s: 2, 0.5 s (19.6 s lang), 58.3 s (13.2 s lang) FEHLER Schwarzbild: 2 Stelle(n), erste bei 49.1 s

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:

aus/kontaktbogen.jpg · Endfassung
Kontaktbogen mit elf Bildern: drei Titeltafeln, vier Bilder der Nordwerk-Seite im Browser, drei Bilder des Terminals, eine Schlusstafel. Auf jedem Bild oben rechts „Geklonte KI-Stimme von Florian Ludwig“.
Die Terminal-Abschnitte: Der Hintergrund hat die Farbe RGB 11, 11, 11, fast schwarz, mit wenig Text darauf. In der ersten Fassung begann das Terminal bei 49,1 s.
MeldungWas der Kontaktbogen zeigteWas wir geändert haben
Schwarzbild ab 49,1 sKein 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 EndeDie gewollte Abblende der letzten 0,6 sBlenden am Anfang und am Ende zählen nicht mehr.
Standbild 19,6 s ab 0,5 sDieselbe Titeltafel über drei SätzeEigene Tafeln je Abschnitt (Stufe 8).
Standbild 13,2 s ab 58,3 sDie Preisliste im Terminal, während die Stimme sie vorliestNichts. Das Bild steht mit Absicht, dafür gibt es Warnungen.
⚖️ Eine Prüfung justieren heißt nicht, sie abschalten. Die Schwelle ist jetzt enger, aber die Gegenprobe mit echtem Schwarz läuft weiter. Das Terminal-Kapitel aus Stufe 6, das mit der falschen Aufnahmemethode 65 Sekunden lang schwarz blieb, fände die Prüfung heute noch. Damals hat es niemand gemeldet.

3 Deine Prüfung

📍
Ausgangslage
Das Beispiel ist geschnitten und untertitelt.
👉
Deine Handlung
python werkzeuge/pruefe_video.py --projekt beispiel, dann python werkzeuge/kontaktbogen.py --projekt beispiel und den Bogen ansehen.
✅
Das siehst Du danach
0 Fehler, 1 Warnungen. Die Warnung ist das Standbild bei 61,8 s, die vorgelesene Preisliste. Der Bogen sieht aus wie oben.
🛟
Wenn es anders aussieht
Lautheit weit unter -16: Hast Du ein Einzelteil aus 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

Stufe 11

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.

📍
Ausgangslage
Das Beispiel ist geschnitten, Shotcut ist installiert.
👉
Deine Handlung
python werkzeuge/als_shotcut.py --projekt beispiel, dann die .mlt in Shotcut öffnen, etwas ändern und exportieren.
✅
Das siehst Du danach
…die-nordwerk-uebungsseite.mlt · 11 Clips · 80.0 s, in Shotcut elf Clips hintereinander auf einer Videospur.
🛟
Wenn es anders aussieht
Shotcut findet die Clips nicht: Die MLT enthält feste Pfade zu aus/teile/. Nach dem Verschieben des Ordners das Werkzeug neu laufen lassen.
🧱 Drei Fallen, die ein erzeugtes Projekt still schwarz machen. Gefunden beim Bau einer Shotcut-Anbindung auf der Maschine des Kursautors, im Werkzeug schon berücksichtigt: Die Clips müssen in der Datei vor der Spur stehen, die sie benutzt. Der Dienst heißt 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.pyAus dem Shotcut-ProjektNach 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
faststartjaneinja

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

Stufe 12

Veröffentlichen und pflegen

Kennzeichnen, den Stand festhalten, und später einen einzigen Satz ändern, ohne alles neu zu machen.

1 Vor dem Hochladen

  1. Kennzeichnung im Bild: steht über jedem Bild (Stufe 8).
  2. 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“.
  3. Untertitel und Transkript gehören dazu: VTT auf der Webseite, SRT bei der Videoplattform, das Transkript als Text daneben.
  4. 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.“

📍
Ausgangslage
Ein fertiges Projekt. Im Storyboard ist ein Satz geändert.
👉
Deine Handlung
pruefe_storyboard.py, vertonen.py, rueckpruefung.py, schneiden.py, untertitel.py, pruefe_video.py. Immer ohne weitere Angaben außer --projekt.
✅
Das siehst Du danach
Die Prüfung meldet 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.
🛟
Wenn es anders aussieht
Ändert sich auch das Bild, etwa ein Menü, nimmst Du nur dieses Kapitel neu auf und liest seine Marken neu ab (Stufe 6).

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:

vertonen.py --temperatur 0.9 --neu term-2
FEHLER: Die Stimme ist nicht mehr dieselbe wie bei den vorhandenen WAVs (temperatur geändert). Sonst klingen 10 Abschnitte anders als die neuen. Entweder mit den alten Einstellungen vertonen (0.6) oder alle neu: --neu titel-1 titel-2 titel-3 web-1 web-2 web-3 web-4 term-1 term-2 term-3 ende-1

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

Nachschlagen

Befehle, Dateien, Meldungen

Alles aus dem Kurs auf einer Seite.

1 Die Werkzeuge

StufeWerkzeugMachtBraucht
3pruefe_storyboard.pyprüft Storyboard, Marken, Aussprache, veralteten Ton, zu lange TafelnPython, ffprobe
4stimme_entwerfen.pyentwirft eine Kunststimme als ReferenzUmgebung „stimme“
5vertonen.pyvertont fehlende und geänderte AbschnitteUmgebung „stimme“
5rueckpruefung.pyWhisper hört ab und vergleicht mit dem TextUmgebung „rueckpruefung“
6marken_bilder.pyBildbogen mit Zeitstempeln zum Ablesen der Markenffmpeg, Pillow
7schneiden.pyschneidet an den Marken, legt Ton, Tafeln und Hinweise anffmpeg
8karten.pyTafeln und Einblendungen als PNGPillow
9untertitel.pyVTT, SRT und Transkript aus dem StoryboardPython
10pruefe_video.pyTechnik-Prüfung, auch für fremde Dateien mit --dateiffmpeg
10kontaktbogen.pyein Bild je Abschnitt auf einem Blattffmpeg, Pillow
11als_shotcut.pySchnitt als Shotcut-ProjektPython
11fertigstellen.pyLautheit und faststart für einen fremden Exportffmpeg

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

MeldungWas hilft
ffprobe nicht gefundenffmpeg installieren, Terminal neu öffnen
Marke … fehlt in marken.jsonTippfehler 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 dieselbealte Einstellungen nehmen oder alle Abschnitte neu (Stufe 12)
SoX could not be found, flash-attn is not installedharmlos, die WAVs entstehen trotzdem
Library cublas64_12.dll is not foundWindows: pip install nvidia-cublas-cu12 nvidia-cudnn-cu12 in der Umgebung „rueckpruefung“
Schwarzbild bei einem dunklen BildKontaktbogen ansehen. Echtes Schwarz: Aufnahmemethode prüfen (Stufe 6)
Lautheit weit unter -16 LUFS nach einem Exportfertigstellen.py (Stufe 11)

4 Offizielle Seiten

Lernkontrolle

Quiz

Zehn Situationen aus der Praxis. Ab acht richtigen Antworten ist das Quiz bestanden. Die Antworten stehen jedes Mal in anderer Reihenfolge.

Frage 1 von 10
…
Abschluss

Deine Teilnahmebestätigung

Sie bestätigt, was Du wirklich getan hast: die Übungen gemacht und das Quiz bestanden.

Das ist eine Vorschau. Die Bestätigung wird freigeschaltet, sobald alle Punkte unten erledigt sind. Bis dahin trägt sie das Wasserzeichen „Muster“ und lässt sich nicht drucken.
Voraussetzungen
    FL
    Florian Ludwig
    AI Consultant · Kutzschbach INNOVATIONS
    Teilnahme
    Lehrvideos mit KI · vom Skript zum fertigen Video
    Hiermit wird bestätigt, dass
    Dein Name hier
    den Selbstlern-Kurs „Lehrvideos mit KI: vom Skript zum fertigen Video, lokal“ durchgearbeitet, die Übungen der Stufen 3, 5, 7 und 10 als erledigt markiert und das Quiz bestanden hat.
    —Datum
    ★BESTANDEN
    Florian LudwigAI Consultant · Kutzschbach INNOVATIONS