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]
 
» GoPro MISSION 1 Pro - 8K-Actioncams mit 1-Zoll-Sensor und MFT-Mount
von iasi - Mi 7:26
» DIY: DJI Mic2 in die Klinkenbuchse geschaut.
von TomStg - Mi 7:19
» Nanlite Evoke 5C: Das vielseitigste, kompakte LED Spotlight am Markt?
von MaxSchreck - Mi 5:57
» Was hörst Du gerade?
von Bluboy - Mi 5:19
» Sennheiser HD 480 PRO - neuer geschlossener Referenzkopfhörer für Studio und Live
von BigT - Di 21:53
» SD+HD Bearbeitung/Restauration/Digitalisierung mit VD1/2
von Jens65 - Di 18:32
» Was schaust Du gerade?
von berlin123 - Di 18:00
» Musikvideo | Framerate-Frage in die Runde :)
von dienstag_01 - Di 17:57
» DIY Regenschutz für die DJI Pocket 4
von ruessel - Di 16:51
» Blackmagic PYXIS 12K – Kostenloser Workshop für professionelle Filmemacher
von slashCAM - Di 16:06
» Laowa stellt variable 1-5x und 5-10x Ultra Makros vor - inkl Cine Versionen
von iasi - Di 15:22
» Blackmagic DaVinci Resolve und Fusion 21 Beta 2 Update verbessert u.a. Fotoverarbeitung
von medienonkel - Di 15:14
» LaCie 8big Pro - 8-Bay-RAID mit Thunderbolt 5 und bis zu 256 TB
von slashCAM - Di 13:33
» Tilta Khronos Cine-Adapter soll PL-Objektive an das iPhone bringen
von Jott - Di 12:39
» Sinnvolles Zubehör für Pocket3/4?
von ruessel - Di 12:32
» Ich gerate in Bergnot, damit ihr es nicht müsst!
von freezer - Di 11:03
» Nacktheit in Filmen vortäuschen.
von ffm - Di 9:52
» Bosma Vega H2 - 6K-Kamera mit um 90° drehbarem Sensor und ToF-Fokus
von Darth Schneider - Mo 18:14
» Manfrotto ONE: Das vielseitigste Hybrid Stativsystem für Video + Foto seiner Klasse?
von rob - Mo 16:29
» After Effects LLM gesucht
von tom - Mo 14:42
» Wenn Schauspieler PRODUZENTEN werden. WILSON GONZALEZ OCHSENKNECHT
von Nigma1313 - Mo 12:56
» Adobe kündigt Firefly AI Assistant an - Agent steuert Creative Cloud Apps per Prompt
von j.t.jefferson - Mo 11:07
» Viltrox 35mm 1.8 APO EVO
von Bildlauf - So 17:45
» Nikon teasert erste Cine lens (mit AF)
von iasi - So 16:27
» !!BIETE!! iPhone 12 mini in weiß 64GB
von klusterdegenerierung - So 14:27
» DNG ist offizieller ISO-Standard – Meilenstein für ein offenes RAW-Format, das keiner will?
von dienstag_01 - So 11:21
» DJI Osmo Pocket 4 kommt noch im April - interner Speicher und neue Pro-Version
von ruessel - So 8:22
» OPPO Find X9 Ultra 8K Kamera-Smartphone bietet 10x Periskop-Zoom, 3D-LUTs und ACES
von soulbrother - So 6:54
» 32 Bit Audio in Davinci Resolve?
von gammanagel - Sa 19:59
» Blackmagic URSA Mini Pro PL Mount
von Jost - Sa 17:44
» Flusskreuzfahrt, letzter Teil: Potsdam (mit passendem Lied)
von Riki1979 - Sa 17:03
» Sirui erweitert Vision Prime- und anamorphotische IronStar-Serie
von rush - Sa 11:51
» Flusskreuzfahrt Teil 5: Brandenburg an der Havel
von Riki1979 - Sa 10:34
» DIY - Rüssel MEMS Mikrofon(e)
von ruessel - Sa 8:33
» DIY: DJI Pocket 4 Controller?
von ruessel - Sa 8:22