哈囉!又到了快樂的教學時光,
今天要來和大家分享一個製作計時器的表達式!
在分享表達式之前先和大家兩個AE內建的計數特效:
1.Timecode
Timecode可以直接套用在任何圖層上,
他會將該圖層直接轉換為影片計時器,
所以如果想要在影片上蓋上一個Timecode需要額外新增一個圖層並套用。
Timecode能夠快速製作簡單的計時器,
相較之下能夠調整的參數並不多,只有底色、文字顏色等等。
在Display Format中可選擇計時器顯示的方式。
大概就是這幾種樣式,
而且不能夠控制是否顯示時、分、秒、微秒。
在Time Source中可以選擇替整個Comp計時或是替該圖層計時,
舉例來說如果你將圖層往後移動2秒,並選擇Layer Source,
在Comp中撥放至第二秒才會開始啟動計時器。
2.Numbers
接下來介紹專門計數的特效Numbers,
和Timecode一樣可以套用在所有圖層上並轉換計數器,
加入特效後會跳出一個視窗,你需要在這裡就決定文字樣式。
Numbers相較Timecode就來的自由許多,
可以調整的除了剛才的字體樣式,顏色、填色方式、是否亂數等在這裡都可以調整。
在Type一樣可以選擇顯示方式,顯示Timecode系列的選項就可以變成計時器。
不過Number的缺點就是Timcode的選擇需要配合影片楨率,
但選項固定只有30、25、24,假如你今天使用60楨的影片就無法用Numbers精確的計算時間了。
3.表達式計時器
接下來就是我們的主角!表達式計時器!
要製作表達式計時器首先你需要新增一個Text圖層。
你可以先在Text圖層打幾個字方便待會觀察。
接著點開Text > Source Text,並Alt + 左鍵點擊左側的小碼錶Icon進入表達是輸入區。
在輸入區打上表達式:
countspeed = 1;
clockStart = 0;
function times(n) {
if (n<10) return "0" + n
else return "" + n
}
clockTime = clockStart + countspeed*(time – inPoint);
if (clockTime < 0) {
minus = "-";
clockTime = -clockTime;
} else {
minus = "";
}
t = Math.floor(clockTime);
min = Math.floor((t%3600)/60);
sec = Math.floor(t%60);
minus + times(min) + ":" + times(sec)
直接把上方文字複製進去就可以了。
你會發現文字自動變成計時器了!
這個計時器的計時方式是抓取實際時間而不是楨數,
因可以精確的計時。
而且這個計時器是可以更換顯示方式的!
你可以將表達式的
t = Math.floor(clockTime);
min = Math.floor((t%3600)/60);
sec = Math.floor(t%60);
minus + times(min) + ":" + times(sec)
改為
t = Math.floor(clockTime);
h = Math.floor(t/3600);
min = Math.floor((t%3600)/60);
sec = Math.floor(t%60);
ms = clockTime.toFixed(3).substr(-3);
minus + times(h) + ":" + times(min) + ":" + times(sec) + ":" + ms
這裡每一排的開頭文字 t、h、min、sec、ms分別代表:
時間參數(不需要調整)、小時、分鐘、秒、微秒的代號。
你可以自由新增減少完整的一排,只要特別注意最底下的那排表達式
minus + times(h) + ":" + times(min) + ":" + times(sec) + ":" + ms
括號內的代號是否與想顯示的所有數列,並檢查":"的數量是否正確。
更凱完畢看起來就像這樣:
特別注意,如果你想更便微秒的位數,
你可以將
ms = clockTime.toFixed(3).substr(-3);
改為
ms = clockTime.toFixed(2).substr(-2);
這樣就能夠更變為二位數了!
增加減少以此類推。
如果你想製作倒數計時器也可以,
只需要在所有表達式設定完畢之後檢查你的Comp時間長度,例如現在長度為5秒,
將Text圖層Comp起來之後對著Comp右鍵 > Time > Time-Reverse Layer(圖層時間倒轉)。
這麼一來就完成倒數計時器囉!
剩下就是替你的計時器作點裝飾~
此教學專案檔下載(cc 2018以上):