制限事項とトラブル
実行に関する制限
- タイムアウト 5 秒: 1 フレームのスクリプト実行が 5 秒を超えると中断され、そのフレームは 元の映像のままになります。無限ループや極端に重い処理に注意してください。
- フレーム間で状態は保持されない: 組み込み以外のグローバル変数は毎フレームリセットされます。
時間変化は
timeやobj.tから計算します。フレームやアイテムをまたいで値を 共有したい場合はscene.set()/scene.get()を使ってください。 - ファイルアクセス不可:
require・dofile・ioなどは使えません。 - 使えない標準ライブラリ:
io・os・debug・coroutine・package・ffiは無効です(標準ライブラリ)。 obj.getaudioが 1 回で取得できるデータ数は最大 1024 個です。取得できない場合は データ数 0 を返し、エラーにはなりません。
乱数について
math.random の結果はフレームごとに決まります。シードの仕組みは
標準ライブラリの math で説明しています。
オブジェクトやフレームに対して安定した乱数が欲しいときは、
anim.rand や anim.noise、
obj.rand を使ってください。
非対応の機能
obj.mes()など、本ドキュメントに記載のない AviUtl 関数は対応していません。obj.effectは、AviUtl/AviUtl2 互換マップに宣言したエフェクト名と、YMM4 に読み込まれている映像エフェクトの名前・キーワードを解決します。 名前が見つからない・適用に失敗した場合は、そのフレームでは元の映像がそのまま使われます。 互換マップが対応するエフェクト名の一覧はobj の関数を参照してください。
エラー表示
構文エラー・実行時エラー・タイムアウトが起きると、スクリプトエディタの該当行に赤い波線で 警告が表示されます。まずはエラーメッセージと行番号を確認してください。
困ったときは
| 症状 | 確認すること |
|---|---|
| スクリプトを書いても見た目が変わらない | 値を obj に代入しているか(グローバル変数に入れても反映されません)。
例: obj.x = ...。読み取り専用メンバーに代入していないか。 |
| トラックバーや色が表示されない | 指定子や使用状況によって表示が決まります。パラメータ指定子 の表示条件を確認してください。 |
| 前のフレームの値が消える | 仕様です。グローバル変数はフレーム間で保持されません。
持ち越したい値は scene.set() / scene.get() で共有してください。 |
| 処理が中断される / フレームが描画されない | 5 秒のタイムアウトに達している可能性があります。ループ回数を減らすか、 ピクセル処理を カーネルやネイティブに任せられる形にしてください。 |
--!native を指定しても速くならない | プラグインの隣に native フォルダが配置されていないと MoonSharp で実行されます。
配置を確認してください(ログに一度だけ警告が出ます)。 |
| GPU でわずかに結果が違う | GPU カーネルは float32 精度です。厳密一致が必要なら CPU カーネルかネイティブを使ってください。 |
Lua スクリプト for YMM4 / MIT License / https://github.com/routersys/YMM4-LuaScript