皆さんこんにちは。いつもご訪問頂きまして心より感謝申し上げます。
先日、 NsFarm Channel に、
"スクリプトファイルで作ったプログラムからテキストを動かす方法"
を紹介したチュートリアル動画をアップしました。
「知っていると便利なちょっとしたテクニック」など情報の共有となれば嬉しいです。
ツイッター 、インスタグラム もやってますので気が向いたらフォローしていただけますと嬉しいです
過去に配信した DaVinci Resolve 関係のコンテンツは、「NsFarm's DaVinci Resolve And Fusion Official Page」にまとめています。
if 文攻略へ!テキストをスクリプトで動かす第一歩。 / Render Script Test #4 (InTool Scrips)
スクリプトファイルのダウンロード
タイムコード
00:00 イントロダクション
01:02 本編の解説開始
01:33 flashEx 作成、読み込み設定
02:06 スクリプトファイル内の解説開始
02:35 fu:PurgeCache() について
02:51 if 文について
04:38 スクリプトが呼ばれるタイミングについて
05:04 time 変数について
05:28 %(モジュロ)演算子について
07:26 その他の条件設定例の紹介(タイムラインの範囲を指定など)
08:20 テキストの切り替えについて
09:02 テキストの表示位置の設定方法について
09:17 Fusion の原点、座標について
10:22 テキストを動かす方法について
11:40 comp.RenderEnd について
制作に使用した時の PC 環境の紹介です。
------------------------------------------
PC: G-Master Spear Z390-Taichi OC
CPU: Intel Core i9-9900K [5.0GHz OC]
GPU: GeForce RTX2080Ti 11GB
Memory: 32GB
Keyboard:Logicool K750r
Mouse:Logicool M220GR
Mic①:ECM-LV1
Mic②:FIFINE K670
Headset:SONY MDR-XB450
------------------------------------------
今回は前回の第 3 回目の動画でご紹介した動作確認用スクリプトの flash スクリプト改造をして flashEx スクリプトを作成する方法をご紹介しました。
まず、「fu:PurgeCache()」について触れました。
「fu:PurgeCache()」は、「キャッシュを開放して、メモリリークなどを防ぐ効果がある」という文章をフォーラムの記事で読んだことがあったので
今は、おまじない的に入れています。まだ、どれほどの効果があるのかまでは正確に把握出来ていせん。
入れておいても特に悪さはしないと思うので、入れないよりは入れておいたほうが良いかもといったレベルです。
次に、if 文についてです。Frame Render Script(InTool Scripts) で使用できるスクリプトは、lua 言語で記述します。
そのため、lua 言語の構文を使用することが出来ます。
flash スクリプト内では、その構文の中の一つの if 文と呼ばれる構文を使っています。
「もしも...だったら A、そうでなければ B」といったように「...」に入る条件によって実行するプログラムを A または、B で切り替えることが出来る構文です。
さらに、「もしも...だったら A さらにもしも ... だったら B、そうでなければ C」と分岐を 3 つ以上に設定することも出来ます。
映像制作、映像編集をやられている方は殆どの方が、if 文などこれまで使ったことがなくまったくチンプンカンプンだと思います。
映像制作でイメージが一番近いのは、
「フレームが 50 より大きかったら」とか「フレームが 50 より大きく 100 より小さい時には」といった条件をつけてパラメータを設定できるところがとても似ています。
プログラムは一度感覚を掴むまではとっても難しく感じますが、「キーフレーム」といった馴染みのあるものをイメージしながら学ぶと頭に入って来やすいかもしれません。
次に今回条件で使用した「time % 2 == 0」の解説をしています。 Frame Render Script は、コンポジションが再生された時フレームごと、毎回呼ばれるスクリプトです。 フレームごとレンダリングされるスクリプトのため、「Frame Render Script」という名前がついていると思います。 フレームごと呼ばれた時にそのフレーム番号を参照することが出来るのが time 変数です。 例えば 50 フレームの時にスクリプトが実行されると time 変数は、50 という数値が参照され、51 フレームの時に実行されると 51 という数値が参照されます。 「time % 2」は、time 変数を 2 で割った余りを求めています。0 を 2 で割ると余りは、0。1 を 2 で割ると余りは、1。2 を 2 で割ると余りは、0。3 を 2 で割ると余りは、1。 と 1 ずつ増加する数値を 2 で割ったあまりは、0 と 1 が繰り返される結果となります。 その結果を「== 0」で 0 と比較することで 0 の時は、then ~ else までのブロックのプログラムが実行され、それ以外の時は、else ~ end までのブロックのプログラムが実行されます。 つまり、偶数フレームと奇数フレームで処理を変える if 文の条件を設定しています。 別の例も紹介しておきます。「time > 50」とすると 50 フレームより大きい時、「50 < time and time < 100」とすると 50 より大きく、100 より小さい範囲を条件して指定することが出来ます。
次に、テキストの設定方法です。テキストは、「self.StyledText = "Left"」のように、self.StyledText に値を設定します。 文字列は、""(ダブルクォーテーション)の中に記載します。もし Font を変更する場合は、Style パラメータも同時に設定する必要がありますので注意が必要です。 「【検証】Font は、Style も一緒に設定しないとダメだった!おまけで LEGO 風テキストアニメーションの作り方」
次に、テキストを動かすスクリプトを紹介しました。「self.Center.X = 」に座標を入力すると X 軸、「self.Center.Y = 」に座標を入力すると Y 軸の座標が設定できます。 Fusion の座標は、ビューアで左下が原点の(0,0)。X、Y とも最大が 1 に正規化されています。 動画では、連続して値を変更したかったので time 変数を使いコンポジションの長さが取得出来る「comp.RenderEnd」変数で割ってあげることで「0~1」の値に正規化して設定しています。
ではではこれからも DaVinci Resolve の使い方、魅力を伝え、皆様の映像制作に少しでも刺激を与えられたらと思っています。
それでは最後まで読んで頂きましてありがとうございました。
皆さんとの技術&作品共有の場になれば幸いです。
関連記事
⇒ NsFarm's DaVinci Resolve And Fusion Official Page、TOP へ
関連記事