Open16

aviutl メモ

ウサギウサギ

2023年1月7日。
WICFactory* の影響かわからないが
劇的に遅い lua から呼び出す DLL ができてしまった;;

lua から呼び出す DLL のどこが1回だけ呼ばれて
どこが毎フレーム呼び出されるか、確認した方がいい??

2023年1月9日。
ログテキスト、ログ画像、OutputDebugString() のどれも書き出さない設定で、WICFactory*(CoInitializeも)を使わない、DLL の release 版でほどほどの速度で動くようになった。

既存の問題。

  • 斜め射影描画のとき右端が欠ける。
  • 「ab😼cd 相当を指定した際に、レイアウトは確保されていたが、cd が表示されなかった」があったのだけれど、drawTextLayout()を使った付近から cd も表示されるようになった。解決??
ウサギウサギ

2023年1月14日。一般的なフォントのウェイト。
900 Black:
800 Extra Bold(Ultra Bold)
700 Bold: 太い。
500 Medium: 中くらい。見出しとか。
400 Normal:
Regular: MとLの中間の太さ。本文とか。
300 Light: 細い。本文とか。
200 Extra Light(Ultra Light):
100 Thin:

astro cat, U+1F431, U+200D, U+1F680
javascript '\u{1f431}\u200d\u{1f680}'
{1F431}{200D}{1F680}
サロゲートで分解, 0xd83d, 0xdc31,0x200D,0xd83d, 0xde80

var a = '\u{1f431}'; var b = [a[0], a[1]]; b.map(v => 'u' + v.charCodeAt(0).toString(16)).join('')
ウサギウサギ

2024-02-23: デバグ用メモ。
11レイヤー120フレームで増加後減って最後40MBぐらい増加してリーク。
1レイヤー1フレームで30KBぐらいリーク。80指定なのでARGBで25KBぐらい。
おおよそ1枚分リークしている。

ブロックが full userdata, ポインタが light userdata.

lua_newuserdata(L, datasize) で full を確保できる。
full は参照が消えると自動で消えるっぽい。

luaスタックにポインタがあるとき lua_touserdata(L, stackindex) で
userdataへのポインタ(void*)が得られる。

ウサギウサギ

2025-07-09: 2025-09-15追記。
多分beta1では--check@c0:チェック0,0がバグっててif c0 thenで判定すると常にtrueになる。
→バグってない。luaで0はfalsyではないので使用例説明の if (c0) then が間違っている。
サンプルのとおりc0 == 0で比較すると正しく動作する。

うちの環境だとdrawをたくさんするとdraw callのせいか、AviUtl1よりも激重になる。
→ドローコールのせいだった。一度に描画すると快適に。

環境によってはpipe32aui.exepipe32auo.exeの両方または
片方が消される。多分セキュリティ誤判定のせい。
beta9が最後のpipeバージョン。beta10からはpipeが廃止されて32bitDLLが動かない。

ウサギウサギ

2025-07-13: 2025-08-05 追記。AviUtl2 beta3
oip update preview がなくなっててビジーっぽく見える。ファイル出力ダイアログのところ変な文字が出てる。長さ0でない文字列にしたらそれが表示された。
AviUtl2と関係なくMessageBoxWのキャプションはつくけど、アイコンとテキストが見えない;;
0とyuy2はあるけどRGB32は無いかなあ。透過ありPNG出力が標準にはある。⇒beta3 連番では無さそう。

obj2はpremulti扱いになる。0,0,1.0, 0.25にして黒に重ねると暗い緑ではなく通常の緑に見える。

obj.getaudioした第三戻りのbufを#{buf}すると1になる。なんでだっけ...⇒そらそーだ。配列に1個だけbufが入ったものの個数だから。table.insert(t0, index, val)は複数引数ではなく1つ挿入。

cbufferはfloat val[256]ぐらいが限界に見える。floatで取ると256個だが、float4でも256個取れたので(float4へアラインされるらしい)、配列に1024個平たく書いてfloat4で順に取り出せる。

ウサギウサギ

2025-07-17: 2025-12-08 追記: AviUtl2 beta12 svgファイル図形
SVGファイルはフィル(fill)を対象に取る。線幅や色指定できるパスモードも欲しいなあ。width, height はだいたい無視されてviewBox -1 -1 2 2 とかすると移動される。viewBox無いとwidth, height無視して自動で幅が決まりサイズ大きくするとそこからは拡大されずに隙間ができる。
→この謎な動きはviewBox指定無しでwidth, heightだけ指定したときの動作で、viewBox指定したら期待通りずっとでかくなる。
fillで色を指定すると上書きされずにそのまま残る。グレースケール扱いしてくれたりはしない。色指定無いとaviutlから指定できる。角丸と線サイズはsvgには適用されないみたい。
viewBox="0 0 24 24"指定で左上が基準点になったりはしない。中央を取る。
currentColorにしても何か面白い動作はしない。
fill色指定無し(fill=""が存在しない)と、stroke-width, stroke指定有りが共存できる。stroke-linejoinもroundにできる。strokeはaviutlのサイズや色や角丸からの指定はできない感じ。
1ファイルの中ではfill指定存在と非存在は共存できない感じ。
一般的なsvgの話、zで閉じる対象はpath dの先頭ではなく,自然に有効先頭と閉じてくれる。
z は途中で複数呼び出せる。zで閉じないと目的地が一致しても閉じない(linejoinではなくlinecapになる)。

path 2つにしたらfill指定の存在する後ろのpathのfillをaviutlが色で上書きしたんだがw
path 2つ、fill無しだとどっちも色変えられた。

fill の通常色2つ以上だと固定色。1つだと変更対象。
fill="red" と fill="#f00" と fill="rgb(255,0,0)" は同じ色として扱われる。

使える。
xmlns:xlink="http://www.w3.org/1999/xlink"
<use xlink:href
fill="none"
linearGradient

使え無さそう。
text
mask
marker
pattern
animateTransform
rgba(255,0,0, 0.5) Chromeでは使えるがAviUtl2では使えない
transparent Chromeでは使えるがAviUtl2では使えない

色変更のfillは無指定または同一にして
色を固定したいfillはlinearGradientを使用するとよい。

figure, フルパスでファイルも指定できる。obj.getinfo('script_path') .. '\foo.svg' みたいに。

ウサギウサギ

2025-07-21: 2025-07-31 追記: AviUtl2 beta4
おっ、DXGI_FORMAT_R16G16B16A16_FLOATDXGI_FORMAT_R16G16B16A16_UNORM取れる!?

HF64でアルファ成分取れた~。念願の自然なアルファ成分考慮出力プラグインが実装できたよ。

ウサギウサギ

2025-08-05: AviUtl2 beta5
anm2実装中にtempbufferターゲットでdrawpoly({table})で変更できてない感じになるのだけれど、これはフィルタ効果だからなんだろうか;;
他のカスタムオブジェクトでは普通にdrawpoly({table})で反映しているんだけどなあ。

ウサギウサギ

2025-08-30: AviUtl2 beta9
マルチトラックに挑戦したい。
フラグを立てると set_track を呼びにくる。トラック数を回答する。
その後、video, audio 共に 0, 0 をセットしにくる。
その後で func_info_get を呼びにくる。
レイヤー1本でオーディオとビデオになるんだけれどこれでいいのか。
いやトラック数2以上を返しているのだけれど2個め以降のgetをどちらにもしにこない。
おおっと。設定の「トラック」を変更すると再び個数から問い合わせが来てset_trackでセットされる。えーとビデオとオーディオどっちも同じインデックスしかダメだったりする??
どうも2ch書き出すことが必要に見える。

ウサギウサギ

2025-08-31: 2025-09-15 追記: AviUtl2 beta11a

-- レイヤーに何も無いとき,ここが落ちるようになった;;
local ls = 'layer' .. tostring(layerNo)
local xOffset = obj.getvalue(ls .. '.x') or 0
local yOffset = obj.getvalue(ls .. '.y') or 0

ここ、やはり有効なオブジェクトのあるレイヤーでないと [ERROR] lua.pcall() 出るかも。

オブジェクト解像度が正のときだけ要求するようにするといいみたい。⇒自分自身のオブジェクトの話。

シーンチェンジのスクリプトレイヤーからシーンをカバー描画するために他の存在する+1レイヤーを参照するとAviUtl2が応答なしになる;; beta10, beta11
別レイヤーを参照せずファイルなりを使用すると固まらない。

四角形などの状態から result = obj.copybuffer('object', src) で result が false の場合に、そのまま w, h = obj.getpixel() すると w に function, h に number 0 が返る。
このとき、w > 0 とか判定すると関数と数値は比較できないよエラーになる。

数字の大きいレイヤーを参照するとループが発生する気がする。

ウサギウサギ

2025-09-11 AviUtl2 beta10

  • オフスクリーン描画はobj.draw()みたいなもの。
  • 「サイズ」という名称をつけたスライダーは特別扱いで拡大縮小ではなくプレビュー画面の操作に連動する。
  • computeshader で1回呼び出ししたときに三重ループで処理するとさすがに重くて30fpsプレビューできなかった。
  • 上の図形にクリッピング指定すると下をクリップする。クリッピングはプレビュー編集では色味が変えられている。実際の再生ではちゃんと正しい色味になる。
ウサギウサギ

2025-09-22: 2025-10-05 追記。AviUtl2 beta14
入力プラグイン。FLAG_TIME_TO_FRAMEってまだ存在しないのでは??
これで常時0を返せば静止画1枚入力時にずっとキャッシュ発動するのかと期待したのだけど。
⇒いやあった。INPUT_INFO のフラグとして存在して要求されたときに返すようにする。
このフラグを立てて常時0を返すと第0フレーム以外のビデオ内容を要求してこない。期待どおり。

ウサギウサギ

2025-09-25: AviUtl2 beta12
pixelshader の return にマイナス成分を入れると次の参照時にはマイナスではなくなってそう。(11aでは無くならずに維持される??) computeshader でマイナス成分を格納すると次の参照時にもマイナス値を参照できてそう。

ウサギウサギ

2025-09-29: AviUtl2 beta11a
Blender から1.0を超えた明るさの白を含む画像を16bit PNGで書き出して本体機能で取り込んでみたけど多分1.0でクリップされてる。

正統にはWICコーデックで実装してあげれば静止画読み込みに乗っかれるっぽいのだけれど他のアプリにも影響与えそうだし、COM実装めんどい。

ウサギウサギ

2025-12-02: AviUtl2 beta22
これまで触ってなかったけどグループ化便利だった。あと .object が [Object.0]じゃなくて[0]とか[0.0]とか.exoみたくなってて似てるから書き換え簡単そう。あとでやってみる。最終解像度変更はルートでないシーンで作画してルートで縮める運用になりそう。

ウサギウサギ

2025-12-07: AviUtl2系
最終リサイズ相当の実現方法。ルートでない作画用シーンで作画する。
ルートで期待する解像度に設定する。作画用シーンを置いてそのシーンオブジェクトにフィルタ効果のリサイズを追加する。変形→リサイズにある。ピクセル数を指定にチェックを入れて期待の解像度を指定する。あとはフレームバッファを置いてそこにフィルタを掛けたりするとよい。