Holmes開発者ブログ

契約マネジメントシステム「ホームズクラウド」の開発者ブログです

【AviUtl】図形オブジェクトの座標と連動した数値の表示(スクリプト制御・Lua言語)

この記事は Holmes Advent Calendar 2020 - Qiita 24 日目の記事です。


Holmesの倉島です。趣味でAviUtlというツールを用いて映像編集を行なっています。この度、このAviUtlの機能の一つ「スクリプト制御」に触れたので自身の使用例を紹介したいと思います。

AviUtlとは

フリーの映像編集ソフトで、有志によるプラグイン開発等で高い拡張性が特徴です。

AviUtlについて詳しく解説されている記事があったので詳細はこちら。 aviutl.info

スクリプト制御とは

AviUtlのスクリプト(動作・エフェクト等を操作する効果)はLua言語で書かれています。

ja.wikipedia.org

スクリプト制御はAviUtlの機能の一つで、Lua言語を直接記述して映像(図形やテキスト等のオブジェクト)を操作することができる機能です。

実践

例:図形オブジェクトが動くのと連動してX,Y座標をテキストで表示させる。 下記画像の右下のようなテキストを作成します。(X座標 : Y座標) f:id:t-kurashima:20210108130225p:plain

1. 連動させたい図形オブジェクトにスクリプト制御を付与

図形オブジェクトにスクリプト制御を付与し、入力欄に 

rendouX = obj.x
rendouY = obj.y

と入力。
obj.x で図形オブジェクトのx座標を、obj.yでy座標を取得することができ、それらの値をrendouX,rendouYという変数に代入します。
Luaでは変数名の前に修飾詞を入力しない場合はグローバル変数扱いになります。

f:id:t-kurashima:20210108130337p:plain

2. テキストでスクリプト制御

次にX座標 : Y座標 を表示する為に、テキストオブジェクトの入力欄に

<?
hyouji = rendouX .. ":" .. rendouY
mes(hyouji)
?>

と入力します。
※ <? ~ ?>で囲われている内容は直接テキストとしては表示されず、mes()などの関数を用いて表示されるものがテキストの内容となります。
mes()関数は()の中に指定した文字列を表示することができます。その為mes()の()の中に X座標 : Y座標 を表示することができる文字列を指定してあげればよさそうです。
hyouji という変数にrendouX(1. で設定した図形のx座標) + ":" + rendouY(1. で設定した図形のy座標)を代入し、hyouji をmes()に指定すれば表示ができそうですが、Lua言語の文字列結合は 「+」 ではなく「 .. 」で行います。その為

rendouX .. ":" .. rendouY 

と記述すると文字列結合が行えます。これをhyoujiに代入してmes()に指定します

f:id:t-kurashima:20210108130426p:plain

3.動作確認

現在、タイムライン上には、1.のスクリプト制御を付与した図形オブジェクト と 2.のテキストオブジェクトが存在します。

f:id:t-kurashima:20210108130450p:plain

これで図形オブジェクトを動かすと、テキストが動的に X座標 : Y座標 を表示します。

f:id:t-kurashima:20210108130703g:plain

感想

スクリプト制御を用いると、連動系の動きをとても簡単に作成することができます。
今までオブジェクトに一つずつ手作業でパラメーター調整していた苦労ともオサラバです。

最後に

Holmesはエンジニア・デザイナーを募集しています。 興味がある方はぜひこちらからご連絡ください!

lab.holmescloud.com

lab.holmescloud.com