アニメーション編集 for AviUtl †
スクリプトを読み込んで動画を編集するプラグインです。
座標や色などのパラメータにフレーム番号を含む数式を記述できるので動きなどを表現できます。
AviUtl0.99f以降に対応しています。
プラグインは画像と音声の両方を処理できます。
メニューにはアニメーション編集[Video]とアニメーション編集[Audio]が追加されます。
また、マルチスレッド(OpenMPを使用)にも対応しています。
読み込み動画のフォルダにanimation.txtを作成し、記述するとスクリプトに従って処理を行ないます。
animation.txtを編集した後は、再読込などをしなくても即時反映されます。
[ダウンロード]
設定画面 †
表示Bufのスライダーを動かすと各バッファ(buf[0]〜buf[9])の内容を確認できます。
通常は0を設定しておいてください。
設定画面から変数 a,b,c,d,u,v,x,y,z を設定できます。
スライダーの範囲は0〜4096になります。
クロマキー画像作成プラグイン †
入力支援用?プラグインをおまけに付けておきます。
指定範囲内、または範囲外の色を塗り潰してクロマキー合成用の画像またはマスク画像を作るプラグインです。
また、マウスクリックした場所の座標と色をポップアップダイアログで表示できます。
■更新履歴
2007.10.09 ver0.1
入力動画について †
DirectShow入力は正確な位置のフレームを取得できないことがあるのでなるべく使わないでください。
入力動画はHuffyuv + PCM音声などのフレーム間圧縮をしないコーデックで中間出力しておいたほうが良いです。
MPEG系などのフレーム間圧縮を行なうコーデックはフレーム単位でデコードが出来ないため処理が非常に遅くなります。
入力動画が出力動画よりも短くても animation.txt の範囲指定でフレームを追加することが出来ます。
素材は一本の動画にまとめておいて、範囲指定で必要な部分だけ出力するような使い方になると思います。
使用例 †
画像処理 †
1.5倍速再生
copyframe(0, f*1.5, 0,0,w,h, 0,0)
逆再生
copyframe(0, m-f, 0,0,w,h, 0,0)
10枚の連番静止画を各300枚ずつ表示
[0-2999]
copyframe(0, f/300,0,0,w,h,0,0)
ネガポジ反転
color(0, 0,0,w,h, -1,-1,-1, 4096,0,0)
徐々にモノトーンにする
[0-99]
color(0, 0,0,w,h, 1,1-g/n,1-g/n, 0,0,0)
[100-]
color(0, 0,0,w,h, 1,0,0, 0,0,0)
クロスフェード(f=600でシーン切り替えの場合)
[550-599]
copyframe(1, f+50, 0,0,w,h, 0,0)
alpha(1,0, 0,0,w,h, 0,0, g/n)
[600-]
copyframe(0, f+50, 0,0,w,h, 0,0)
テロップの挿入 (f=1000:テロップ画像)
[0-100]
copyframe(1, 1000, 0,0,w,h, 0,0)
copy2(1,0, 0,0,w,h, 0,0, 2048)
テキストテロップ表示(縁取り)
font2("MS 明朝",120, 0,1,0, 10, 2048,-2048,2048, 4096,-2048,2048)
text(0, w/2,h-120, 1, "文字列")
モザイク(設定画面を利用) 変数設定(a,b, c,d, u) = (横位置,縦位置, 幅,高さ, 細かさ)
mosaic(0,1, 0,0, w,h, 0,0, u*100/4096+1,u*100/4096+1)
copy(1,0, a*w/4096,b*h/4096, c*w/4096,d*h/4096, a*w/4096,b*h/4096)
画面を4分割してそれぞれに動画を表示
resize(0,1, 0,0,w,h, 0,0, w/2,h/2)
copyframe(0, f+100, 0,0,w,h, 0,0)
resize(0,1, 0,0,w,h, w/2,0, w/2,h/2)
copyframe(0, f+200, 0,0,w,h, 0,0)
resize(0,1, 0,0,w,h, 0,h/2, w/2,h/2)
copyframe(0, f+300, 0,0,w,h, 0,0)
resize(0,1, 0,0,w,h, w/2,h/2, w/2,h/2)
swapbuf()
残像効果 (buf[2]〜buf[9]はプラグイン内で書き換えない限り内容は保持されます)
[0-0]
copy(0,2, 0,0,w,h, 0,0)
[0-]
alpha(0,2, 0,0,w,h, 0,0, 0.1)
copy(2,0, 0,0,w,h, 0,0)
字幕消し
[0-0]
fill(8, 0,0, w,h, 0,0,0)
fill(8, w/8-10,h*7/8+5,w-w/4+20,h/16-10, 4096,0,0)
fill(8, w/8,h*7/8,w-w/4,h/16, 4096,0,0)
defocus(8,9, 0,h*3/4,w,h/4, 0,3*h/4, 30,10)
[0-]
defocus(0,1, 0,h*3/4,w,h/4, 0,h*3/4, 30)
alpha4(1,0,9, 0,h*3/4, w,h/4 ,0,h*3/4, 0,h*3/4)
音声処理 †
フェードイン
[0-99]
a_volume(0,g/n,(g+1)/n,0)
クロスフェード(f=600でシーン切り替えの場合)
[550-599]
a_copyframe(1, f+50)
a_volume(0,1-g/n,1-(g+1)/n,0)
a_volume(1,g/n,(g+1)/n,0)
a_blend(1,0)
[600-]
a_copyframe(0, f+50)
逆再生
a_copyframe(1,m-f)
a_reverse(1,0)
1.5倍速再生
a_copyframe2(0,f*1.5,(f+1)*1.5)
処理範囲指定 †
フレームの範囲指定([開始-終了])
この記述以降はこの範囲に対して処理を行ないます。終了フレームは省略可能。
終了フレームが総フレーム数より大きい場合は総フレームを追加します。
フェードイン+左右反転
[0-99]
color(0, 0,0,w,h, g/n,g/n,g/n, 0,0,0)
[0-]
fliph(0,1,0,0,w,h,0,0)
swapbuf()
また、処理をするかどうかの判定に数式を使用できます。
数式の場合は""で囲ってください。
条件式が真になる場合処理をするようになります。
使用例
# A-Bの範囲
["f>=A && f<=B"]
# 5フレームごとに処理を切り替え、f=100以降
["f%10<5 && f>=100"]
…
["f%10>=5 && f>=100"]
…
フレーム番号について †
フレーム番号は0から始まりますが、AviUtlの初期状態では+1されて1から表示されるようになっています。
システム初期設定で0から表示するように設定することが出来ます。
画像処理 †
描画を行なうスクリーンはbuf[0]〜buf[9]まで用意されており、buf[0]が入出力される画像、
buf[1]〜buf[9]は作業用の一時画像置き場になります。
バッファ間で処理する関数は同一バッファ内で処理前と処理後の領域が重なる場合は正常動作しません。
座標は領域外でもそれなりに処理します。
なるべく処理結果は別バッファに置いてcopy()やswapbuf()などで書き戻してください。
色指定の範囲 †
- YCbCr指定
輝度(Y)範囲:0〜4096
色差青(Cb)範囲:-2048〜2048
色差赤(Cr)範囲:-2048〜2048
- RGB指定
赤色(R)範囲:0〜4096
緑色(G)範囲:0〜4096
青色(B)範囲:0〜4096
処理関数 †
- copyframe(buf, frame, x0,y0,w,h, x1,y1)
フレームコピー
frameで指定した番号のフレームをbufにコピーします。
frameの小数点以下は切り捨て。
コピー元:x0,y0,w(幅),h(高さ)
コピー先:x1,y1
- swapbuf()
バッファ入れ替え
buf[0]とbuf[1]を入れ替えます。
ポインタの入れ替えだけなので処理は速いです。
buf[0]とbuf[1]はAviUtl内の編集領域です。
buf[2]〜buf[9]はプラグイン内の編集領域なのでプラグイン内で書き換えるまで内容は保持されます。
- dispsize(w,h)
画像サイズ変更
画像サイズを設定します。
全フレームに固定値を割り当てないと正常出力できません。
AviUtlの実際のスクリーンサイズはシステム初期設定の設定値です。
それに有効な画像サイズを割り当てて使用します。
そのため表示範囲外にも画像を置けます。
- color(buf, x,y,w,h, Y0,Cb0,Cr0, Y1,Cb1,Cr1)
色変換
(Y, Cb, Cr) = (Y*Y0+Y1, Cb*Cb0+C1, Cr*Cr0+C1) に変換します。
- color_rgb(buf, x,y,w,h, R0,G0,B0, R1,G1,B1)
色変換(RGB)
(R, G, B) = (R*R0+R1, G*G0+G1, B*B0+B1) に変換します。
- fill(buf, x,y,w,h, Y,Cb,Cr)
塗りつぶし
(Y,Cb,Cr)の色で塗りつぶします。
- fill_rgb(buf, x,y,w,h, R,G,B)
塗りつぶし(RGB)
(R,G,B)の色で塗りつぶします。
- fill2(buf0,buf1, x0,y0,w,h, Y0,Cb0,Cr0, x1,y1, Y1)
塗りつぶし
buf0に対してbuf1をマスク画像として塗りつぶしを行います。
buf1のY1(輝度)以下の色は透過色として扱います。
- fill2_rgb(buf0,buf1, x0,y0,w,h, R,G,B, x1,y1, Y1)
塗りつぶし(RGB)
buf0に対してbuf1をマスク画像として塗りつぶしを行います。
buf1のY1(輝度)以下の色は透過色として扱います。
- ellipse(buf, x0,y0,a,b, Y,Cb,Cr)
楕円塗りつぶし
中心(x0,y0), x軸方向半径 a, y軸方向半径 b
- ellipse_rgb(buf, x0,y0,a,b, R,G,B)
楕円塗りつぶし(RGB)
中心(x0,y0), x軸方向半径 a, y軸方向半径 b
- mkmask(buf0,buf1, x0,y0,w,h, x1,y1, Y0,Cb0,Cr0, Y1,Cb1,Cr1, Y2,Y3)
マスク作成
buf0の画像からbuf1にマスク画像を作成します。
(Y0〜Y1,Cb0〜Cb1,Cr0〜Cr1)の範囲の色は(Y2,0,0)それ以外は(Y3,0,0)の色に変換します。
範囲指定:(Y0,Cb0,Cr0) < (Y1,Cb1,Cr1)
クロマキー合成用のマスク作成などに使えます。
- mkmask_rgb(buf0,buf1, x0,y0,w,h, x1,y1, R0,G0,B0, R1,G1,B1, Y2,Y3)
マスク作成(RGB)
buf0の画像からbuf1にマスク画像を作成します。
(R0〜R1,G0〜G1,B0〜B1)の範囲の色は(Y2,Y2,Y2)それ以外は(Y3,Y3,Y3)の色に変換します。
- copy(buf0,buf1, x0,y0,w,h, x1,y1)
領域コピー
buf0からbuf1に領域コピーします。
- copy2(buf0,buf1, x0,y0,w,h, x1,y1, Y0)
領域コピー
buf0からbuf1へ領域コピーします。
buf0のY0以下の色は透過色として扱います。
テロップの挿入などに便利かも。
- copy3(buf0,buf1,buf2, x0,y0,w,h, x1,y1, x2,y2, Y2)
領域コピー
buf0からbuf1に領域コピーを行います。
buf2をマスク画像としてY2以下を透過色として扱います。
クロマキー合成などに使えます。
- alpha(buf0,buf1, x0,y0,w,h, x1,y1, alpha)
アルファ合成
buf0をbuf1に半透明で重ね合わせを行ないます。
透明度alpha:0〜1(透明〜不透明)
- alpha2(buf0,buf1, x0,y0,w,h, x1,y1 ,alpha, Y0)
アルファ合成
buf0をbuf1に半透明で重ね合わせを行ないます。
buf0のY0以下の輝度は透過色として扱います。
テロップなどの合成に使えるかも。
- alpha3(buf0,buf1,buf2, x0,y0,w,h, x1,y1, x2,y2, alpha, Y2)
アルファ合成
buf0をbuf1に半透明で重ね合わせを行ないます。
buf2をマスク画像としてY2以下の輝度は透過色として扱います。
- alpha4(buf0,buf1,buf2, x0,y0,w,h ,x1,y1, x2,y2)
アルファ合成
buf0をbuf1に半透明で重ね合わせを行ないます。
buf2をマスク画像として各画素の輝度Yを透過率として扱います。
輝度Y:0〜4096(透明〜不透明)
- flipv(buf0,buf1, x0,y0,w,h, x1,y1)
上下反転
buf0の上下反転画像をbuf1に作成します。
- fliph(buf0,buf1, x0,y0,w,h, x1,y1)
左右反転
buf0の左右反転画像をbuf1に作成します。
- resize(buf0,buf1, x0,y0,w0,h0, x1,y1,w1,h1)
リサイズ
buf0のリサイズ画像をbuf1に作成します。
リサイズと回転はバイリニア補完しています。
- rotate(buf0,buf1, rad, x0,y0,w,h ,x1,y1)
回転
buf0の回転画像をbuf1に作成します。
角度:rad
回転すると縦横はみ出しますが、はみ出した部分も描画します。
- mosaic(buf0,buf1, x0,y0,w,h, x1,y1, nw,nh)
モザイク
buf0のモザイク画像をbuf1に作成します。
横画素数:nw
縦画素数:nh
ブロックサイズnw×nhの画像になります。
- defocus(buf0,buf1, x0,y0,w,h, x1,y1, r)
ガウスぼかし
buf0のぼかし画像をbuf1に作成します。
半径:r
- diffuse(buf0,buf1, x0,y0,w,h,x1,y1, nw,nh)
画素拡散
各画素の位置をnw×nhの範囲に拡散します。
- gamma(buf, x,y,w,h, Y_g,Cb_g,Cr_g)
ガンマ補正
ガンマ値(Y_g,Cb_g,Cr_g) 値は1.0で元画像と同じ。
- posterize(buf, x,y,w,h, nY,nCb,nCr)
ポスタライズ
階調数を制限します。
nY,nCb,nCr:階調数。
- posterize_rgb(buf, x,y,w,h, nR,nG,nB)
ポスタライズ(RGB)
階調数を制限します。
nR,nG,nB:階調数。
- font("fname" ,size ,bold, italic, uline, Y,Cb,Cr)
フォント設定
fname: フォント名("MS 明朝"など)
size:フォントサイズ(高さ)
bold: 0:通常 1:太字
italic: 0:通常 1:斜体文字
uline: 0:通常 1:下線付加
Y,Cb,Cr: フォントの色
- font_rgb("fname" ,size ,bold, italic, uline, R,G,B)
フォント設定(RGB)
fname: フォント名("MS 明朝"など)
size:フォントサイズ(高さ)
bold: 0:通常 1:太字
italic: 0:通常 1:斜体文字
uline: 0:通常 1:下線付加
R,G,B: フォントの色
- font2("fname" ,size ,bold, italic, uline, ,width, Y0,Cb0,Cr0, Y1,Cb1,Cr1)
縁取りフォント設定
fname: フォント名("MS 明朝"など)
size:フォントサイズ(高さ)
bold: 0:通常 1:太字
italic: 0:通常 1:斜体文字
uline: 0:通常 1:下線付加
width: 縁取りの幅
Y0,Cb0,Cr0: フォントの色
Y1,Cb1,Cr1: 縁取りの色
- font2_rgb("fname" ,size ,bold, italic, uline, ,width, R0,G0,B0, R1,G1,B1)
縁取りフォント設定(RGB)
fname: フォント名("MS 明朝"など)
size:フォントサイズ(高さ)
bold: 0:通常 1:太字
italic: 0:通常 1:斜体文字
uline: 0:通常 1:下線付加
width: 縁取りの幅
R0,G0,B0: フォントの色
R1,G1,B1: 縁取りの色
- text(buf, x,y, align, "text")
テキスト出力
align: 0:左詰め 1:中央 2:右詰め
textで指定した文字列を描画します。
フォントはfont()またはfont2()で設定してください。
記号'"'は'\"'と置き換えて書いてください。
- text2(buf, x,y, align, "text", p1, p2, p3, ....)
テキスト出力
align: 0:左詰め 1:中央 2:右詰め
textで指定した文字列をprintfの書式で描画します。
引数は実数扱いで最大15個までです。
ex. text2(0, w/2,h/2, 1, "A=%8.2f B=%g C=%g",10.123, 10, 10.123)
※%5.2fは全体で8桁、小数点以下2桁の意味、%gは小数点以下の0は省略。
- readvideo(buf, frame, "file")
動画ファイルの画像読み込み
frame: フレーム番号
file: ファイル名
ファイル名で指定した画像を読み込みます。
AviUtl本体が読み込むことが出来る形式のファイルを読み込むことが出来ます。
- readimage(buf, "file")
画像ファイル読み込み
BMPファイルを読み込むことが出来ます。
キャッシュはしないので[0-0]などの範囲指定をしてbufにあらかじめ読み込んでおいたほうがよいです。
音声処理 †
音声もフレーム単位で処理を行ないます。
処理関数 †
- a_copyframe(buf, frame)
bufにframeの音声データをコピーします。
frameの小数点以下は切り捨て。
- a_copyframe2(buf, sframe,eframe)
変速フレームコピー
bufにsframeからeframeまでのフレームを1フレームの長さにしてコピーします。
sframeとeframeは実数値。
- a_copy(buf0,buf1)
buf0をbuf1にコピーします。
- a_blend(buf0,buf1)
buf0の音声をbuf1に加算します。
加算なので音量に注意(あらかじめ音量を半分にしておくなど)してください。
- a_volume(buf, vol1,vol2, LR)
buf内の音声をvol1からvol2まで(フレーム開始から次フレーム開始まで)変化させます。
vol1,vol2:倍率
LR(0=L+R,1=L,2=R)に対して処理を行います。
- a_mono(buf, LR)
モノラル化をします。
LR(0=L+R,1=L,2=R)
- a_reverse(buf0,buf1)
buf0を逆再生でbuf1にコピーします。
- a_noise(buf, vol)
ホワイトノイズを作成します。
音量:vol(0〜1)
「ザー」という音。
- a_tone(buf, Hz, shape, vol)
トーン信号を作成します。
周波数:Hz
波形:shape 0:正弦波,1:矩形波
音量:vol(0〜1)
「ピー」とかは1000Hzくらいかな?
- a_voicechg(buf, hz)
ボイスチェンジャー
周波数hzで変調をかけます。
- a_readvideo(buf, frame, "file")
動画ファイルの音声読み込み
frame: フレーム番号
file: ファイル名
ファイル名で指定した音声を読み込みます。
AviUtl本体が読み込むことが出来る形式のファイルを読み込むことが出来ます。
本体のプラグインにWave File Readerが付いているのでWAVファイルも読み込めます。
条件分岐 †
if文とgoto文が使えます。
無限ループになると止められないので注意してください。
- ラベル
コロン':'で始まるラベルを分岐先として指定できます。
- if 条件式 goto :label
条件式が真なら:labelにジャンプします。
- goto :label
:labelにジャンプします。
- 使用例
[0-]
A=0
:loop
ellipse(0, w/2,h/2, w/2-w/2/30*A,h/2-h/2/30*A, A*4096/30,0,0)
A=A+1
if A > 30 goto :fin
goto :loop
:fin
数式について †
以下の変数・演算子・関数が使えます。
- 関数
ceil floor abs sqrt exp log log10 sin cos tan
asin acos atan sinh cosh tanh asinh acosh atanh
j0 j1 y0 y1 rand
#rand(n)で0〜nの乱数
- 変数
- f:フレーム番号
- s:処理範囲開始フレーム番号
- e:処理範囲終了フレーム番号
- g:処理範囲内フレーム番号(f-sと同等)
- n:処理範囲内フレーム数(e-s+1と同等)
- m:総フレーム数
- p:円周率
- w:表示画面幅
- h:表示画面高さ
- i:編集画面幅(システム初期設定値)
- j:編集画面高さ(システム初期設定値)
- a,b,c,d,u,v,x,y,z:設定画面の設定値
上記以外の変数 A〜Z、a〜z はスクリプト中で設定が出来ます。
[0-50]
A=w/4
[51-]
A=w/2
[0-]
fill(0, 0,0,A,h, 2000,0,0)
更新履歴 †
2009.12.04 ver1.4 処理範囲の判定に条件式を使えるようにした。数式にrand()を追加、bufのメモリは使用する場合にのみ確保するようにした
2009.10.28 ver1.3 演算子追加、if文・goto文追加、readvideo(),a_readvideo(),readimage(),text2()追加、文字列の'\'の扱いを変更、defocus()をガウスぼかしに変更
2009.05.05 ver1.2 パス名処理の不具合修正、画像と音声のプラグインを一体化、スレッド数の設定を本体から取得、スクリプトの行数上限を廃止、fill_rgb(),fill2_rgb(),font_rgb(),font2_rgb(),ellipse_rgb()追加
2008.05.11 ver1.1 font2()追加、text()修正
2008.05.09 ver1.0a ランタイムの変更(VC++2005→VC++2008)
2008.05.04 ver1.0 text()の文字化け対策
2007.11.05 ver0.9 a_voicechg()追加、posterize(),posterize_rgb()修正
2007.10.31 ver0.8 ellipse(),posterize(),posterize_rgb(),color_rgb(),mkmask_rgb()追加、text()修正
2007.10.28 ver0.7 変数に代入できるようにした
2007.10.25 ver0.6 a_copyframe2(),font(),text()追加、diffuse()修正ほか
2007.10.23 ver0.5 設定画面に変数追加ほか
2007.10.21 ver0.4 gamma(),diffuse()追加
2007.10.18 ver0.3 マルチスレッド対応、defocus(),a_noise(),a_tone()修正ほか
2007.10.08 ver0.2 mkmask()追加
2007.10.08 ver0.1 公開
|