🎮

DaVinci Resolveのsettingファイルの再編集(UserControls編)

に公開

コントロールの編集

マクロはFusionにあらかじめ用意されているノードを組み合わせて作成します。
単純にノードを組み合わせるだけでも作成できますが、既存のパラメータの設定を変えたり元々のノードに無いパラメータを追加する事によって多彩なカスタマイズができるようになっています。

そこで既存のパラメータの設定を変えたり新しくパラメータを追加する時には、コントロールの編集ダイアログを使用する事になります。

ダイアログを開くにはノードエディタのノード上かインスペクタのノード名の所で右クリックして出て来るメニューの中から「コントロールを編集...」(Edit Control)という項目を選択します。

コントロールの編集ダイアログを使用してノードに対してコントロールを追加したり既存のパラメータの設定値を変更するとsettingファイルには各ノードのブロック内にUserControls = Orderd () {...}というブロックが作成され、そのブロック内にコントロールが並びます。

また、UserControls内のコントロールの並び順はノード単体のsettingファイルでは関係がありますが、マクロ化したsettingファイルではInstanceInputという形で呼び出してインスペクタに表示する事になるので、ここでの並び順は関係ありません。
InstanceInputの順番の入れ替え方については別に記事を書いているのでそちらをご覧下さい。
https://zenn.dev/2ndillness/articles/b1fdd7663a0081

設定項目

コントロールの編集ダイアログで編集できる項目はコントロールの種類によって異なりますが、以下のような共通項目があります。設定項目のsettingファイル上でのプロパティーは以下のようになっています。

コントロールの編集ダイアログでの項目 settingファイルでのパラメータ
名前 ( Name ) LINKS_Name
ID ID = {...}の形
種類 ( Type ) LINKID_DataType
ページ ( Page ) ICS_ControlPage
アニメート可能 ( Animatable ) INP_External
パッシブ ( Passive ) INP_Passive
ディフォルト ( Default ) INP_Default
入力 ( Input Ctrl ) INPID_InputControl
ビュー ( View Ctrl ) INPID_PreviewControl

コントロールの編集ダイアログでは編集不可な項目

コントロールの編集ダイアログからは編集不可、または編集が困難な項目がいくつかあます。

Number型の値が設定値と誤差が出る

コントロールの編集ダイアログで数値型のディフォルト値等を設定する時に0.20.3と言った2進数で表せない数値に設定すると近似値になり、小数点第15位まである数値になってしまいます。
例えば0.2と設定したならば0.200000002980232といった数値になります。

これは誤差の範囲なので厳密な数値である必要がある場合を除いてはさほど影響がある訳ではありませんが、インスペクタ上でコントロール名をダブルクリックした時にはこの値になるので、ディフォルト値がキリの悪い数値になってしまうのは見た目に美しくありません。

settingファイルを書き直すとスッキリした数値にできます。

既存のコントロールのビューワコントロールをオフにできない

他のコントロールと重なる等でビューワコントロールを表示したくない項目もあると思いますが、既存のコントロールについてはダイアログ上でビュー(View Ctrl)のNoneを選択してOKしてもビューワ上には反映されません。
settingファイルを確認するとINPID_PreviewControlの項目が記載されていません。

INPID_PreviewControl = "None",

コントロールのプロパティーにこの一行を追加する事でビューワコントロールを非表示にできます。

必要以上のデータが記載されてしまう

また、特定のプロパティーだけ変更したいという時にはその項目だけ記述すれば良く、全てのプロパティーを記述する必要はありません。

記述されていないプロパティーはノードのディフォルト値が採用されます。つまり、ビューワコントロールを非表示にして残りのプロパティーはディフォルトで良い場合には以下のようにしてやるだけで良いという事です。エラーにはなりません。

Center = { INPID_PreviewControl = "None" }

また、表示したいページを設定したいだけでもコントロールの編集ダイアログで設定するとそれ以外の情報も記載されてしまいます。ページ設定を変更したいだけならば

Center = { ICS_ControlPage = "Controls" }

のようにしてやるか、InstanceInputで呼び出す時に

Inputxx = InstanceInput {
    SourceOp = "Rectangle1",
    Source = "Center",
    Page = "Controls"
}

のようにすると良いです。個人的にはInstanceInputで記載する方が無駄なデータが増えなくて良いし、ページの管理もしやすいのでお勧めです。

コントロールの編集ダイアログでは選択できないオプションが存在する

コントロールの編集ダイアログでは選択肢として与えられていないオプションも、テキストエディタで記載できるものが存在します。

これらは情報が少ないのでどういったものがあるのかは殆ど把握できていませんが、例えばマルチボタンコントロールには通常選択肢として与えられていないデザインを選択できます。

上画像のtest01からtest04までは全てマルチボタンコントロールですが、test02のような通常のボタンコントロールのようなデザインはコントロール編集のダイアログでは選択肢として与えられていません。

因みにtest04は設定上はボタンコントロールですが、中に表示する文字数が多くなって余白を含めた長さがボタンの枠に納まりきらなくなった場合にはコンボボックスコントロールに変化します。settingファイル上での記載は以下のようになっています。

settingファイルでの該当箇所
UserControls = ordered() {
    test01 = {
        { MBTNC_AddButton = "a" },
        { MBTNC_AddButton = "b" },
        { MBTNC_AddButton = "c" },
        { MBTNC_AddButton = "d" },
        INPID_InputControl = "MultiButtonControl",
        MBTNC_ShowBasicButton = false,
        MBTNC_ShowName = true,
        MBTNC_ShowToolTip = false,
        MBTNC_StretchToFit = false,
        LINKS_Name = "test01",
    },
    test02 = {
        { MBTNC_AddButton = "a" },
        { MBTNC_AddButton = "b" },
        { MBTNC_AddButton = "c" },
        { MBTNC_AddButton = "d" },
        INPID_InputControl = "MultiButtonControl",
        MBTNC_ForceButtons = true,
        MBTNC_ShowName = true,
        MBTNC_ShowToolTip = false,
        MBTNC_StretchToFit = false,
        LINKS_Name = "test02",
    },
    test03 = {
        { MBTNC_AddButton = "a" },
        { MBTNC_AddButton = "b" },
        { MBTNC_AddButton = "c" },
        { MBTNC_AddButton = "d" },
        INPID_InputControl = "MultiButtonControl",
        MBTNC_ShowBasicButton = true,
        MBTNC_ShowName = true,
        MBTNC_ShowToolTip = false,
        MBTNC_StretchToFit = false,
        LINKS_Name = "test03",
    },
    test04 = {
        { MBTNC_AddButton = "aaaaaaa" },
        { MBTNC_AddButton = "b" },
        { MBTNC_AddButton = "c" },
        { MBTNC_AddButton = "d" },
        INPID_InputControl = "MultiButtonControl",
        MBTNC_ShowName = true,
        MBTNC_ShowBasicButton = true,
        MBTNC_ShowToolTip = false,
        MBTNC_StretchToFit = false,
        LINKS_Name = "test04",
    },
}

UserControls = ordered() {...} ブロックが1行で出力されてしまう

これについてはDaVinci Resolvesettingファイルをテキストエディタで再編集した事がある方は誰しもが経験したモヤッとポイントだと思います。

再現性に一貫性が無いのでどういう条件でこうなるのか、或いは完全にランダムなのかは分かりませんが、コントロールの編集ダイアログで新しくコントロールを追加すると高確率でこの現象が起こります。

1行で出力されてしまう為非常に見辛く、内容を確認するにも再編集するにも都合が悪いです。
手動編集で見やすく改行する事は可能ですが、数が多くなると大変です。また、手動での修正はミスを犯すリスクがあるので避けたいところです。

修正をAIに頼んだりもしていましたが、web上のチャット画面に貼り付けて修正された物をコピペするのも面倒になってきました。
GitHub CopilotCursorなど、エディタ上で支援してくれるAIを活用する方が良いと思います。

整形用スクリプト

最終的に私はローカル環境だけで整形処理をするPythonスクリプトをいわゆるVibe Codingという方法でAIに作ってもらいました。
settingfile_formatter
使い方等はリンク先のREADME.mdをご覧下さい。
文字列リテラル整形スクリプトとの統合をしました。

Discussion