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スクリプトで動画を自動編集したりするのに使えそうだ。

DaVinci Resolve Studio価格調査

DaVinci Resolve Studio 17のライセンスキーを安く入手するには・・・Speed Editorが不要なら、ヨドバシカメラビックカメラで購入するのが良さそう。以下は、Blackmagicdesignの公式ページに「認定オンライン取扱販社」として掲載されていた取扱販社と、2022/3/5現在の価格。いずれも税込みで送料は無料。

取扱販社 ライセンスキー版 Speed Editor同梱 備考
公式サイト ¥39,578 ¥49,478 -
株式会社システムファイブ ¥38,778 ¥48,478 さらにポイント1%還元
フジヤエービック - - 現在取扱なし?
株式会社ビデオ近畿 ¥38,390 ¥47,993 -
株式会社ヨドバシカメラ ¥33,370 ¥49,480 さらにポイント3%還元
株式会社ビックカメラ ¥33,370 ¥49,480 さらにポイント3%還元

テキストが跳ねるFusionテンプレート

テキストが跳ねるFusionテンプレートを作ってみる。

bounce

Center Yの値

ポイントはText+のCenter Yの値を時間の経過と共に変化させるところだが、直感で試行錯誤したり自分で計算するのは面倒なので・・・手軽に使える物理演算エンジンmatter.jsを使って物体を落下させたときのY座標を使える値に加工することにした。

brm.io

座標を得るためのコードは割愛するが、結果として以下のような値が得られた。

0.555, 0.670, 0.720, 0.755, 0.778, 0.793, 0.800, 0.800, 0.793, 0.782, 0.766, 0.747, 0.723, 0.694, 0.662, 0.626, 0.586, 0.542, 0.510, 0.528, 0.541, 0.549, 0.552, 0.551, 0.545, 0.534, 0.520, 0.501, 0.507, 0.509, 0.506, 0.500

この値を使ってCenter Yにキーフレームを打っていけば・・・跳ねているように見えるだろうか? bounce animation

テンプレートの自動生成(出来なかった)

Center Yを手入力するのはこれまた面倒なので・・・Fusionテンプレート(単なるテキストファイル)を生成するスクリプトを書けばよさそう。生成できるかどうか確認するために、まずは適当にCenter Yを変化させたText+ノードをテキストファイル(.settingsファイル)へ書き出して中を見てみると・・・Centerの変化が各キーフレームを結ぶ2種類のベジエ曲線(?)として定義されていて、難易度が高そう。試しにそれっぽい値でベジエ曲線を定義してみたが、うまくアニメーション出来ず。結局今回はデータが30個程度ということもあり、DaVinci ResolveのInspector画面で手入力することにした。