# Interview-Transkription in DaVinci Resolve – Ablauf für Claude

Stand: Oktober 2026 · getestet mit DaVinci Resolve Studio 21 · erprobt am Dokumentarfilm „Such(t)en“ (15 Interviews, Schweizerdeutsch) und an einem englischen Testinterview
Von Kamil Goerlich, Filmeditor · https://videograf-bodensee.de

**So benutzt du die Datei:** In einer Unterhaltung mit Claude anhängen und schreiben: „Bitte folge diesem Workflow für meine Interviews.“
„Nutzer“ meint im Folgenden dich, also die Person, die Claude den Auftrag gibt.

**Voraussetzungen**
- **DaVinci Resolve Studio** (die kostenlose Version erlaubt keine Steuerung per Skript von außen)
- **Claude in der Desktop-App** mit Zugriff auf deinen Rechner und **Bildschirmsteuerung** (für das Untertitel-Menü)
- Eine **Verbindung zwischen Claude und Resolve** über die Resolve-Skriptschnittstelle (MCP-Server), damit Claude Skripte in Resolve ausführen kann
- Python mit ReportLab für die PDFs (Claude kann das in seiner Arbeitsumgebung selbst einrichten)

Menüs und Skriptbefehle können sich mit neuen Resolve-Versionen ändern. Nutzung auf eigene Verantwortung; vorher immer eine Projektsicherung machen.

Diese Datei beschreibt, wie Claude Interviews in einem Resolve-Projekt transkribiert, den Ton
dafür aufbereitet, PDFs erstellt, die Timelines benennt und Best-of-Timelines baut.
**Grundregel: Originale werden nie verändert.** Claude arbeitet nur mit Kopien.
Es geht um Schnitt und Organisation in Resolve, nicht um eine Veröffentlichung: Für den Cutter ist **alles** relevant.

---

## 0. Rückfragen vor dem Start (immer stellen, gesammelt in einer Nachricht, als Multiple Choice)

Alle Fragen mit nummerierten Antworten stellen, damit der Nutzer nur Zahlen antworten muss (z. B. „1, 1, 2, 1“).
Wenn ein Werkzeug für Auswahlfragen zur Verfügung steht (Klick-Antworten), dieses benutzen.

1. **Was soll bearbeitet werden?**
   1) die aktuell geöffnete Timeline
   2) alle Timelines in einem Bin
   - Bei **1** direkt weiter. Ziel-Bin ist dann `<Bin der Timeline>_TRANSCRIPT`.
   - Bei **2** nachfragen, wie der Bin heißt, und ob alle Timelines darin bearbeitet werden sollen
     (1 ja, 2 nein → welche auslassen).
2. **In welcher Sprache wird gesprochen?** (für die Spracherkennung)
   1) Englisch 2) Deutsch 3) Französisch 4) Italienisch 5) Andere
   - Bei **5** nachfragen, welche (bei Dialekt wie Schweizerdeutsch: „German“ + Extended Language Support).
3. **In welcher Sprache sollen Untertitel, PDF und Zitate sein?**
   1) Englisch 2) Deutsch 3) Französisch 4) Italienisch 5) Andere
   - Bei **5** nachfragen, welche. Weicht die Sprache von Frage 2 ab, werden die **Untertitel übersetzt** (Schritt 4b).
4. **Nebengeräusche entfernen (Noise Reduction / Voice Isolation)?**
   1) Ja 2) Nein
   - Ja → Voice Isolation **60**, bei starken Nebengeräuschen (draußen, Straße, Lokal) **80**. Nein → aus. Siehe Schritt 3.5.
5. **Wohin mit den PDFs?**
   1) Vorschlag: `<Projektordner>/Transkripte`
   2) anderer Ordner → nachfragen

Frage 2 muss beantwortet sein. Fehlen andere Antworten, gilt: Frage 1 → 1, Frage 3 → dieselbe Sprache wie Frage 2,
Frage 4 → Ja, Frage 5 → 1. Antwortet der Nutzer gar nicht, nachfragen statt raten.

**Nicht fragen, sondern selbst festlegen bzw. herausfinden:**
- **Ziel-Bin:** immer `<Quell-Bin>_TRANSCRIPT`, auf derselben Ebene wie der Quell-Bin.
- **Namen von Interviewer und Interviewten:** aus den Untertiteln ermitteln (Begrüßung, Anrede, Vorstellung).
  Nicht gefunden → Rolle verwenden („Interviewer“, „Fotografin“ …) und den Nutzer am Ende danach fragen.
- **Ton-Besonderheiten:** automatisch analysieren (siehe Schritt 3.1), z. B. ob beide Stereo-Kanäle identisch sind.
- **Best-of-Timelines:** werden immer gebaut (Bin `ZITATE`).

---

## 1. Vorbereitung

- Prüfen, dass Resolve offen ist und das richtige Projekt geladen ist (`project.GetName()`).
- Dem Nutzer empfehlen, vorher eine Projektsicherung zu exportieren (Projektmanager → Rechtsklick → Exportieren, .drp).
- Alle Timelines im Quell-Bin auflisten, mit Länge, Anzahl Video-/Audiospuren, Kanalbelegung und Clipnamen.
  Dem Nutzer die Liste kurz zeigen (Name, Länge, erkannte Kameras/Mikros), bevor die Bearbeitung beginnt.
- Reihenfolge: kurze Interviews zuerst; das längste zuletzt. Mit **einem** Interview komplett anfangen
  und dem Nutzer das PDF zeigen, bevor die übrigen folgen (Format abnehmen lassen).

---

## 2. Timeline kopieren

- `tl.DuplicateTimeline("<Originalname>_TRANSCRIPT")`, die Kopie in den Ziel-Bin `<Quell-Bin>_TRANSCRIPT` verschieben (`mp.MoveClips`).
- Das Original bleibt unberührt, die Kopie ist 1:1 timecode-gleich (wichtig für den späteren Schnitt).

---

## 3. Ton aufbereiten (nur in der Kopie, nur für die Transkription)

Ziel: saubere, gut verständliche, **gleich laute Mono-Spuren**, damit die Spracherkennung möglichst genau arbeitet.

1. **Ton automatisch analysieren** (statt den Nutzer zu fragen): Für jede Tonspur die Quelldatei lesen
   (`run_script_unsafe`, Python `wave`) und pro Kanal und pro Sekunde den RMS-Pegel messen, dazu den Pegel der Differenz L−R.
   - Differenz sehr leise (> 30 dB unter dem Signal) → **Kanal 1 und 2 identisch** (gleiches Mikro).
   - Kanäle abwechselnd laut/leise → **zwei verschiedene Mikros** (z. B. Interviewte links, Interviewer rechts).
     Wer auf welchem Kanal spricht, ergibt sich aus Inhalt und Pegelverlauf (Fragen = Interviewer).
   - Mehrere Kameras: die Spur mit dem besten Signal-Rausch-Abstand nehmen (Standard: oberste Tonspur A1).
   - Ergebnis in der Interview-Liste aus Schritt 1 kurz angeben.
2. **Stereo-Spuren in Mono umwandeln:** Den Clip neu auf eigene Mono-Spuren legen
   (`AddTrack("audio","mono")`, `AppendToTimeline` mit `mediaType: 2`, danach `SetSourceAudioChannelMapping` → `"type":"mono"`, `channel_idx` je Kanal).
   - `endFrame` = Quell-Endframe des Originals (nicht −1), sonst wird jeder Abschnitt 1 Frame zu kurz. Start/Ende danach mit dem Original vergleichen.
   - **Kanal 1 und 2 identisch** (häufig bei Kamera-Ton: eine Stereo-Spur, links und rechts gleich): daraus genau **eine** Mono-Spur machen (Kanal 1), den zweiten Kanal nicht verwenden.
   - **Zwei verschiedene Mikros:** **zwei getrennte Mono-Spuren**, nicht mischen, Spuren nach Sprecher benennen.
   - **Gleiches Mikro, unterschiedlich gepegelt:** den sauberen Kanal nehmen (z. B. bei Übersteuerung den leiseren).
3. **Alte Tonspuren löschen** (`DeleteTrack("audio", 1)`), damit die aufbereiteten Spuren **ganz oben** liegen.
   ⚠ Die Untertitel-Erkennung hört auf die obersten Tonspuren, **auch wenn sie deaktiviert/stumm sind**.
   Bleiben alte Spuren oben, kommt nur Unsinn heraus (z. B. hunderte Male „Vielen Dank.“).
4. **Lautstärke angleichen – jede Spur, jeder Kanal einzeln:** alle Abschnitte normalisieren
   (`NormalizeAudioLevel`, Modus ITU-R BS.1770-4, **−20 LKFS**, `NORMALIZE_AUDIO_SET_LEVEL_INDEPENDENT`).
   ⚠ **Danach kontrollieren**, ob sich der Pegel wirklich geändert hat (`GetProperty("Volume")` der Clips).
   Im Testlauf blieb die Lautstärke bei 0 dB: Der **leise Kanal** (Interviewer, ca. 20 dB leiser) wurde **nicht angehoben**.
   Grund: Die Normalisierung misst die **ganze Stereo-Datei**, nicht den zugeordneten Kanal.
   Deshalb den Unterschied aus der Messung in 3.1 nehmen und den leisen Kanal per
   `item.SetProperty("AudioVolume", <Wert des lauten Kanals> + <Differenz>)` anheben (erprobt, funktioniert).
   Ziel: beide Sprecher etwa gleich laut. Im Testlauf wurde dadurch auch die Erkennung deutlich besser (Lücke geschlossen).
   Leise Aufnahmen brauchen teils +9 bis +30 dB, das ist normal.
5. **Voice Isolation** nach Antwort auf Frage 4 (`SetVoiceIsolationState(track, {"isEnabled": True, "amount": 60})`):
   Ja → **60**, bei starken Nebengeräuschen (draußen, Straße, Flughafen, Lokal) **80**; Nein → ausgeschaltet lassen.
   Die Stärke darf hoch sein, weil dieser Ton nur der Transkription und den Best-ofs dient, das Original bleibt unangetastet.
6. Lange Scripts können in ein Timeout laufen: **vor einer Wiederholung immer erst prüfen, wie weit es gekommen ist.**

---

## 4. Untertitel erstellen

### 4a. Erkennung (in der gesprochenen Sprache)
- In der `_TRANSCRIPT`-Timeline über das Menü **Timeline → AI Tools → Create Subtitles from Audio…** (per Bildschirmsteuerung).
- Haken bei **„Enable Extended Language Support“** setzen, danach die **Sprache** (aus 2a) wählen
  (sie springt nach dem Haken auf „Auto“ zurück). Vor „Create“ per Zoom kontrollieren.
  Ohne Extended ist Schweizerdeutsch unbrauchbar.
- Die Sprachliste lässt sich nur mit **Vollbild-Steuerung** bedienen (im Hintergrund blockiert):
  Liste öffnen, Sprachnamen tippen (springt hin), anklicken.
- ⚠ Resolve startet die Erkennung manchmal **sofort ohne Dialog** mit den zuletzt benutzten Einstellungen.
  Dann über `project.GetCreateSubtitlesFromAudioStatus()` prüfen und die Sprache am Ergebnis kontrollieren.
- Auf das Ergebnis warten (`GetItemListInTrack("subtitle", 1)` abfragen, bis Einträge da sind).
- **Plausibilitätscheck:** Anzahl der Untertitel, häufigste Texte. Viele identische Floskeln = Erkennung hat Stille gehört → Schritt 3.3 prüfen.
- Lücken im Text (Satz bricht ab, nächster beginnt mitten im Satz) mit **[ ]** markieren und dem Nutzer melden.

### 4b. Übersetzung (nur wenn 2b ≠ 2a)
Resolve übersetzt nicht selbst, und der Untertitel-Text lässt sich per Script **nicht** ändern (`SetName` auf Untertiteln schlägt fehl).
Deshalb:
1. Die Untertitel bereinigt in die Ausgabesprache übersetzen, **gleiche Timecodes**, und als SRT speichern
   (`<Timeline-Name>_<Sprache>.srt`, z. B. `…_DE.srt`, im PDF-Ordner).
2. SRT als **zweite Untertitelspur** an den Timeline-Anfang legen (erprobt, framegenau):
   - per Script: `tl.AddTrack("subtitle")`, SRT mit `mp.ImportMedia([pfad])` in den Ziel-Bin importieren
     (SRT-Zeiten relativ ab 00:00:00,000 schreiben, nicht ab 01:00:00);
   - per Bildschirmsteuerung (Vollbild): die SRT aus dem Media Pool auf die neue Untertitelspur an den **Timeline-Anfang** ziehen;
   - danach Anzahl und Startframe mit der Originalspur vergleichen und die Spur **neu benennen** (der Name springt beim Ziehen zurück).
   - Das Menü File → Import → Subtitle öffnet einen System-Dateidialog, der sich nicht steuern lässt → nicht verwenden.
   ⚠ **Nicht** per `AppendToTimeline` in eine bestehende Timeline: Das ignoriert `recordFrame` und `trackIndex`
   und hängt die Untertitel ans **Ende von Spur 1**.
3. Die Originalspur (gesprochene Sprache) bleibt erhalten, Spuren benennen (z. B. „EN Original“, „DE“).

---

## 5. Text auslesen und bereinigen

- Alle Untertitel mit `GetStart()`, `GetEnd()`, `GetName()` auslesen und als SRT/Text sichern.
  Timecodes aus Timeline-Startframe und Bildrate berechnen (nicht fest einprogrammieren).
- Bereinigen in der Ausgabesprache (Rückfrage 2b): Erkennungsfehler, Namen, Orte, Fachbegriffe korrigieren.
- **Sprecher zuordnen** (Resolve erkennt keine Sprecher): anhand des Inhalts und, bei getrennten Mikros, anhand des Pegels pro Kanal.
- **Namen** aus dem Text ermitteln (siehe Abschnitt 0).
- Unsichere Stellen mit **[ ]** markieren. Unsichere Namen sammeln und dem Nutzer am Ende zur Prüfung auflisten.

---

## 6. PDF pro Interviewpartner

Erstellt mit Python/ReportLab (`build_pdf.py` + je Interview eine `<name>_content.py`). Aufbau:

1. **Kopf-Tabelle:** Person, Drehdatum, Ort, Interviewer, Länge, Timeline-Name, Hinweis zu Markierungen
2. **Überschrift:** ein kurzer, treffender Titel für das Interview (wird auch für den Timeline-Namen genutzt, siehe 7)
3. **Zusammenfassung** (einige Absätze)
4. **Stärkste Zitate** (ca. 10–15): Timecode, Zitat in «…», Themen-Schlagwort
5. **Themen:** Tabelle Thema / Inhalt / Stellen (Timecodes)
6. **Bereinigtes Transkript** mit Timecodes und Sprechern

- Timecodes = **Timeline-Timecodes** der `_TRANSCRIPT`-Timeline (identisch mit dem Original).
- Vor der Ablage prüfen, dass jeder Zitat-Timecode im Transkript vorkommt.
- Dateiname: `JJMMTT_Interview-<Name>.pdf`. Ablage: Ordner aus Rückfrage 3.

**Vollständig transkribieren:** Für den Schnitt ist alles relevant, es wird **nichts weggelassen** –
auch keine Pausen-/Vorgespräche, privaten Passagen oder Aussagen über Dritte.
Nur als **Hinweis für den Cutter** markieren, nicht kürzen:
- **„SENSIBEL“** bei Suizid, Gewalt, Missbrauch, Sucht Dritter u. Ä.
- **„PAUSE / VORGESPRÄCH“** bei Gesprächen außerhalb des eigentlichen Interviews.
- **„NICHT VERWENDEN (Bitte im Interview)“**, wenn jemand im Interview ausdrücklich darum bittet.

---

## 7. Transkript-Timelines umbenennen

Nach Fertigstellung des PDFs die `_TRANSCRIPT`-Timeline umbenennen:

`JJMMTT_<Überschrift aus dem PDF>_TRANSCRIPT`

- **JJMMTT = Drehdatum aus den Kamera-Metadaten** des Clips mit dem guten Ton
  (`GetClipProperty()` → „Date Recorded“, sonst „Shot Date“ / „Date Created“).
  Trägt die Tondatei nur ein Dateidatum (z. B. Datum des Kopierens), das Datum der Bild-Clips nehmen;
  im Zweifel Dateiname oder den Nutzer fragen.
- Überschrift kurz halten, Leerzeichen durch Bindestriche ersetzen, keine Sonderzeichen außer Bindestrich, Umlaute ausschreiben.
- Das Original behält seinen Namen.

---

## 8. Best-of-Timelines (Bin `ZITATE`, immer)

- Bin `ZITATE` anlegen (falls nicht vorhanden).
- Pro Interviewpartner eine Timeline `<vorname>-<nachname>-best-of` (z. B. `jeffrey-spoeri-best-of`), kleingeschrieben, Umlaute ausgeschrieben.
- Inhalt: die stärksten Zitate aus dem PDF in PDF-Reihenfolge, je mit etwa 1 Sekunde Luft davor und danach.
  Überlappen sich die Bereiche, zu einem Clip zusammenfassen. Nicht in die nächste Frage hineinschneiden.
- **Bild:** die Original-Kamera-Clips. **Ton:** der **aufbereitete Ton** aus der `_TRANSCRIPT`-Timeline
  (Mono-Spuren je Sprecher, angehobener leiser Kanal, Normalisierung, Voice Isolation) – **nicht** der Originalton.
  Quell-Frames über die Zuordnung Timeline-Timecode → Quell-Timecode berechnen (Bild aus der Original-, Ton aus der `_TRANSCRIPT`-Timeline),
  Bereiche an Schnittstellen aufteilen.
  ⚠ Neu eingesetzte Clips übernehmen die Einstellungen nicht automatisch. Erneut setzen:
  Kanalbelegung (`SetSourceAudioChannelMapping(alt.GetSourceAudioChannelMapping())`), Lautstärke (`SetProperty("AudioVolume", …)`) –
  beides lässt sich vom Transkript-Clip kopieren – und Voice Isolation je Spur **ausdrücklich** mit `{"isEnabled": True, "amount": 60}`
  (Kopieren des Zustands aus der Transkript-Timeline schlägt still fehl). Danach gegen die `_TRANSCRIPT`-Timeline prüfen.
  Gibt es kein Interview-Bild (z. B. nur B-Roll mit Tempo-Änderungen), nur den Ton nehmen und das dem Nutzer melden.
- Auf jedes Zitat einen **Marker** mit dem Zitattext setzen (SENSIBEL-Zitate mit rotem Marker).
- **Untertitel mitnehmen** (in der Ausgabesprache): SRT mit den neuen Positionen erzeugen und importieren.
  Quelle sind die Untertitel der Ausgabesprache aus der `_TRANSCRIPT`-Timeline.
  Funktionierende Reihenfolge: **leere Timeline anlegen → Untertitelspur anlegen → SRT per `AppendToTimeline` zuerst einsetzen**
  (landet dann am Anfang), **danach** den Ton/das Bild mit `recordFrame` einsetzen und Marker setzen.

---

## 9. Abschluss-Meldung an den Nutzer

Kurz und übersichtlich:
- Welche Interviews erledigt sind, wo die Timelines (Bins), PDFs und SRT-Dateien liegen
- **Bitte prüfen:** ermittelte Namen, unsichere Stellen [ ], markierte sensible Stellen
- Was bewusst nicht gemacht wurde (z. B. übersprungene Interviews, Best-of ohne Bild)

---

## Erfahrungen (Kurzfassung)

- Untertitel-Erkennung hört auf die obersten Spuren, auch deaktivierte → aufbereitete Spuren nach oben, alte löschen.
- Extended Language Support ist bei Dialekt Pflicht; Sprache nach dem Haken (erneut) wählen; Sprachliste nur im Vollbild bedienbar.
- Kanal 1 und 2 sind oft identisch → dann nur eine Mono-Spur. Getrennte Mikros → zwei Spuren **und** leisen Kanal anheben.
- `NormalizeAudioLevel` misst die ganze Stereo-Datei, nicht den Mono-Kanal → leisen Kanal per `AudioVolume` anheben, danach kontrollieren.
- Resolve übersetzt keine Untertitel; Untertitel-Text ist per Script nicht änderbar → übersetzte SRT importieren und per Ziehen als zweite Spur an den Anfang legen.
- `AppendToTimeline` mit einer SRT hängt ans Timeline-Ende; nur in einer leeren Timeline landet sie am Anfang.
- Für Transkription und Best-of wird der aufbereitete Ton verwendet (darf stark gefiltert sein); das Original bleibt unangetastet.
- Transkript-Timelines sind 1:1 Kopien → Timecodes in PDF, Transkript und Original stimmen überein.
  Originale deshalb nicht mehr verschieben oder trimmen.
