requireのパスあれこれ

Aviutl拡張編集スクリプトで外部LuaファイルやCのdllをrequireして使うと、
時に高速化を図れたり、複数のスクリプトで関数や処理系の使い回しができる。

module("addmodule", package.seeall)
add = function(v1,v2)
    return v1+v2
end
local addm = require "addmodule"
local a = addm.add(1,2)
debug_print(a)  --3 が出力される

続きを読む «requireのパスあれこれ»

Aviutl音声データの中間出力

少し前に、Aviutlで音声波形の後読み・先読みをするには、

  1. 一度録音専用スクリプトで全フレームの音声データを中間ファイルに書き出し、
  2. 描画はそのデータをもとにすればいいじゃない!

的なことを言ったが、その際に生じるLuaのファイル入出力に関する不都合について。

続きを読む «Aviutl音声データの中間出力»

Luaのテーブルバッファ長

Luaのテーブルはバッファサイズが変更されるたびに、アクセスを高速化するべくハッシュ木を作り直すらしい。

なので、空のテーブルを宣言してfor文か何かで1つずつキーと値を入れていくような処理は若干パフォーマンスが落ちる。要素数があらかじめわかっている状況では宣言時にまとめて確保しておいた方がいいらしい。

--こっちより
local mytable = {}
mytable[1]=1 mytable[2]=2 mytable[3]=3

--こっちの方がいい
local mytable = {nil, nil, nil}
mytable[1]=1 mytable[2]=2 mytable[3]=3

Aviutlでスクリプト組む時に気にした方がいいのかな?と思って実験。

続きを読む «Luaのテーブルバッファ長»

極座標音声波形3D【Aviutl拡張編集スクリプト】

極座標音声波形その1

すでに誰かが作ってそうですが、こんな感じで、今流行りの音声波形の極座標変換を3次元空間に立体的に描画するスクリプトを作ってみました。

続きを読む «極座標音声波形3D【Aviutl拡張編集スクリプト】»

Aviutl拡張編集スクリプトでの音声波形の先読み方法

音声データを使ったスクリプトを作っていると、音声の先読みをしたい場合がある。

急激な変化を避けるため、音量が大きくなる時は数フレーム前から徐々に大きくさせたいとか。

または、上から落ちてきた滴が水面に着水する瞬間、音が鳴っているような効果を作りたいとか。この場合、音量が一定値を超える(=水面に着水する)タイミングを先読みして、その数秒前から落ちる滴を描画する必要がある。(こういったエフェクトはスクリプトに頼らず手作業の方がいいのかもしれないが)

拡張編集スクリプトで用意された関数を使うだけでは音声データの直接的な先読みは出来ないため、実現しようとすると一工夫必要になる。以下思いついた方法をつらつらとメモ。

なお、アイデアだけで試していない部分も多い。

続きを読む «Aviutl拡張編集スクリプトでの音声波形の先読み方法»

Aviutl拡張編集スクリプトで音声データを次フレームに引き継ぐ

最近Aviutlのスクリプトをちょくちょく弄っている。といっても画像処理のプログラムはやったことないため、まだまだ子供騙しの域を出ない。

Aviutlの拡張編集は、自分でスクリプトを書いて、動画に好きなエフェクトをかけたりオブジェクトを配置したり出来る。音声データを取得できるので、音声と連動させたエフェクトもアイデア次第で作ることが出来る。

その中で、音声データを引き継ぐ方法について考えたのでメモ。

続きを読む «Aviutl拡張編集スクリプトで音声データを次フレームに引き継ぐ»