freezer
Beiträge: 3853

Py Script - Text+ Subtitle Tool Roundtrip-Workflow

Beitrag von freezer »

Text+ Subtitle Tool v2.5.1 — Kompletter Roundtrip-Workflow für Text+ Clips in DaVinci Resolve

Hallo zusammen,

ich möchte ein Tool vorstellen, das ich für die Verwaltung von Text+-Untertiteln in DaVinci Resolve entwickelt habe. Ausgangspunkt war eine Bereinigung und Erweiterung von Sergey Knyazkovs Text+ to Subtitle Tool (das Text+-Clips als SRT exportierte). Daraus ist ein vollständiger Roundtrip-Workflow geworden — exportieren, extern übersetzen lassen, und den übersetzten Text zurück in die bestehenden Text+-Clips schreiben.

Das Tool wurde in Zusammenarbeit mit Anthropic's Claude AI entwickelt — ich habe die Workflow-Anforderungen definiert, in Resolve getestet und iterativ Feedback gegeben; Claude hat die Architektur, den Code und das Debugging übernommen. Das Ergebnis ist ein einzelnes Python-Script, das innerhalb von Resolves Scripting-Umgebung läuft und keine externen Abhängigkeiten hat.

Was das Tool kann

Das Tool hat zwei Modi, umschaltbar über einen Selector oben im UI:

Export-Modus
  • Scannt ausgewählte Video-Tracks nach Text+-Clips (mit Checkboxen pro Track)
  • Export als SRT, WebVTT oder CSV
  • CSV enthält Roundtrip-Spalten (Original + Translation) für den direkten Einsatz im Übersetzungs-Workflow
  • Optionales JSON-Roundtrip-Manifest für SRT/VTT-Exporte — speichert frame-genaue Positionen und Track-Zuordnungen für präzisen Re-Import
  • Duplikaterkennung — erkennt identischen Text auf mehreren Tracks mit überlappenden Zeitbereichen (z.B. Titel + Drop Shadow) und fasst sie zusammen
  • Merge Adjacent — verbindet aufeinanderfolgende Clips mit identischem Text, die ≤2 Frames auseinander liegen (verhindert Flackern bei der Wiedergabe)
  • Vorschau aller gesammelten Untertitel bevor eine Datei geschrieben wird
  • Optional wird die SRT direkt auf einen neuen Subtitle-Track in der Timeline angewendet
  • Dateinamen-Templates mit Variablen: {timeline}, {project}, {fps}, {date}, {time}, {tracks} — mit speicherbaren User-Presets
Screenshot Subtitle Tool v2.5.1 - Export.PNG
Import-Modus (Text ersetzen)
  • Lädt eine übersetzte SRT-, VTT- oder CSV-Datei
  • Erkennt automatisch das JSON-Roundtrip-Manifest, falls es neben der Untertitel-Datei liegt
  • Scannt die Timeline und matcht die importierten Einträge mit den bestehenden Text+-Clips — frame-genau (mit Manifest/CSV) oder über Timecode-Nähe (ohne Manifest)
  • Match-Qualitätsstufen: exact (±0 Frames), close (±3), tolerant (±10), unmatched
  • Partieller Import — nur sichere Matches (exact/close) werden geschrieben; unsichere werden übersprungen
  • Detaillierte Match-Vorschau mit "Original → Neu" und Qualitätsbewertung pro Eintrag, bevor Änderungen vorgenommen werden
  • Optionales Backup-CSV aller aktuellen Texte vor dem Ersetzen
  • Rollback-Button — stellt alle Texte aus dem Backup mit einem Klick wieder her
  • Optionales Fusion Undo pro Clip (registriert Änderungen in Fusions Undo-Stack für einzelnes Ctrl+Z auf der Fusion-Page)
Screenshot Subtitle Tool v2.5.1 - Import.PNG
Typischer Workflow
  1. Export: Timeline scannen, Vorschau prüfen, als CSV exportieren (für Übersetzung in der Tabellenkalkulation) oder als SRT/VTT mit Manifest (für Übersetzung im Untertitel-Editor)
  2. Übersetzen: Translation-Spalte im CSV ausfüllen, oder die SRT/VTT im Untertitel-Editor bearbeiten
  3. Import: In den Import-Modus wechseln, übersetzte Datei laden, Match-Vorschau prüfen, "Replace Text" klicken
  4. Falls nötig: Rollback klicken um die Originaltexte aus dem Backup wiederherzustellen
Das Tool merkt sich alle Einstellungen zwischen Sessions — zuletzt verwendete Verzeichnisse, Import-Dateien, Format-Auswahl, alle Checkbox-Zustände und Dateinamen-Presets werden über Resolves interne Preferences gespeichert und überleben Script- und Programm-Neustarts.

Installation

Schritt 1 — Python

DaVinci Resolve bringt keinen eigenen Python-Interpreter mit. Es sucht auf dem System nach einer Standard-Python-Installation und verwendet diese für Scripts. Unser Script läuft intern über Workspace → Scripts (nicht als externes Script), daher sind keine Umgebungsvariablen oder Modul-Importe nötig — aber Resolve muss trotzdem eine Python-Installation finden.
  • Windows: Python 3.10 oder 3.11 von python.org herunterladen und installieren. Während der Installation unbedingt "Add Python to PATH" aktivieren. Nicht die Windows-Store-Version verwenden — Resolve findet sie nicht. Python 3.10 ist die sicherste Wahl über Resolve 18/19/20 hinweg. Einige User berichten von Problemen mit Python 3.12+ unter Windows 11.
  • macOS: Python 3 ist seit Monterey typischerweise vorinstalliert. Falls nicht, von python.org installieren. Nicht Homebrew oder pyenv verwenden — Resolve erkennt diese Installationen möglicherweise nicht.
  • Linux: Python 3 ist üblicherweise vorinstalliert. Falls nicht, über den Paketmanager installieren.
Um zu prüfen ob Resolve Python sieht: Konsole auf der Fusion-Page öffnen und schauen ob "Py3" als Interpreter verfügbar ist. Wenn "Python 3 not found" erscheint, findet Resolve die Installation nicht.

Schritt 2 — Resolve Preferences

Unter Preferences → System → General die Einstellung "External scripting using" auf "Local" setzen. Unser Script läuft zwar intern und benötigt diese Einstellung streng genommen nicht, aber "None" kann zu unerwarteten Problemen führen. Nach der Änderung Resolve neu starten.

Schritt 3 — Script platzieren

Die .py-Datei in den Utility-Scripts-Ordner kopieren. Damit erscheint das Script unter Workspace → Scripts auf allen Pages.
  • Windows (aktueller User):

    Code: Alles auswählen

    %AppData%\Blackmagic Design\DaVinci Resolve\Support\Fusion\Scripts\Utility
    Diesen Pfad direkt in die Adressleiste des Windows Explorers einfügen.
  • Windows (alle User):

    Code: Alles auswählen

    %ProgramData%\Blackmagic Design\DaVinci Resolve\Fusion\Scripts\Utility
  • macOS (aktueller User):
    Im Finder Shift+Command+G drücken und einfügen:

    Code: Alles auswählen

    ~/Library/Application Support/Blackmagic Design/DaVinci Resolve/Fusion/Scripts/Utility
  • macOS (alle User):

    Code: Alles auswählen

    /Library/Application Support/Blackmagic Design/DaVinci Resolve/Fusion/Scripts/Utility
  • Linux (aktueller User):

    Code: Alles auswählen

    ~/.local/share/DaVinciResolve/Fusion/Scripts/Utility
  • Linux (alle User):

    Code: Alles auswählen

    /opt/resolve/Fusion/Scripts/Utility
Falls der Utility-Ordner nicht existiert, einfach anlegen. Nach dem Platzieren der Datei sollte das Script unter Workspace → Scripts → Text+ Subtitle Tool erscheinen. Es kann einen Moment dauern bis Resolve es erkennt — im Zweifelsfall Resolve neu starten.

(Script-Ordner-Pfade basierend auf Roger Magnussons Referenz-Post im BMD-Forum)

Schritt 4 — Starten

Eine Timeline mit Text+-Clips öffnen, dann Workspace → Scripts → Text+ Subtitle Tool. Das Script-Fenster erscheint.

Voraussetzungen
  • DaVinci Resolve Studio 19+ (zwingend erforderlich — in der Free-Version sind die UIManager-Scripting-Funktionen seit Resolve 19 deaktiviert)
  • Python 3.10 oder 3.11 von python.org installiert (siehe Installation oben)
  • Keine externen Python-Pakete nötig — verwendet ausschließlich Standard-Library-Module und Resolves eingebauten fusion.UIManager
Bekannte Einschränkungen
  • Das UI friert während des Scannens bei großen Timelines kurz ein — das ist systembedingt durch Resolves single-threaded UIManager und lässt sich von der Scripting-Seite nicht umgehen
  • Drop-Frame-Timecode (29.97/59.94 DF) wird als Non-Drop-Frame angenähert; vollständige DF-Unterstützung ist nicht implementiert
  • Track-Checkboxen werden beim Start erzeugt — wenn Video-Tracks hinzugefügt oder entfernt werden, muss das Script geschlossen und neu gestartet werden
  • Der Rollback-Button funktioniert nur innerhalb derselben Session nach einem Replace mit aktiviertem Backup
Credits
  • Ursprüngliches Konzept: RMT Text Index Tool von Sergey Knyazkov
  • Erweitert und neu aufgebaut von Robert Niessner / LAUFBILDkommission in Zusammenarbeit mit Anthropic Claude (KI-gestützte Entwicklung)
  • Lizenz: MIT — verwenden, modifizieren, weitergeben
Download

Das Script zum Runterladen:
Text__to_Subtitle_v2.5.1.zip
Feedback, Fehlermeldungen und Feature-Wünsche sind willkommen. Bei Problemen bitte Resolve-Studio-Version, Betriebssystem und Timeline-Framerate angeben — das sind die drei Variablen, die erfahrungsgemäß am meisten ausmachen.
LAUFBILDkommission
Robert Niessner - Graz - Austria
Blackmagic Cinema Blog
www.laufbildkommission.wordpress.com
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



 Aktuelle Beiträge [alle Foren]
 
» Aputure STORM CS32 - Hellstes COB-Spotlight bisher macht 4K-HMI Konkurrenz
von slashCAM - Mo 19:54
» GoPro MISSION 1 Pro - 8K-Actioncam-Modelle erklärt
von slashCAM - Mo 17:57
» Ulanzi stellt D200X Desktop Controller Hub für Video Editoren, Fotografen u.a. vor
von TOBIUNDTRON - Mo 17:25
» Flusskreuzfahrt Leer - Potsdam Teil 1: Von Leer nach Oldenburg.
von Riki1979 - Mo 15:28
» Leica entwickelt nächsten Bildsensor mit Gpixel zusammen
von cantsin - Mo 14:15
» Verkaufe Manfrotto 535 MPRO Stativ + Nivellierhalbkugel + MVH502AH Neiger
von JB Eisenbahnfilme - Mo 13:25
» Ist der deutsche Film TOT? DOMINIK GRAF
von Nigma1313 - Mo 12:51
» Avid integriert Googles KI-Technologie in den Media Composer
von Tobiornot - Mo 11:13
» Sony zeigt XYN Spatial Capture Solution für virtuelle Produktionen
von slashCAM - Mo 11:06
» Blackmagic URSA Cine 12K LF und Immersive mit 100G und Gen6 Color Science vorgestellt
von ruessel - Mo 8:21
» Osmo Pocket in günstig: Agfaphoto Realimove MC3X
von ruessel - Mo 7:59
» Die Riedel Group übernimmt Traditionshersteller ARRI
von Darth Schneider - So 18:52
» Blackmagic Design stellt neue SMPTE-2110-Lösungen mit 100G vor
von slashCAM - So 15:48
» Val Kilmer lebt
von Alex - So 15:30
» Crew United 2026
von Alex - Sa 17:36
» Neue Lüftermodule von SmallRig sind mit Sony- & Canon-Modellen kompatibel
von toniwan - Sa 16:18
» "Bitcoin: Killing Satoshi" - echte Schauspieler, KI-generierte Welt
von iasi - Sa 15:46
» RØDE Sonaura - kompakte MEMS-basierte Mikrofonkapseln mit SNR von 83dB, EIN 11dBA
von ruessel - Sa 9:29
» Maxon Autograph: Professionelle After Effects Alternative jetzt kostenlos
von MaxSchreck - Sa 6:23
» Atomos SUMO PRO-19 - 19" großer 4K-HDR-Vorschaumonitor, Recorder und Live-Switcher
von slashCAM - Fr 21:00
» Adobe MotionStream - künftig Echtzeit-Kontrolle über KI-Videogenerierung?
von slashCAM - Fr 18:18
» Blackmagic Cloud Store Ultra und Media Dock Ultra - Profi-Speicher mit Dual-100G
von tom - Fr 18:01
» DJI Osmo Pocket 4 bekommt 107 GB Speicher - bald Pocket 4 Pro mit Dual-Kamera
von slashCAM - Fr 15:40
» Blackmagic Camera 3.3 macht iPhone zur Studiokamera - plus Steuerung per Apple Watch
von Jominator - Fr 11:37
» Rode teasert UHF Funkstrecke "Rodelink II" auf der NAB2026
von rush - Fr 9:35
» Kodak VERITA 200D - neuer Farbnegativfilm für Kino
von Jott - Do 22:47
» Blackmagic veröffentlicht New Features Guide für DaVinci Resolve 21
von tom - Do 20:36
» Schoeps MK 41 mit CMC 6 und Cut60 zu verkaufen
von Pianist - Do 18:48
» Nanlux Evoke 5C - Profi 6W Miniatur-Spotleuchte mit C8 Farb-Engine
von medienonkel - Do 15:05
» Firmware Updates für C400, C80, C50, C70, R5C, ein Wildlife-Zoom für 80.000 Dollar, ua.
von Jott - Do 14:50
» DJIs neue Einsteiger-Drohne Lito kommt am 23. April - mit OcuSync 5?
von slashCAM - Do 13:12
» Rot ist eigentlich nicht meine Farbe
von blueplanet - Do 7:10
» Adobe Video Update - u.a. Premiere mit neuem Color Grading, Frame.io Storage Drive
von j.t.jefferson - Do 1:43
» Hat jemand Erfahrung mit line audio omni1/c m4 Mikrofonen??
von Jörg - Mi 19:16
» DaVinci Resolve 21 kommt mit Photobearbeitung (!), vielen KI-Features und Krokodove
von soulbrother - Mi 15:46