🏷️

DaVinci Resolveのsettingファイルの再編集(ラベルコントロール編)

に公開
1

ラベルコントロールについて

ラベルコントロールは映像出力には直接関与しないコントロールですが、UI上のコントロールをまとめて折りたたむ事が出来るためオーサリング時のユーザビリティーに大きく関与するコントロールです。

また、ノードに予め設定されているラベルはマクロ書き出し時には書き出せません。
インスペクタのコントロールの編集からラベルコントロールが追加可能でそちらはマクロに書き出す事ができますが、DaVinci Resolve内ではコントロールの順番を変更する事ができないので適切な位置に差し込むのが困難です。

そこで、ラベルコントロールを活用しようと思ったらテキストエディタでの編集がほぼ不可欠です。
私の場合はDaVinci Resolve内でラベルコントロールの作成はせずに、テンプレなどを利用してテキストエディタで作成する場合が多いです。

有志の方が作成されたラベルコントロールの作成を簡単にするツール等も公開されているのでそちらを利用するのも良いと思います。

settingファイルにおけるラベルコントロールの記述場所

記述場所

settingファイルのデータ内のTools = ordered() {...}のブロック内にノードの詳細なデータが記述してあります。
各ノードに対してユーザーが追加したコントロールや既存のコントロールの設定を変更した項目があればUserControls = ordered() {...}というブロックが作成されるのでそのブロック内に記述します。
UserControls = ordered() {...}というブロックが無い場合には作成してその中に記述します。

配置場所

UserControls = ordered() {...}のブロック内に記述したラベルコントロールをインスペクタ上に配置するにはInputs = ordered() {...}のブロック内でInstanceInputで呼び出します。
例えばBackGround1のノードのUserControls = ordered() {...}ブロックに記述したIDLabelControl1というラベルを配置するなら次のようになります。

Inputxx = InstanceInput {
    SourceOp = "BackGround1",
    Source = "LabelControl1"
}

ラベルコントロールの記述内容

ControlID = {
    INPID_InputControl = "LabelControl",
    LINKS_Name = "ラベル名",
    LINKID_DataType = "Number",
    INP_Integer = true,
    INP_MinScale = 0,
    INP_MaxScale = 1,
    INP_MinAllowed = 0,
    INP_MaxAllowed = 1,
    LBLC_DropDownButton = true,
    INP_Default = 0,
    LBLC_NumInputs = 10,
    LBLC_NestLevel = 1,
    INP_External = false,
    INP_Passive = true,
    INP_SplineType = "StepIn",
    ICS_ControlPage = "Controls"
},

各項目の内容

  • ラベルコントロールの値は01の2値しか期待されていないです。
  • 値はLBLC_DropDownButton = true の場合においてのみ有効な値です。
  • 0が閉じた状態、1が開いた状態

必須の項目

ControlID = {...}

  • コントロールのID
  • 任意のIDを設定可能。ノードにつき一意のIDである必要があります。

INPID_InputControl

  • コントロールの種類
  • ラベルコントロールの場合は"LabelControl"になります。
  • コントロールの表示名
  • ラベルコントロールの表示名に限りhtmlタグが使用できる模様。
    どこまで許容されているかは私は未検証。今後非推奨になる可能性も。
LINKS_Name = "<font color = 'red'>ラベル名</font>"

とした場合ラベル名が赤色で表示されました。
今時fontタグなんて使う人居ないのだろうけど<span style="color:red">より短いから古のタグの使い道がこんな所にあるなんて思いませんでした。

必須ではない項目

ラベルコントロールにはFusionであらかじめ設定されているディフォルト値があるので設定しなければディフォルト値が採用されます。
よって、ディフォルトで良い項目は敢えて記述する必要は無いです。

LINKID_DataType

  • 値のデータ型
  • ラベルコントロールの場合は値が01しかないので数値型となり、値は"Number"になります。

INP_Integer

  • 値が整数であるか
  • ラベルコントロールの場合は値が01しかないのでtrueで良いです。
    ディフォルトの値は私は未検証です。

最小値と最大値

ラベルコントロールの場合は値が01しかないので敢えて記述しなくてもディフォルトで以下のようになっていると思われますが、単純にラベルをクリックした時の値を01でトグルしている可能性もあります。

キー キーの内容
INP_MinScale 値の最小値 0
INP_MaxScale 値の最大値 1
INP_MinAllowed 許可する値の最小値 -1e+06
INP_MaxAllowed 許可する値の最大値 1e+06

LBLC_DropDownButton

  • ラベルコントロールを開閉式にするか
  • 開閉式にする場合はtruetrueを指定した場合ラベルで纏める範囲の上下に区切り線が表示されます。
  • falseを指定した場合、或いは何も記述しなかった場合は開閉式ではなくなります。

INP_Default

  • ディフォルト値。0が閉じた状態で1が開いた状態
  • 記述しなかった場合は0が採用されます。
  • あくまでもディフォルト値なのでノードのInputs = {...}のブロックに
LabelControl = Input { Value = 0 }

等と記述があればそちらの値になります。ディフォルト値を設定しているにもかかわらず意図した状態となっていない場合はそこをチェックすると良いです。

LBLC_NumInputs

  • 値が0の場合、ラベルコントロール以降のInstanceInputをいくつ隠すかを数値(整数)で指定します。
  • 区切り線や空白、ラベルなどを含むInstanceInputの数を指定します。

LBLC_NestLevel

  • ラベルの入れ子状態を指定します。
  • 特に指定しなくても入れ子状態は自動で判定される模様。

INP_External

  • 外部からの制御を許可するか
    具体的にはアニメートを可能にするかです。
  • 特に何も記述しなければ自動的にfalseになるので特に理由がない限り変更又は省略しない方が無難と思われます。

INP_Passive

  • 値が静的か動的か
  • 通常はインスペクタ上のユーザー入力によってのみ値が変化するのでtrueで良いと思われますが特に記述する必要は無いです。

INP_SplineType

  • アニメーションの補完方式
  • 特に記述しなければ"Default"が採用されますが、値が01しか無く、アニメーションもしないので明示的に記述するならば"StepIn"で良いと思われます。

ICS_ControlPage

  • ページ設定。既存のページである必要は無く任意のページを作成可能です。
  • ここで指定していてもInstanceInputPageで指定した物が優先されるので敢えてここで記述する必要は無いです。
    むしろページ設定の設定場所が分散すると管理し辛くなるのでここでは記述しない方が好ましい場合があります。

ラベルコントロールのテンプレ

以上の項目のうち通常のラベルの使用目的はいくつかの項目を折りたたんで隠せるようにする事が殆どだと思うので、最低限の記述をテンプレ化すると以下の様になります。

ラベルのコントロールID = {
    INPID_InputControl = "LabelControl",
    LINKS_Name = "ラベル名",
    LBLC_DropDownButton = true,
    INP_Default = 01,
    LBLC_NumInputs = 隠す数,
    INP_External = false,
},

Discussion

セカイルセカイル

ラベルコントロールを空白の代わりに利用する

ラベルコントロールの主な使用目的はインスペクタ上のコントロールをまとめて折りたためるようにする事ですが、単純に見出しのようにして利用する事も可能です。その特性を利用して空白のように利用する事も可能です。

但し、その場合ApplyBlankを利用した空白よりも高さが大きくなります。何か高さを指定する方法が存在するかも知れませんが私が試した限りでは高さを小さくする方法は見つけられませんでした。

具体的な手順

  1. 任意のノードのUserConrols = Orderd() {...}ブロック内にラベルコントロールを追加する。
  • LINKS_Nameを空文字にしておく
  • INP_Externalfalseにしておく(キーフレームのスイッチを表示させないため)
SpaceLabel = {
    INPID_InputControl = "LabelControl",
    LINKS_Name = "",
    INP_External = false
}
  1. InstanceInputで配置する。
    InstanceInputは必ずしもInputxx = InstanceInput {...}の形式である必要はありません。下画像のようにキーの部分は任意の名前でも問題ありません。

    ApplyBlankと比べて高さが大きい事が分かります。

空白の高さを大きくする方法

高さを小さくする方法は見つけられませんでしたが、大きくする方法は見つけました。実用性としては低いと思われます。

  • 具体的にはhtmlタグの改行を利用します。
  • コントロールの属性に複数行を指定します
SpaceLabel = {
    INPID_InputControl = "LabelControl",
    LINKS_Name = "<br><br><br>",
    LBLC_MultiLine = true,
    INP_External = false
}

ラベルコントロールのハック的な利用方法として知っておくと良いかもしれません。