
DaVinci Resolveでミュージックビデオを作る Tips: Fusionでテンポに合わせる
Fusionコンポジションと関数
DaVinci ResolveのFusion機能は、ほぼ全ての映像エフェクトを作成できる非常に強力なものである。ただし、この機能はノード型のインターフェースと、コンピュータープログラム的な機能のせいで初心者には最も難しいものの一つだ。
本稿ではFusionコンポジションの基本については解説サイトのリンクを貼るだけにして、ミュージックビデオに必要なテンポを合わせる方法に内容を絞りたい。
一般的な解説サイト
Fusionコンポジションのノードには様々なパラメーターがある。これらのパラメーターは右クリックしてエクスプレッションを選ぶことで、プログラムを用いて変化させることができる。このとき「Lua」というプログラミング言語で記述するが、別途簡単な知識を仕入れておくと便利である。
BPMとFPSの関係を理解する
音楽制作を中心にしている人にとって、リズムはBPM(Beats Per Minute)で考えるのが一般的だ。知っての通り、BPMは1分間に四分音符が何回打たれるかを示す。
一方、動画制作ではFPS(Frames Per Second)が重要であり、1秒あたりのコマ数を示している。DaVinci ResolveではFPSを基準に動画を作成するが、音楽はBPMを基準に作られているため、この2つを対応させる必要がある。
動画制作の際、四分音符1つ分が何フレームに相当するかを計算するには、次の式を使うと良い。
四分音符あたりのコマ数 = (60秒 × FPS) / BPM
この式は、1分間の動画のコマ数(60秒 × FPS)を考えて、この時間内の四分音符の個数に相当するBPMで割ることで得られる。これを覚えておくと、編集の際に役立つ。
Fusion機能で使ういろいろな周期関数
四分音符と同期して周期的に何かをやりたいということはよくある。例えば拍の頭だけ画面をちょっと白くしたいなどはありうるだろう。こういう場合、Fusion機能の背景を表示するときに背景の透明度に関数を入れて周期的に変化させることになる。
それでは考えてみよう。まず、BPMとFPSの関係は以下の通りであった。
frames_per_beat = (60 * FPS) / BPM
Fusion機能では「time」はそのオブジェクトが始まってからのコマ数を表す。またLua言語では割り算のあまりを計算するには「%」を使う。小数部分だけを計算したいなら、小数について「% 1」をすれば良い。これを踏まえると、
t = (time / frames_per_beat) % 1
= (time / ((60 * FPS) / BPM)) % 1
= (time / 60 / FPS * BPM) % 1
としたときに、周期的に0から始まって四分音符と同じ時間をかけて1まで直線的に変動し、また0に戻るというのを繰り返すことが出来る。
仮にBPM = 120でFPS = 24だった場合は以下のような具体的な数字をいれる。
(time / 60 / 24 * 120) % 1
このtを用いて以下のようないろいろな周期関数を作ることが出来る。(実はChatGPTに考えてもらったので間違えてたら教えてほしい。)
ノコギリ波 (最初が0で最後が1)
t
ノコギリ波 (最初が1で最後が0)
1 - t
矩形波 (最初の50%が1で残りが0)
t < 0.5 and 1 or 0
矩形波 (最初の10%が1で残りが0)
t < 0.1 and 1 or 0
三角波 (最初が1で下がって上がる)
t < 0.5 and (1 - 2 * t) or (2 * t - 1)
三角波 (最初が0で上がって下がる)
t < 0.5 and (2 * t) or (2 - 2 * t)
Sin波 (最初が1で下がって上がる)
0.5 * (1 + math.cos(2 * math.pi * t))
Sin波 (最初が0で上がって下がる)
0.5 * (1 - math.cos(2 * math.pi * t))
なお、math.piは円周率を表す定数である。(Lua言語で三角関数はラジアン表記。数学IIIを習ってない人は単なるお約束だと思ってください。)
シグモイド曲線 (最初が0で最後が1)
シグモイド曲線は滑らかなS字型の曲線である。
1 / (1 + math.exp(-12 * (t - 0.5)))
シグモイド曲線 (最初が1で最後が0)
1 / (1 + math.exp(12 * (t - 0.5)))
指数関数曲線 (最初が0で最後が1)
指数関数は最初ゆっくりで最後に急上昇する。
math.pow(t, 3)
指数関数曲線 (最初が1で最後が0)
math.pow(1 - t, 3)
対数関数曲線 (最初が0で最後が1)
対数関数は最初に急上昇し、後半で緩やかになる。
math.log(t + 1) / math.log(2)
対数関数曲線 (最初が1で最後が0)
math.log(1 - t + 1) / math.log(2)
関数を適当なノードに格納する (参照)
いろいろな周期関数がわかったが、これを実際に書くとなるとなかなか困る。例えば、sin波を実際に書くときはtを展開しないといけないので
0.5 * (1 + math.cos(2 * math.pi * ((time / 60 / FPS * BPM) % 1))
これは長すぎるので、かなり不便だと思う。
そこで、tに相当する部分を適当なノード (例えば四角形のレベルの値) に設定しておいてそのノードを「Beat」とリネームする。次に実際に使うノード、ここでは例えば背景ノードのアルファ値に対して以下のように設定する。
0.5 * (1 + math.cos(2 * math.pi * Beat.Level))
この方法により、かなり見通しが良くなる。
例えばSin波をいろいろなものに使いたいのであれば更にもう一つ適当なノード「Sin」を作って上記をも格納してしまうという応用も出来る。こうすればSin波は以下の式だけで使える。
Sin.Level
実際にやってみよう
以下では、DaVinci ResolveのFusionで「白い背景のアルファ値を (最初が1で最後が0) で変更する」ための手順を説明する。なお、以下ではBPM = 120、FPS = 24として具体的な数字をいれる。
タイムラインにFusionコンポジションを追加
DaVinci Resolveの編集ページで、タイムライン上に移動する。
タイムライン上で右クリックし、「Fusionコンポジションを追加」 を選択する。
Fusionコンポジションがタイムラインに追加されたら、これをダブルクリックしてFusionページに移動する。
背景ノード(Background)を作成
Fusionページの中で右クリックし、「Add Tool」 > 「Background」 を選択する。
追加された背景ノードの「カラー」を白に設定する。
背景ノードはデフォルトでアルファ値がゼロなので、「Inspector」でアルファ値を1に変更しておく(これで透明ではなくなる)。
Beatノード(独立した矩形ノード)を作成
もう一つ**矩形ノード(Rectangle)**を追加する。
これを他のノードには繋がず、単独で使う。
作成した矩形ノードの名前を「Beat」に変更する(右クリックして「Rename」を選択)。
Beatノードにレベル値のエクスプレッションを追加
Beatノードを選択し、「Inspector」パネルの「Level」パラメータにエクスプレッションを追加する。
以下の式を記述する。(time / 60 / 24 * 120) % 1
これにより、「t」がノコギリ波(0から1)で変化するアルファ値に相当するものになる。
背景ノードにBeatノードのアルファ値を読み込ませる
背景ノードを選択し、「Inspector」の「Alpha」値にエクスプレッションを追加する。
以下の式を記述する。1 - Beat.Level
これにより、背景のアルファ値がBeatノードのレベル値(ノコギリ波の変化)に基づいて変更される。
再生して確認
Fusionページでタイムラインを再生すると、白い背景がBeatノードに設定したノコギリ波(1から0)の周期に従って、アルファ値が徐々に変化していくことが確認できる。
これで、Fusionで「ノコギリ波」を使った背景のアルファ値の変更が設定できる。「Beat.Level」で背景のアルファ値をコントロールしているので、他の波形関数を使う場合も同様の手順で適用できる。