PythonでDaVinci Resolveを自動操縦(準備編)

PythonでDaVinci Resolveを自動操縦できれば、動画の生成がある程度まで自動化できるな・・・ということで、調査および自動化のための準備をしてみた。なお、Windows+DaVinci Resolve Studio環境が前提(Studio版ではない無料のDaVinci Resolveだと、以下の「External scripting using」の設定ができない)。

ドキュメント

以下が役に立ちそうな情報か。

  • DaVinci ResolveのHelpメニュー → Documentation → Developerでフォルダを開き、Scriptingフォルダ内にあるREADME.txt(とっても読み辛い・・・)
  • ResolveDevDoc (上記をHTML化した非公式ドキュメントらしい。.txtよりは見やすい)

事前準備

ドキュメントに従いPython3.6をインストールする。3.6.xのWindows版は以下からダウンロードする。

www.python.org

環境変数設定

以下3つを追加する。

RESOLVE_SCRIPT_API="%PROGRAMDATA%¥Blackmagic Design¥DaVinci Resolve¥Support¥Developer¥Scripting"
RESOLVE_SCRIPT_LIB="C:¥Program Files¥Blackmagic Design¥DaVinci Resolve¥fusionscript.dll"
PYTHONPATH="%PYTHONPATH%;%RESOLVE_SCRIPT_API%¥Modules¥"

External scripting using

ドキュメントに書かれている以下の意味するところが最初は分からなかったが・・・

By default, scripts can be invoked from the Console window in the Fusion page, or via command line. This permission can be changed in Resolve Preferences, to be only from Console, or to be invoked from the local network. Please be aware of the security implications when allowing scripting access from outside of the Resolve application.

DaVinci ResolveのDaVinci Resolveメニュー → Preferences → General(General Preferences)にてExternal scripting usingを「None」から「Local」へ変更することで、DaVinci Resolveの外側からスクリプトによるコントロール可能になるようだ。 f:id:davmemos:20220305213436p:plain

Hello Project

ドキュメントのサンプルコードに少しだけ付け足し、Project作成後にTimelineとTitle(Text)を追加してみる。

import DaVinciResolveScript as dvr_script

resolve = dvr_script.scriptapp("Resolve")
projectManager = resolve.GetProjectManager()
project = projectManager.CreateProject("Hello Project")
mediapool = project.GetMediaPool()
timeline = mediapool.CreateEmptyTimeline("Hello Timeline")
project.SetCurrentTimeline(timeline)
timelineItem = timeline.InsertTitleIntoTimeline("Text")

DaVinci Resolve起動後、上記スクリプトを実行してみると・・・どうやらうまく動いているようだ。 f:id:davmemos:20220305221948p:plain

headless mode

ドキュメントによれば、-noguiコマンドラインオプションを付けてDaVinci Resolveを起動するとヘッドレスモード(GUIが表示されず、スクリプトからの命令のみ受け付ける)で起動するらしい。サーバ上でDaVinci Resolve+Pythonスクリプトで動画を自動編集したりするのに使えそうだ。