freezer
Beiträge: 3861

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]
 
» Sigma18-35 mm 1.8 - Studiolinse, Canon-Mount
von KaremAlbash - Mo 16:55
» Roland Emmerich im Interview - KI ist eine Chance für Hollywood
von medienonkel - Mo 16:27
» Flusskreuzfahrt, Teil 2: Bremen
von 7River - Mo 16:23
» NETZWERKEN für Schauspieler/Filmemacher mit ANDREA LAMBSDORFF
von Nigma1313 - Mo 15:09
» Christopher Nolans "The Odyssey" - offizieller Trailer
von iasi - Mo 14:53
» Must-See-Action-Highlight des Jahres 2026
von iasi - Mo 14:46
» Videostativ für Lumix S5II
von Darth Schneider - Mo 14:17
» EvrBridge - Automatisches Kamera-Metadaten-Management für DaVinci Resolve
von slashCAM - Mo 13:57
» Atomos USB4 CFexpress Typ B Kartenleser mit 40 Gbit/s für schnellen Ingest
von cantsin - Mo 11:19
» Netflix auf dem Weg zur KI-Synchronisierung?
von MaxSchreck - Mo 7:41
» bmCAM PrepMeister - Das Schweizer Taschenmesser für die BMD Kamera-Vorbereitung
von freezer - Mo 2:24
» DIY: digitales aber analoges VU-Meter
von ruessel - So 16:31
» Speicherkrise x2 - Nach dem RAM werden jetzt auch Festplatten knapp und teuer
von Jott - So 11:58
» DIY Soundsucher: Scanner für Ultrasoundaufnahmen bis 100 kHz
von ruessel - So 11:04
» TTARTISAN AF 17mm F1.8 Air - kompakte APS-C/Super35-Objektiv kostet 179 Euro
von slashCAM - So 9:45
» SD+HD Bearbeitung/Restauration/Digitalisierung mit VD1/2
von Jott - So 9:24
» Nikon ZR in der Praxis: 6K 50p RED RAW Monster für 2.349,- Euro mit klassenbester Colorscience?
von iasi - So 1:09
» Was hast Du zuletzt gekauft?
von ruessel - Sa 17:34
» Nikon will sich als Cinema-Kamera-Marke etablieren
von iasi - Sa 15:56
» Nikon entwickelt NIKKOR Z 120-300mm f/2.8 TC VR S mit integriertem 1.4x Telekonverter
von Bildlauf - Sa 12:52
» Video Assist App verwandelt iPad in Profi-Vorschau-Monitor
von slashCAM - Sa 10:15
» DIY Regenschutz für die DJI Pocket 4
von ruessel - Sa 10:10
» DJI Osmo Pocket 4 kommt noch im April - interner Speicher und neue Pro-Version
von rush - Sa 8:21
» Dulens Apo Mini Prime Set // 31mm, 43mm, 58mm
von Sevenz - Fr 14:40
» Sony A7V, MacBook Air, BM Cloud, SmallRig Cages, iPhone 17: Solo-Shooter und Remote Edit Setup
von rush - Fr 13:34
» DIY: digitales AudioMEMs INMP441
von ruessel - Fr 11:55
» Neue Umfrage: Welche Kameraauflösung ist für Dich aktuell der Sweet Spot?
von medienonkel - Fr 10:07
» Blackmagic PYXIS 12K für Netflix 4k Originals zugelassen
von slashCAM - Fr 9:45
» Graustufen-LUT für Pocket 4K
von cantsin - Do 21:33
» Was schaust Du gerade?
von cantsin - Do 17:10
» DJI Osmo Mobile 8P - Neuer Smartphone-Gimbal mit Fernbedienung und besserem Tracking
von slashCAM - Do 14:36
» Kaufberatung für Motorsport Videografie
von FlorianH - Do 9:59
» ARRI Omnibar - modulare LED-Leiste mit Wechselvorsätzen und Magnethalterung ab 730 Euro
von soulbrother - Mi 22:43
» Verkaufe Nikon ZR Body
von Godspeed77 - Mi 18:23
» Verkaufe: Mac Studio M1 Max 32 Cores mit 8TB SSD!
von Godspeed77 - Mi 18:17