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]
 
» Neue Umfrage: Welche Speicherlösung nutzt Du primär für Videodaten?
von soulbrother - Do 22:25
» EIZO ColorEdge CS3200X - 31,5" 4K-Monitor mit Profi-Features der CG-Serie
von CameraRick - Do 16:13
» Neues aus der Welt BMD + Apple Immersive Video
von R S K - Do 15:32
» Netflix VOID – neues kostenloses KI-Tool zum Entfernen von Objekten aus Videos
von MaxSchreck - Do 14:55
» Rückprojektion mit einem Ultrakurzdistanz Beamer
von asymmetric - Do 14:52
» CornerCut - direkter Timeline-Export ohne XML
von CameraRick - Do 13:59
» Audiorecorder Mikrofone Tascam FR AV-2, Lewitt, Synco
von KeineCloud - Mi 17:17
» Tascam DR-40XP - verbesserter 4-Spur-Audiorecorder
von slashCAM - Mi 16:18
» Blackmagic DeckLink IP 100G vorgestellt - 8 Kanal 4K Capturing und Playback per Ethernet
von slashCAM - Mi 14:48
» Die Filmindustrie ist zur Zeit schwierig - ANDREA LAMBSDORFF
von Nigma1313 - Mi 13:23
» Verkaufe Davinci Resolve Studio
von Jost - Mi 8:12
» Offener Brief gegen KI-Slop für Kinder auf YouTube
von j.t.jefferson - Mi 3:33
» Empfehlung gesucht: Bluetooth-Kopfhörer als Zweitmonitor
von Hifi - Di 12:51
» Sigma FF High Speed Cine Prime Set (PL-Mount) – T1.5 – 20/35/50/85mm – Top Zustand
von beesandrockets - Di 12:45
» Wir können SO nicht weitermachen! | MASTERCUT
von Nigma1313 - Di 12:34
» Weltweiter Launch von Seedance 2.0 verspätet sich nach Copyright-Aufschrei
von iasi - Mo 22:27
» Erfahrung mit MAMIYA Objektive?
von RonMarKom - Mo 19:53
» Pokalsieger Highlight Video DEVOTION
von Christian 671 - Mo 9:02
» TelTec zu empfehlen (Insolvenz)
von Pianist - So 21:18
» DIY Heltec LoRa32 V3 Spielereien
von ruessel - So 16:09
» h264 Lizenzkosten explodieren für Streaming-Anbieter
von Darth Schneider - So 14:14
» KEP59 Musikvideo mein Leben auf dem Rücksitz
von Heinrich123 - So 9:00
» Klatschen und Pfeifen aus einer mp3 entfernen
von Samir - Sa 17:52
» Sichtbarer Unterschied zwischen 4:2:2 und 4:2:0
von Jott - Sa 16:34
» Frühjahrsputz - Überflüssige Dateien unter macOS systematisch finden und löschen
von TomWI - Sa 10:39
» Sound Devices Astral Mini Plus: Kompakter Sender für Profis mit ePaper-Display
von slashCAM - Sa 10:36
» Apple M5 und M5 Max im MacBook Air und Pro - Performance unter DaVinci Resolve
von rush - Fr 19:42
» Das Ende einer Ära - Apple Mac Studio ersetzt Mac Pro endgültig
von Darth Schneider - Fr 18:29
» Schauspieler am Filmset! KAIS SETTI
von Darth Schneider - Fr 12:44
» Welche Sony A7 für längere 4K Aufnahmen?
von hexeric - Fr 9:51
» Rushes will das neue Vimeo werden
von rush - Do 16:34
» Europäischen audiovisuellen Sektor auf 142 Mrd. € geschätzt.
von ruessel - Do 15:30
» Datacolor Spyder-Frühlingsaktion - bis zu 100€ Rabatt auf Farbkalibrierungslösungen
von slashCAM - Do 10:03
» DUNE !
von markusG - Mi 20:51
» Vegas Pro 2026 in drei Versionen erschienen inkl. BorisFX-Tools
von Bluboy - Mi 19:13