第13回: タイムライン制御と動画書き出し

#timeline#animation#video export

本日のtoeファイル ← ダウンロードしておいてください

タイムラインの使い方

今日は、初回のUI解説で紹介して以降、まったく触れていなかったタイムラインについて紹介します。

再生、停止、フレーム送りなどの各ボタンは見ての通りなのですが、注意すべきは Renge Limit のボタンと、RStart、REnd の数値です。

Renge Limit はデフォルトで Loop になっていますが、Once に設定するとタイムラインの再生ヘッドが最後に到達すると再生を止める設定になります。たとえばライブパフォーマンスで映像のポン出しなどをした時など、頭に戻って再生して欲しくない時は Once に設定するといいでしょう。

RStart、REnd は、全体のシーケンスの尺のうち、任意の区間をプレビュー領域として指定する機能です。Range Limit と組み合わせて使うと、特定の部分を繰り返し見ながら内容を作り込むことができます。 R は、おそらく Renderの略…?

absTime.seconds と me.time.seconds

/project1/absTime_and_localTime を参照

TouchDesignerでは二種類の時間軸があります。absTime と、me.time です。

absTime TouchDesignerが起動してからの経過時間を扱います

me.time タイムラインと同期した時間を扱います

ひらたく言うと、me.time を使った場合はパラメーターの更新がタイムラインと同期しますが、absTime を使うとずっと変化し続ける値になります。アニメーションに再現性が欲しい時は me.time を、適当に動いていて欲しい時は absTime を使うといいでしょう

absTime、me.time の両方とも、.seconds で秒を、.frame でフレーム数をとりだすことができます

Locked to Timeline

/project1/locked_to_timeline を参照

Movie File In TOP 、Audio File In CHOP、Timer CHOP など、時間軸で変化するオペレーターには、Play Mode と呼ばれるパラメーターを持つものがあります。

これは、オペレーター自身の時間軸をどういうふうに更新するかというオプションで、Sequential にすると内部的に持っている時間軸に、Locked to Timeline にするとタイムラインの時間軸によって再生されます。また Specify Index の選択肢があるものは、任意のフレームや秒数を指定することもできます。

音声や映像をタイムラインにロックしておくと、Ableton LiveやAdobe Premiereを使うような操作感でタイムラインのヘッドを移動できます。何度でも同じ状態をプレイバックできるため時間的軸方向の作り込みがしやすくなります。タイミングを詰めて演出効果を上げたい時などに使うといいでしょう。

Audio File In CHOP と File In CHOP

これまで、オーディオファイルを読み込む時にはいつも Audio File In CHOP を使ってきましたが、代わりに File In CHOP を使うこともできます。両者の違いは読み込むサンプル数の違いです。Audio File In CHOP が、オーディオファイルの中の、再生に必要な部分だけのサンプルを抜き出してくるのに比べ、 File In CHOP はファイル全体をあらかじめ全て読み込みます。

File In CHOP を使ってファイル内の全てのサンプルを読み込んでおいた場合、CHOPオペレーターのビューワーを右クリックして Timebar を有効にすると現在時刻を示すバー表れ、Time Scroll を有効にすると現在時刻の周辺に自動的にスクロールするようになります。CHOPのビューをこのような状態にしておくと、Audio File In CHOP を使うのに比べて 音の波形を確認しながらタイムラインを操作できるので大変便利です。

また、Trim CHOP の Unit Values を Relative to Current Frame にしたものを File In CHOP につないでおくと、現在時刻から前後に指定した長さぶんのサンプルを数値指定で抜き出すこともできます。

Animation COMP

Animation COMP を使うと、カーブエディタのGUIを使ってCHOPのアニメーションカーブを書くことができます。操作方法については ↑ の動画を見てもらったほうが早いと思いますが、その他の注意点などをまとめておきます。

  • ちょいちょいバグっぽい所がるので、あまり細かい編集には向きません
  • 正確な値を打ち込むには、キーフレームを選択してチャンネルエディターウィンドウ上部の V: や F: の部分に数値入力します
  • Snap のチェックボックスを適当な値で有効にしていると編集がしやすくなります
  • 最初/最後のキーフレーム以前/以降に新しいキーを追加できないので、最初からあるキーフレームは絶対に消さないでください!!!!詰みます!!!

体験型映像展示などで便利な待機モードの作り方

/project1/idle_loop_simpleを参照

映像インスタレーションなどでよくあるフロー、スタートボタンを押すと初まる → 一定時間コンテンツが流れる → スタートボタンが押されるまで待機 の流れも、タイムラインを活用すれば簡単に実装することができます。

例えば Frame Start を有効にした Execute DATで、

def onFrameStart(frame):
	if me.time.seconds > 5 + 1:
		me.time.seconds = 5
	return

のようなスクリプトを走らせるとタイムラインの時間が6秒以上になった場合5秒に戻る、といったループが組めます。

さらに、適当な所で me.time.seconds = 0 を実行するとタイムラインの時間が0に戻るので先頭から再生、というふうな仕組みです。

/project1/idle_loop に、いつも展示などで使っているような仕組みをつくっておきました。

映像のオフライン書き出し

最後に、Movie File Out TOP を使って、確実に動画を書き出すTIPSを紹介します

映像を素材として書き出す場合、可能であれば毎回同じ長さでフレーム飛びなどもなく書き出せる事が求められます。なのですが、Movie File Out TOP を普通に使った場合、TouchDesignerのレンダリングの時点でフレーム欠けなどがあるとそれがそのまま出力されてしまいます。

以下の手順を踏むことで、フレームの欠けなく、毎回正確な動画を書き出せるようになります

  1. 再生を止める
  2. Movie File Out TOP を作り、出力の設定をする
  3. ウィンドウ上部のRealtime のチェックボックスを切る
  4. Range Limit を Once にする
  5. 書き出しに必要な部分を RStart、REnd で指定する
  6. タイムラインを先頭に戻す
  7. Movie File Out TOP の Record を On にする
  8. 再生ボタンを押す
  9. タイムラインが終わりになり、再生が止まったら Movie File Out TOP の Record を Off にする

この方法を使えば、レンダリングがリアルタイムに動かないような重いシーンでもオフラインで書き出せます。

/project1/movie_output には、以上の手順を自動化するためのCOMPを置いておきました。(きちんとテストはできておりませんが…) 通常はこのCOMPを必要に応じて設定をかえていけばお手軽にオフラインレンダリングができるものと思います