2009/3/3

影片控制課程筆記

前言
該篇筆記是於李駿(Lee Chun)在課堂上教學生如何使用pd從無到有,去建立一個可以完全控制各參數與播放的影片播放器,並且了解pd在建立與執行的過程中,明白pd的幾個基礎概念。



基本
在建立patch前,要先理解這個程式的執行邏輯,並且找出建立影片控制所需要的構成要素:
1.影片
2.顯示器
3.播放器


準備影片
準備用來播放的影片,它的檔案格式盡量是AVI、MOV(你的電腦內需要裝好QUICKTIME),雖然pd對於播放的格式的支援與否,理論上是依賴於你的系統所安裝的播放程式與編解碼器支援,但是最好以這兩種為主。
________________________________________
建立顯示器
在這部份,設定顯示器所需的物件與訊息
[gemwin]、[create(、[destroy(、[1(、[0(
[gemhead]、[pix_textecture]、[rectangle]
然後完成跟圖示1一樣的連結,而物件是用來接收影片並顯示在矩形上,這之後會用到,在此先準備好。點擊[create(會跳出一個視窗然後在按下[1(會在視窗內渲染出現一個矩形。關掉視窗則是按下[destroy(,按下[0(取消渲染矩形。
圖示1:顯示器


建立播放器核心
在建立播放器核心前,先思考一般影片是怎麼如何動起來。其實影片是包含多個靜態的圖片然後逐一移動,最後使視覺暫留造成運動的感官知覺。為了建立這個運動機制,我們必須製造一個自動增加數字的計算器去推動圖片,達到影片播放的目的。
在此,我們在patch裡需要幾個物件:
1.[metro]
2[+]
3.[float]
4.[print]
5. [O]
6. [ ]
圖示2:基本元素
按照圖示1將這些盒子連接起來,完成後每當你點一次[bang]後,你會注意到數字盒子內的數字會增加一次。在這部份,一定會有疑問這到底是為什麼流動的,在下面的圖示將會解釋這個過程,而這也是puredata最重要的概念-Data Flow(資料流動)
圖示3:資料流動圖解
1.點擊[O]後,會要[flost ]送出一個數字(此時它是0)。
2.接著給予 [+ 1]的左邊輸入,(在這裡進行數學運算,0+1=1)送出一個數字1。
3.再來這1送到[print],你會在pd 視窗看到一行文字print: 1,和送到 [float]的右手邊將1暫存在裡面。
之後再點擊[O]時,1到3的步驟會在作一次,數字會在累加造成數字遞增。


每當你按一下時,這流程就會在走一遍,依序將數字累加,此時我們已經完成一個簡單手動的遞增計算器。但是這裡有一個小麻煩,我們不可能一直按著滑鼠點擊[O]去產生數字遞增,我們必須在加上尚未用到的[metro],這個物件具有自動點擊的功能,並且在此你可以手動調整頻率,我們在metro 字後面空一格加上參數500。將[ ]左下角連到[metro 500] 的左上角,並且[metro]的左下角連至[flost ]的左上角,當這些動作完成後,最後滑鼠點擊[ ],你會看到pd視窗的數字逐漸增加。
圖示4:自動化點擊


再來的問題是我們要如何讓計算器重新計算,讓影片重播。而這會有用到一個簡單的數學手法,就是利用除法去取得餘數,這原理是當數字不停的增加時,藉由另一數字同時相除,你取得的餘數會變成在一定的範圍增加並且回覆到1。我們加上一個[%]物件,並且在盒子裡的%後面空一格加上一個參數30,變成[% 30]。將[flost ]的左下角連到[% 30]的左上角,再將[% 30]的 左下角連到[print]。最後點擊,你會看到pd視窗的數字有個循環重複出現。
圖示5:數字重複


然後要如何讓數字遞減,造成影片倒著播放,這裡也是用數學運算的方式去達到這個目的。在patch裡放入[-]物件,隨後在盒子內部將參數定為30(這裡的參數是延續上一個重複patch的設定)變成[- 30]。將[% 30]的左下角連到[- 30]的左上角,再將[- 30]的左下角連到[print],最後點擊,你會看到pd視窗的數字有個循環重複的結果。但是有沒注意到一個細節,那就是出來的數字都是負的,為了解決這個小問題,我們必須在加上一個[abs]物件,去接收送過來的數值轉化成絕對值,在送入pd視窗,最後你就可以看到是以正數在進行倒數循環。
圖示6:數字倒數
________________________________________
播放
進行到此也意謂著我門已經完成了很多工作,再來的工作就是將播放器核心與顯示器,這2個模組連接起來。這裡我們要在用上一個物件[pix_film],它的功能是用來開啟電影檔案並且播放,並且在gem視窗內實行。把[gemhead ]連接給[pix_film],在將連接給[pix_textecture],但是我們還沒給予開啟檔案的機制,在此放入[O]、[openpanel]物件與[open $1(訊息,將它們依序連接起來,並且連到[pix_film],這時候我們可以點擊[O]開啟並且指定我們要播放的影片,影片開啟後,它會載入到[pix_textecture]送給[ ],在gem視窗你會看到影片的第一個畫面。
圖示7:影片載入


接下來是最重要的部份,因為這裡是要接上播放器核心、[pix_textecture]與播放器模組。首先把[+ 1]左下角連接至[pix_film]物件的右上角,然後打開[O],你會發現GEM視窗的影片正在播放,但是以極快的速度在進行,這是因為我們當初的設為500,這表示每500毫秒就送出一個訊號,所以才會播放速度變快。然而要調回正常的速度,要回想一下關於影片的基本知識,就是影片一秒是多少影格,這樣我們才能進行下個步驟。通常影格一秒為25格,所以原本參數500,要修正為40,在開啟一次,你會發現影片以正常播放。


圖示8:正常播放


還記得之前我們在建立播放器核心的循環與倒轉,現在我們要將這功能派上用場,在此先取消[+ 1]與[pix_film]物件連接,改成[% 30]左下角連至[pix_film],但是開啟後,依然有播放的時間問題,經過上面的第一個播放問題解決,想必你知道問題出在參數設定,因為數字30小於你要播放的總影格數,所以當一播放時就只會播30格影格後就會再來一次,所以我們的解決之道就是找出我們要播的影片總長度值,並把這值取代30。這裡我們需要[unpack]並且在裡面設3個0變為[unpack 0 0 0],你會發現到物件的底部多了三個小方塊,將這一些小方塊連到各自的數字盒子,這三個盒子以需代表的是總影格數、影片的寬度與影片的高度,所以現在我們已經取得總影格數,隨後將這數字盒子連至[%],[%]就會用總影格數去進行除法取餘數,然後影片就會循環重播。
圖示9:循環播放


而倒轉影片的能力,也是依照上述相同的作法,你會發現之前的播放器核心建立是值的。在此先將[%]輸出到[pix_film]的連接取消,將[abs]左下角連到[pix_film],可是仍然有播放的問題,這是因為[-]物件的參數設為30,因此在播放時會只會倒數30格然後再來一次,到此你一定知道只要將總影格數去取代30,一切會變成如我們所預期的,再次播放影片,你會看倒好的結果。
圖示10:影片倒播

沒有留言: