節點總覽
需求是讓 3 部影片自動切換,所以我們需要:
節點名稱 | 數量 | 說明 |
---|---|---|
Movie File In (TOP) | 3 | 輸入 3 部要播放的影片 |
Info (CHOP) | 3 | 提取 Movie File In 的節點資訊 |
Switch (TOP) | 1 | 切換要播放的 Movie File In 節點 |
CHOP Execute (DAT) | 1 | 用 Python 控制 Switch 的索引 |
3 個 Movie File In 需連接到各自的 Info 與 Switch,Info 與 CHOP Execute 的實作細節在後面將會說明。
控制 Movie File In 的播放狀態
Movie File In 除了要播放的影音檔與 Play 參數之外,其它的設定都可以保持預設不動。現在我們要用 Python 來控制 Play 參數的開關 (On/Off),使用最簡單的 ==
判斷來實作。
選擇第 1 個影片,展開 Play 參數,將參數型態改成淺藍色 (仔細觀察下圖的輸入欄位左邊),並輸入:
1op('switch1').par.index == 0
後兩個影片的 Play 參數也是用同樣的操作,但 ==
後的數字要加 1。
第 2 個要輸入:
1op('switch1').par.index == 1
第 3 個:
1op('switch1').par.index == 2
前面我們建立的 Switch 的名字為「switch1」,所以上面的程式碼是呼叫 op('switch1')
,請依你的狀況來修改。
剛才實作功能是讓 Movie File In 的 Play 參數只會在 Switch 是指定的索引 (0、1、2) 的時候才會變成 On。同時,因為 Movie File In 預設會自動重播影片,所以接下來我們要讓它在影片播放完後自動把 Switch 加 1,讓 Play 變成 Off,直到 Play 變回 On 時才會從頭播。
取得影片播放完成的訊號
Info 可以取得 Movie File In 的節點狀態,影片播放完成的那一瞬間 (最後一幀) 會讓 last_frame 變成 1,我們要在它變成 1 的時候改變 Switch 的索引,讓影片的 Play 變成 Off,影片才會停止。同時,Switch 切換到的影片的 Play 會變成 On,影片將播放。
需設定 Info 的 Scope,輸入 last_frame,讓它只會顯示這個狀態。
3 個 Info 對應 3 個 Movie File In,完成設定後,最後將要來撰寫 Python 程式,偵測 last_frame 從 0 變成 1 的瞬間來改變 Switch。
當 Info 變成 1 時控制 Switch
在 CHOP Execute 的 CHOPs 中輸入 3 個 Info 的名稱,中間用空白來分隔,並將 Off to On 改成 On,只監聽 Info (last_frame) 從 0 變成 1 的事件。
CHOP Execute 預設會有一些 Python 語法,我們只會用到 onOffToOn,其他可以刪掉。我們要在 onOffToOn 被觸發時將 Switch 的索引 (index) 增加 1,並且當索引達到 Switch 連接的最大值時自動歸零。Python 程式碼:
1def onOffToOn(channel, sampleIndex, val, prev):
2 sw = op('switch1')
3 sw.par.index += 1
4 if sw.par.index >= len(sw.inputs):
5 sw.par.index = 0
6 return
實作結果
先隨意調整一下 Switch 的索引,再歸零索引,讓它觸發影片播放,最後結果如下:
參考資料
技術文件
- Movie File Out TOP - TouchDesigner Docs
- Switch TOP - TouchDesigner Docs
- Info CHOP - TouchDesigner Docs
- CHOP Execute DAT - TouchDesigner Docs
網路論壇
本文提供所有使用到的影片素材 (來源:Pexels) 與 TouchDesigner 專案:下載連結 (GitHub)