リモート開発メインのソフトウェア開発企業のエンジニアブログです

初心者向け:AviUtlでLuaスクリプト制御を行う方法

最近AviUtlという動画編集ソフトでYouTube向けのショート動画を作成することに凝っています。

あらかじめ用意された機能でも満足に編集はできていますが、もっと自分の思う通りに編集ができればいいな…と思っていました。

そんな時にAviUtlは動画内のオブジェクトをLua言語で制御できると知ったので、色々と調べてみました。調べた内容を備忘録としてエンジニアブログにまとめようと思います。私と同じようなAviUtlの初学者の方向けの参考になれば幸いです。

AviUtlとは?

AviUtl(エーブイアイ・ユーティーエル)は、Windows向けの無料動画編集ソフトです。

シンプルなインターフェースながら高機能で、カット編集や動画・画像・音声の合成、速度変更、色調補正など基本的な編集作業は一通りこなせます​。

特に優れているのはその拡張性で、有志が作成したプラグインを追加することでエフェクト効果(モザイク、ブラー、歪み、アニメーション効果など)をいくらでも増やすことができます。AviUtl本体に「拡張編集プラグイン」を導入すれば高度なタイムライン編集が可能になり、さらにユーザーがLuaスクリプトを用いて機能拡張することもできます。

つまりスクリプトによる拡張により、自分好みのエフェクトや自動処理をAviUtlに追加できるのです。

Lua言語を使用したスクリプト制御とは?

Lua(ルア)は軽量でシンプルなスクリプト言語の一つで、組み込み用途によく使われます。AviUtlの拡張編集プラグインではこのLua(バージョン5.1)が採用されており、AviUtl上の図形やテキストなど全ての「オブジェクト」をプログラミング的に操作できます。

この仕組みを一般に「スクリプト制御」と呼び、タイムライン上のオブジェクトに対してコードを書くことで、通常のエフェクト機能にはない柔軟な動きを実現したり、複数の効果を組み合わせた自作エフェクトを作成できるようになります。

Luaによるスクリプト制御で具体的に何ができるのかというと、大きく次のような活用が可能です。

  • エフェクト制御・拡張:作のアニメーション効果やフィルタ効果をプログラムとして記述し、新しいエフェクトとしてAviUtlに追加できます。たとえば「特定の座標にオブジェクトを円運動させる効果」や「音声に連動して文字を光らせる効果」など、アイデア次第で独自エフェクトを作成可能です。作ったスクリプトはファイルとして他のユーザーに配布することもできます。
  • 自動処理・細かな制御:通常の手動操作(中間点の設定など)では難しいような細かい制御や自動化ができます​。例えばオブジェクトの動きを数式で計算してスムーズに変化させたり、複雑な連携動作をワンタッチで適用する、といったことが可能になります。
  • GUI拡張:Luaスクリプトを外部スクリプトファイルとして導入すると、AviUtlのエフェクトメニューに新しい項目が追加されます。拡張編集プラグインでは、拡張子によってスクリプトの種類が決まっており、たとえば.anmファイルなら「アニメーション効果」として、.objファイルなら「カスタムオブジェクト」としてメニューに表示されます​このようにスクリプトを導入することで、編集画面のGUI上に新たな効果やオブジェクトの選択肢が増える仕組みになっています。
Moba Pro

実際にスクリプトを作成してAviUtlに導入する方法

それでは、Luaスクリプトを自作してAviUtlに組み込む基本的な手順を説明します。

(1) Luaスクリプトファイルの作成:

まずはテキストエディタで新しいファイルを作成し、Luaコードを書いていきます。AviUtlのスクリプトでは、オブジェクトの各種パラメータにアクセスするための特殊な変数や関数が用意されています。例えば、現在のオブジェクトの経過時間はobj.timeで取得でき、オブジェクトの位置X座標はobj.xで設定できます。スクリプト内ではこうした変数を使ってオブジェクトを動かしたり、透明度(アルファ値)を変えたりします。

また、スクリプトファイルの先頭ではトラックバー(パラメータ)の定義が可能です。--trackN:名前, 最小値, 最大値, 初期値, (刻み)という形式でコメントを書くと、エフェクトの設定ダイアログにスライダー(トラックバー)やチェックボックスを追加できます​。

例えば次のように記述すると、スクリプトに「Speed」という名前のトラックバーを追加できます。

--track0:Speed, 0, 10, 2, 0.1 -- Speedトラックバー(最小0~最大10、初期値2、刻み0.1)

この例ではobj.track0でトラックバーの値(Speed)を参照でき、ユーザーがGUI上でこの値を調整するとスクリプト内の処理に反映されます​。必要に応じて--track1:...と複数のパラメータを定義することも可能です。

スクリプトファイルの拡張子は、作成したい効果の種類によって決めます。

  • .anm – アニメーション効果(オブジェクトに適用する動きのエフェクト)
  • .obj – カスタムオブジェクト(独自オブジェクトの生成。図形描画など)
  • .scn – シーンチェンジ(場面切り替え効果)
  • .cam – カメラ制御用スクリプト(カメラオブジェクト専用)
  • .tra – 時間制御(タイムラインの時間操作系)

例えばオブジェクトの動きを制御するアニメーション効果を作りたい場合は、.anm拡張子で保存します。ファイル名は半角英数字で分かりやすいものにしましょう(日本語名は文字化けの原因になるため避けます)。

文字コードはShift_JIS (Windows-31J)、改行コードはCR+LFで保存してください​。AviUtlのスクリプト読み込みはこの文字コードに依存しており、UTF-8やLF改行では正しく動作しない場合があります​。エディタの設定を確認し、SJIS/CRLFで保存することが重要です。

(2) AviUtlのスクリプトフォルダに配置

作成したLuaスクリプトファイルをAviUtlに認識させるには、所定のフォルダに配置します。AviUtlのインストールフォルダ内に「plugins\script\」というフォルダが必要です​。デフォルトでは存在しない場合もあるので、その場合は自分で作成してください​。

先ほど作成したスクリプトファイル(例: MyEffect.anm)をこのscriptフォルダにコピーまたは移動します。​複数のスクリプトを管理する場合は、scriptフォルダ内にサブフォルダを作って分類することもできます。​(そのフォルダ単位でAviUtl側に表示をまとめることができます)。

(3) スクリプトの読み込みと適用

スクリプトファイルを配置したら、AviUtlを起動(または再起動)します。正常に読み込まれていれば、拡張編集タイムライン上のエフェクト追加メニューに新しい項目が追加されています。例えば.anmファイルなら「アニメーション効果」の一覧にスクリプト名が現れます。カスタムオブジェクト(.obj)の場合は、タイムラインの「メディアオブジェクト追加」から「カスタムオブジェクト」を選ぶ際にスクリプト名がリストに表示されます。

追加したいスクリプト効果を選択すると、そのオブジェクトに対してスクリプト制御が適用されます​。もしAviUtl起動中にスクリプトを追加・変更した場合は、AviUtlメニューの「編集」→「拡張編集」→「キャッシュを破棄」(ショートカットF5)を実行するとスクリプトの再読み込みができます。新しいエフェクトがメニューに現れない時やスクリプトを更新した時は、この操作で反映させましょう。

スクリプトファイルの作成例(エフェクト制御)

実際にLuaスクリプトを用いてオブジェクトを制御する具体例を見てみましょう。ここでは「指定した半径でオブジェクトを自動で円運動させる」シンプルなアニメーション効果スクリプトを作成します。オブジェクトに適用すると、手動で中間点を打たなくてもオブジェクトがぐるぐると円形に移動するようになります。

  • スクリプトコード例:AutoCircle.anm(アニメーション効果スクリプト)
--track0:Radius, 0, 500, 100         -- 半径(ピクセル)
--track1:Speed, 0, 10, 2, 0.1         -- 回転速度(度/フレーム)

local radius = obj.track0
local speed = obj.track1
local deg = obj.frame * speed   -- フレームごとにspeed分だけ回転
local rad = math.rad(deg)       -- 度からラジアンに変換

-- オフセットを使って、元の位置(obj.x, obj.y)を保持したまま円運動を実現
obj.ox = radius * math.sin(rad)
obj.oy = -radius * math.cos(rad)

上記のコードを順に解説します。

  • --track0:Radius, 0, 500, 100 -- 半径(ピクセル)
    • AviUtlのトラックバー設定です。「Radius」という名前のトラックバーを定義しており、値の範囲は0~500、初期値は100(ピクセル単位)です。
  • --track1:Speed, 0, 10, 2, 0.1 -- 回転速度(度/フレーム)
    • 同様に、もう1つのトラックバーを定義しています。「Speed」という名前で、値の範囲は0~10、初期値は2、増分は0.1となっており、これは1フレームあたりの回転角度(度単位)を指定します。
  • local radius = obj.track0
    • トラックバー「Radius」の値を取得し、変数radiusに代入します。これにより、ユーザーが設定した円の半径(ピクセル)がradiusに格納されます。
  • local speed = obj.track1
    • 同様に、トラックバー「Speed」の値を取得し、変数speedに代入します。これにより、1フレームあたりの回転速度(度)がspeedに格納されます。
  • local deg = obj.frame * speed -- フレームごとにspeed分だけ回転
    • 現在のフレーム数(obj.frame)に回転速度を掛け、累積回転角(度単位)を求めます。つまり、各フレームで「speed」度ずつ角度が増加していくため、オブジェクトは徐々に回転します。
  • local rad = math.rad(deg) -- 度からラジアンに変換
    • 得られた角度(度)をmath.rad関数を使ってラジアンに変換し、変数radに格納します。Luaの三角関数(math.sinmath.cos)はラジアン単位を使用するため、この変換が必要です。
  • obj.ox = radius * math.sin(rad)
    • X方向のオフセットを計算しています。ラジアン角の正弦(math.sin(rad))に半径を掛けることで、円のX軸上の変位が求められます。
  • obj.oy = -radius * math.cos(rad)
    • Y方向のオフセットを計算しています。ラジアン角の余弦(math.cos(rad))に半径を掛け、さらに符号を反転することで、AviUtlのY軸(通常下方向が正)の動きに合わせた円のY軸上の変位を求めています。

このスクリプトを保存(ファイル名例: AutoCircle.anm)してAviUtlのscriptフォルダに入れ、AviUtlを起動すると、「アニメーション効果」の中に「AutoCircle」という項目が追加されます(ファイル名がそのままエフェクト名になります)。

任意のオブジェクトにこの効果を適用し、トラックバーでRadiusやSpeedを調整してみてください。オブジェクトが自動で円運動を始めるはずです。

このように、Luaスクリプトではコード次第で自在にオブジェクトの挙動をコントロールできます。

他にもobj.effect()という関数を使えば、スクリプト内から特定のフィルタ効果を動的に適用することも可能です(例: obj.effect("色調補正", "明るさ", 50) と書けばそのオブジェクトに明るさ+50の補正をかける)。さらにカスタムオブジェクトスクリプト(.obj)であれば、obj.draw()obj.drawpoly()等の描画用関数を使って独自の図形描画を行い、新しいオブジェクトそのものを作り出すこともできます。まずは簡単な動きの制御から試し、徐々に高度なスクリプトへ挑戦してみましょう。

まとめと次のステップ

今回は初心者向けに、AviUtlでLuaスクリプトを使ってエフェクト制御を行う方法を解説しました。スクリプトを活用すれば、手作業では困難な凝った演出や作業の自動化が実現できます。例えば、音楽のBPMに同期して映像エフェクトを変化させたり、複数オブジェクトの動きを連動させたりといった応用も可能です。実際、ネット上には有志が公開している様々なスクリプトがありますので、興味があれば探してみると良いでしょう。導入したスクリプトのコードを読んでみることで、Luaを使った高度なテクニックやアイデアを学ぶこともできます。

次のステップとしては、まずAviUtl公式のスクリプトマニュアルである「lua.txt」に目を通してみましょう。このファイルは拡張編集プラグインに同梱されており、スクリプト制御で使用できる変数や関数の一覧・説明が記載されています​。

併せて、ユーザーがまとめた非公式の情報源も参考になります。例えばAviUtlスクリプトWikiには豊富なサンプルやTipsが掲載されています​。ニコニコ動画のユーザー記事やQiita記事など、先人の解説もインターネット上で見つけることができます。困ったときは質問掲示板やフォーラムで相談するのも有効です。同じAviUtlユーザーのコミュニティは活発で、スクリプトに関するQ&Aも多く蓄積されています。

最初は戸惑うかもしれませんが、Lua自体は文法がシンプルで習得しやすい言語ですし、AviUtlのスクリプト機能も基本を押さえれば奥深い表現が可能です。ぜひ少しずつコードを書いて試し、動画編集の可能性を広げてみてください。

あなたのアイデア次第で、AviUtlは無限にパワーアップしていきます!​

参考資料・リンク:

公式ドキュメント「lua.txt」​

AviUtlスクリプトWiki​ https://aviutlscript.wiki.fc2.com/

AviUtlの使い方解説サイト(AviUtlの易しい使い方 https://aviutl.info/ など)

ユーザーコミュニティフォーラム 等

← 前の投稿

久しぶりに戻った案件でのSSHエラーの話

次の投稿 →

APNs Token Authentication の新機能「Topic-specific keys」を試してみる

コメントを残す