【AviUtl】BPMとエフェクトを同期させる方法【スクリプト】

BPMに合わせて拍子毎にエフェクトを掛ける方法を紹介します。(スクリプト制御使います)

サンプルとしてはこんな感じ↓です。(メトロノーム)

※音源のドラム音は、音楽制作ソフト(cubase)でドラム音を打ち込んで別に製作しました。(1小節分作ってループ再生で流してます)

スポンサードリンク

さいしょに)予備知識

BPM

BPM(ビート・パー・ミニット)は、「1分間に何回脈を打つか」という意味です。

BPMが、例えば200の場合、1ビート当たりの秒数は、0.3秒です。(200ビート×0.3秒=1分)

 AviUtlのBPMの設定

拡張編集ウィンドウでは、設定したBPMの拍数に合わせてBPM線を表示させる事が出来ます。

BPM線の表示

BPMの線を表示させるには、タイムライン上で「右クリック」→「グリッド(BPM)の表示」から切り替え出来ます。

また、BPM線の拍数の設定などは、タイムライン上で「右クリック」→「グリッドの設定」から開けます。

グリッドの設定

テンポ:BPMの事を指します。

拍子:指定した拍数目の破線を微妙に太く表示させる事が出来ます。(上の画像参照)

基準フレーム番号:例えば「5」と指定すれば、動画の5フレーム目を基準としてBPM線を描画してくれます。

グリッドの設定

このページで紹介するのは、1小節毎(4拍子毎)に合わせてエフェクトを掛ける方法です。(上画像で言うところの破線が太くなる部分でエフェクト)

1小節毎にエフェクトを掛ける方法

▼のyoutube動画を元にして説明します。この動画では、4つの丸(図形)を横並びにし、それぞれの図形に「スクリプト制御」を追加する事で、1小節毎にエフェクト(グラデーション)を掛けています

スクリプト制御の基本については以下の記事を参考にして下さい。

※今回作成したプロジェクトファイル(aup)はコチラからDLできます。

青の丸(図形)を4拍子に合わせて点滅させる

2015-12-16_08h16_18

拡張ウィンドウにて「右クリック」→「メディアオブジェクト」→「図形」を挿入した後、「スクリプト制御」のフィルタ(エフェクト)を追加します。

追加したスクリプト制御のテキストボックス内に以下のコードを貼り付けます。

bpm=180
if(math.floor(bpm/60*obj.time)%4+1 == 1) then
  obj.effect("グラデーション","強さ",100.0,"中心X",204,"角度",342.5,"幅",282,"color","0000ff")
end

bpm=180」の部分で指定したbpm数の拍子に応じて、色が変わります。(obj.effect)

if(math.floor(bpm/60*obj.time)%4+1 == 1) then」は、「もしこのオブジェクト(丸図形)が1拍子目に来たら実行する」という意味です。(obj.timeは現在時間)

obj.effect(“グラデーション”,”強さ”,100.0,”中心X”,204,”角度”,342.5,”幅”,282,”color”,”0000ff”)」は、「グラデーション」というフィルタの設定したいパラメータ部分だけを指定して引数として渡してます。この例では動画のように青のグラデーション色に変更する事が出来ます。

※「local」を付けずに宣言した変数はグローバル変数となり、他のオブジェクトからも参照出来ます

拍子をカウントさせる(1,2,3,4)

2015-12-16_08h16_50

(4つの丸の真ん中上でカウントしてる数字の事です)

拡張ウィンドウにて「右クリック」→「メディアオブジェクト」→「テキスト」を挿入した後、「スクリプト制御」のフィルタ(エフェクト)を追加します。

追加したスクリプト制御のテキストボックス内に以下のコードを貼り付けます。(「テキスト」内でスクリプト制御を使う場合は、先頭と後尾に<?と?>が必要です)

<?
if(math.floor(bpm/60*obj.time)%4+1 == 1) then
  mes(1)
elseif(math.floor(bpm/60*obj.time)%4+1 == 2) then
  mes(2)
elseif(math.floor(bpm/60*obj.time)%4+1 == 3) then
  mes(3)
else
  mes(4)
end
?>

これも先ほどと同じで1拍子目なら「1」と出力、2拍子目なら「2」を出力と言った感じです。(mesは出力関数)

何小節目かを出力

2015-12-16_08h17_19

(4つの丸の真ん中下でカウントしてる数字の事です)

拡張ウィンドウにて「右クリック」→「メディアオブジェクト」→「テキスト」を挿入した後、「スクリプト制御」のフィルタ(エフェクト)を追加します。

追加したスクリプト制御のテキストボックス内に以下のコードを貼り付けます。(「テキスト」内でスクリプト制御を使う場合は、先頭と後尾に<?と?>が必要です)

<? 
 mes(math.floor(bpm/60*obj.time/4))
?> measure

現在時間を4で除算して、小数点以下を切り捨てたのが小節数となります。(math.floorは切り捨て関数)

その他

■音声波形

右下の音の波形みたいなやつは、タイムライン上で「右クリック」→「メディアオブジェクトの追加」→「音声波形の表示」にて表示出来ます。

■字体

「Backerville Old Face」ってやつを使ってます。(windows7以降のOSから導入されたフォントだと思います)

スクリプト制御のメリット

円(図形)の色の切り替わりなどは、中間点機能でも実現しようと思えば出来ますが、エンコードの際はスクリプト制御で作った動画の方が圧倒的にエンコードが高速となります。(約4倍くらい差がある)

メトロノーム特有の針の振り子運動みたいなアニメーションを追加したい場合は以下の記事を参考にして下さい

スポンサーリンク

コメント一覧

  1. 俺氏 より:

    ここでは円の図形を使ってると思うんですが「フレア」の場合コマンドは変わりますか?

    • 管理人 管理人 より:

      変わりません。
      ただ、元々フレアに適用できないエフェクトの場合は、スクリプトでも適用されません。