🎬

TouchDesignerで映像ファイルの再生完了を検出する

に公開

追記

Info CHOPにlast_frameという最後のフレームのときに1、それ以外のときに0になるチャンネルがありました。以下に書いたようなめんどくさいことをしなくてもこのチャンネルをそのまま使えば映像ファイルの再生完了を検出できます。


TouchDesignerで映像ファイルを再生するにはMovie File In TOPを使用しますが、映像の再生完了に合わせて何か処理をしたときがあります。

Info CHOPを使用するとMovie File In TOPから映像再生に関する様々な値を取得できますが、再生完了を直接的に表現するチャンネルはありません。しかし、映像の総フレーム数を表現するlengthチャンネルと現在のフレーム値を表現するindexチャンネルを組み合わせることで映像の再生完了を検出することができます。indexチャンネルは最終フレームで値がlength-1となるので、floor((index + 1) / length)によりちょうど映像が最後のフレームになったときに1、それ以外のときは0の値を取得することができます。

これをTouchDesignerで実現すると以下のようなネットワークになります。Chop Execute DATで映像の再生完了時に処理を行うことできます。

chopexec1
def onOffToOn(channel, sampleIndex, val, prev):
	print("Movie Complete")

映像ファイルの再生完了を検出したいケースでは映像を1回だけ再生したい場合が多いと思いますが、Movie File In TOPのTrim > Extend RightHoldにすることでそれを実現することができます。
https://qiita.com/arkwknsk/items/09e7f787aecb872c1948

Discussion