【AviUtl】スクリプト制御 第1回【拡張編集】

AA2014000253

スクリプト制御は、追加したオブジェクトをスクリプトで制御することができるフィルタ効果。スクリプト制御にはオブジェクトを制御するためのAviUtlの変数と関数が用意されており、Lua言語によって制御できる。

 

∩( ・ω・)∩ イミフメイ・・・ 

 

わかりやすくいうと、AviUtlの変数や関数によって取得した値を、Lua言語の法則に沿って計算させ、その結果をまたAviUtlの変数や関数に反映させると、色々なことができるかもね!ということ。(……多分)

なので、スクリプト制御を使うためには、幾つかのAviUtlの変数と関数、Lua言語の基本的な構文は押さえておく必要がある。ちなみに何故、『幾つか』のなのかというと、いきなり全てを把握してからスクリプト制御を使う……というのは無理があるから。

まずはちょっとずつ手を伸ばして、できる範囲を広げていくのがいいかと。AviUtlを使い始めて、まずはXの直線移動から……というのと同じ感じ。

変数と関数

  • 変数:中身(値)を入れ変えることのできる『箱』のようなもの。
  • 関数:特定の結果を出す機能を持つ『製造機』のようなもの。

 

例えば、時間の値を入れるために『t』という変数を設定する。そして、『t』に『10』という値(中身)を与えたいときは『t=10』と表記する。文字を入れたいときは、『””』や『’’』で囲み、『t=”time”』とする。

また、AviUtl固有の変数というものがあり、それらは設定ダイアログのXYZや拡大率、透明度、オブジェクトの時間等と同様の意味を持つ。『obj.ox = 50』は『X:50』と同じ意味。

それから、変数に変数を入れることも可能で、『t=obj.time(オブジェクトの先頭からの経過時間)』や『t=totaltime(総時間)』、『obj.ox = obj.time』などとすることもできる。

 

関数はAviUtlの関数と、Luaの関数のふたつがあり、AviUtlの関数はAviUtlの変数同様にAviUtlに対応したもので、それぞれの関数に見合った結果を出してくれる。『obj.effect("色調補正","明るさ",30,"色相",180)』(色調補正フィルタと同じ)、『obj.rand(0,99,5,15)』(ランダム値を取得)など。

Luaの関数は一般的なプログラミング言語の一般的な機能を提供している。たとえば、math.piは円周率の定数、math.sin(60)math.sin(60*math.pi/180)は60度のサインの値を返す。

 

 

Lua言語の習得については必要とも言えるし、不要とも言える。よくできたスクリプトを作りたいのであれば必要だし、ちょっとした制御だけを試みるならば、各構文(ifやforなど)を覚えるだけでも使える。

いきなり全部を覚えるのは無理なので、少しずつ関数を覚えて、できる範囲を広げていくのが吉。

スクリプトの記述先

  1. テキストオブジェクトのテキスト入力欄に記述する。※
  2. スクリプト制御フィルタの入力欄に記述する。
  3. テキストオブジェクトの入力欄とスクリプト制御の入力欄の両方を使う。

 

スクリプトによる制御のパターンは主にこの3通り。ただし、これら以外にもファイルとして保存する(*.anm,*.obj,*.scn,*.camといった形式)ことも可能。

※ テキストオブジェクトのテキスト入力欄に記述するときは、制御文字<?~?>を使用して、その中に記述する。

記述先による記述方法の違い

  • テキストオブジェクト内:<? obj.mes(obj.time) ?>
  • スクリプト制御内:obj.ox = obj.time*10
  • 両方の場合:<? obj.mes(a) ?>(テキストオブジェクト内)、a = “あばば”(スクリプト制御内)、obj.ox = obj.time*10(スクリプト制御内)

 

※ obj.mes()関数は、テキストオブジェクト内でしか使用できず。

AviUtlの変数

  • obj.ox : 基準座標からの相対座標X
  • obj.oy : 基準座標からの相対座標Y
  • obj.oz : 基準座標からの相対座標Z

 

  • obj.rx : X軸回転角度(360.0で一回転)
  • obj.ry : Y軸回転角度(360.0で一回転)
  • obj.rz : Z軸回転角度(360.0で一回転)

 

  • obj.cx : 中心の相対座標X
  • obj.cy : 中心の相対座標Y
  • obj.cz : 中心の相対座標Z

 

  • obj.zoom : 拡大率(1.0=等倍)
  • obj.alpha : 不透明度(0.0~1.0/0.0=透明/1.0=不透明)
  • obj.aspect : アスペクト比(-1.0~1.0/プラス=横縮小/マイナス縦縮小)

 

  • obj.x : 表示基準座標X (ReadOnly)
  • obj.y : 表示基準座標Y (ReadOnly)
  • obj.z : 表示基準座標Z (ReadOnly)

 

  • obj.w : 画像サイズW (ReadOnly)
  • obj.h : 画像サイズH (ReadOnly)
  • obj.screen_w : スクリーンサイズW (ReadOnly)
  • obj.screen_h : スクリーンサイズH (ReadOnly)

 

  • obj.framerate : フレームレート (ReadOnly)
  • obj.frame : オブジェクト基準での現在のフレーム番号 (ReadOnly)
  • obj.time : オブジェクト基準での現在の時間(秒) (ReadOnly)
  • obj.totalframe : オブジェクトの総フレーム数 (ReadOnly)
  • obj.totaltime : オブジェクトの総時間(秒) (ReadOnly)

 

  • obj.layer : オブジェクトが配置されているレイヤー (ReadOnly)
  • obj.index : 複数オブジェクト時の番号 (ReadOnly) ※個別オブジェクト用
  • obj.num : 複数オブジェクト時の数(1=単体オブジェクト/0=不定) (ReadOnly) ※個別オブジェクト用

 

  • obj.track0 : トラックバー0の値 (ReadOnly) ※スクリプトファイル内のみ使用可
  • obj.track1 : トラックバー1の値 (ReadOnly) ※スクリプトファイル内のみ使用可
  • obj.track2 : トラックバー2の値 (ReadOnly) ※スクリプトファイル内のみ使用可
  • obj.track3 : トラックバー3の値 (ReadOnly) ※スクリプトファイル内のみ使用可
  • obj.check0 : チェックボックスの値 (ReadOnly) ※スクリプトファイル内のみ使用可

 

※ 拡張編集プラグインの圧縮ファイル内、Lua.txtからの引用

まずはAviUtlの変数を覚える

AviUtlの変数は、obj.xxxxxという形で表記され、変数の多くはオブジェクトの各要素に対応しているので、まずはこれを覚える。スクリプトによってオブジェクトを制御したい以上、AviUtlの変数の記憶は必須となる。

ちなみにxxxxxの部分が設定ダイアログのXYZや拡大率、透明度等に該当するので、obj.の部分に制御したいxxxxxの部分を足すというイメージで、設定ダイアログを思い出しながら使うと使いやすいはず。

 

以下、スクリプト制御内での記述サンプル
+++++++++++++++

obj.ox = 50
obj.oy = 150
obj.zoom=1.5

+++++++++++++++

x1 = 50
x2 = 100
x = x1 + x2

obj.ox = x

+++++++++++++++

obj.zoom = 0.1*obj.time

+++++++++++++++

20140521053340

ちなみにスクリプト制御がどんなものか簡単に実感したいのであれば、とりあえず『obj.zoom = 0.1*obj.time』のように時間経過で値が変化する『obj.time』や『obj.frame』といった変数を使ってみると、効果がわかりやすい。

 

 

 

関連記事
スポンサーサイト

0 Comments

Post a comment