この記事は Holmes Advent Calendar 2020 - Qiita 24 日目の記事です。
Holmesの倉島です。趣味でAviUtlというツールを用いて映像編集を行なっています。この度、このAviUtlの機能の一つ「スクリプト制御」に触れたので自身の使用例を紹介したいと思います。
AviUtlとは
フリーの映像編集ソフトで、有志によるプラグイン開発等で高い拡張性が特徴です。
AviUtlについて詳しく解説されている記事があったので詳細はこちら。 aviutl.info
スクリプト制御とは
AviUtlのスクリプト(動作・エフェクト等を操作する効果)はLua言語で書かれています。
スクリプト制御はAviUtlの機能の一つで、Lua言語を直接記述して映像(図形やテキスト等のオブジェクト)を操作することができる機能です。
実践
例:図形オブジェクトが動くのと連動してX,Y座標をテキストで表示させる。 下記画像の右下のようなテキストを作成します。(X座標 : Y座標)
1. 連動させたい図形オブジェクトにスクリプト制御を付与
図形オブジェクトにスクリプト制御を付与し、入力欄に
rendouX = obj.x rendouY = obj.y
と入力。
obj.x で図形オブジェクトのx座標を、obj.yでy座標を取得することができ、それらの値をrendouX,rendouYという変数に代入します。
Luaでは変数名の前に修飾詞を入力しない場合はグローバル変数扱いになります。
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()に指定します
3.動作確認
現在、タイムライン上には、1.のスクリプト制御を付与した図形オブジェクト と 2.のテキストオブジェクトが存在します。
これで図形オブジェクトを動かすと、テキストが動的に X座標 : Y座標
を表示します。
感想
スクリプト制御を用いると、連動系の動きをとても簡単に作成することができます。
今までオブジェクトに一つずつ手作業でパラメーター調整していた苦労ともオサラバです。
最後に
Holmesはエンジニア・デザイナーを募集しています。 興味がある方はぜひこちらからご連絡ください!