TUCaptions

 找回密碼
 立即註冊
TUcaptions 社團連載作品 記錄的地平線 II 報錯 心靈判官 II 報錯 刀劍神域 II 報錯 尋找失去的未來 報錯 大圖書館的牧羊人 報錯 女友伴身邊 報錯
快捷導航
  • TUcaptions 春季作品預測開跑囉!! 趕快來這裡投票吧!!
  • 測試測試
查看: 1061|推文: 0

123456789

[複製連結]
發表於 2014-10-22 03:10:27 | 顯示全部樓層 |閱讀模式
基本知識
在開始寫自動化特效以前,必須先了解最基本的ass特效名詞用語和一些注意事項,請參照下圖:

拉過k軸的人應該對這個畫面不陌生,如果該行沒有被拉k軸,則內文不會有{\k}的特效。在下文的說明當中,{\k}則佔有相當重要的角色。

自動化指令
在寫特效以前,必須要先了解整個ass自動化的運作流程,如下圖所示:

通常每一組結果不會只有一行。

在一般OPED的ass結構如下圖:

上述所產生的輸出結果通常行數會非常多,在這裡我只擷取前5行。
在這個章節裡面主要說明特效欄內的自動化指令,如上圖的template syl noblank等指令。
在以下的說明當中,我將會把自動化指令輸出的結果呈現出現出來,複製代碼後直接貼到aegisub內會顯示和截圖相同的結果。
下文的標題,紅色指令表示特效欄內不可以和其他紅色指令同時存在,如template line syl是不可以的,但是可以和綠色指令同時存在,如template syl noblank notext loop 8 fxgroup KP則可以。

template pre-line
這個指令常用在一般字幕中對每個字幕都做相同的效果,也就是每行字幕前都有類似{\blur5\bord3}這樣的效果。
這個意思就是將template行內文中的文字或效果都加在作用行的前面,結果如下圖:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line,Fuck
  2. Comment: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,karaoke,{\k30}連勝丼{\k70}吹狗蕾
  3. Comment: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,karaoke,{\k30}祭止兀{\k70}廢洪態
  4. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,Fuck連勝丼吹狗蕾
  5. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,Fuck祭止兀廢洪態
複製代碼
我們可以看到template行(行1)的內文Fuck都被加在作用行(行2~行3)內文的前面並在結果行(行4~行5)輸出其結果。

template line
這個指令在寫歌詞特效中相當常用,這個指令和template pre-line不一樣的是template line如果遇到作用行的內文中有{\k}的時候會取代之,結果如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template line,Fuck
  2. Comment: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,karaoke,{\k30}連勝丼{\k70}吹狗蕾
  3. Comment: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,karaoke,{\k30}祭止兀{\k70}廢洪態
  4. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,Fuck連勝丼Fuck吹狗蕾
  5. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,Fuck祭止兀Fuck廢洪態
複製代碼
從上面可以看到作用行內文的{\k}全部被取代成Fuck並輸出到結果行。
通常template line中,template行的內文會放和時間相關的變數,如{\t},因為這樣可以達到漸變的動態效果,範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template line,!retime("line",0,200)!{\fscx0\t(!$start!,!$end!,\fscx100)\t(!$ldur!,!$ldur+200!,\fscx0)}
  2. Comment: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,karaoke,{\k10}連{\k10}勝{\k10}丼{\k20}吹{\k20}狗{\k30}蕾
  3. Dialogue: 0,0:05:00.00,0:05:02.20,OP-jp,,0,0,0,fx,{\fscx0\t(0,100,\fscx100)\t(1000,1200,\fscx0)}連{\fscx0\t(100,200,\fscx100)\t(1000,1200,\fscx0)}勝{\fscx0\t(200,300,\fscx100)\t(1000,1200,\fscx0)}丼{\fscx0\t(300,500,\fscx100)\t(1000,1200,\fscx0)}吹{\fscx0\t(500,700,\fscx100)\t(1000,1200,\fscx0)}狗{\fscx0\t(700,1000,\fscx100)\t(1000,1200,\fscx0)}蕾
複製代碼
其中在{\t}內的$ldur$start$end皆為表示時間長度的隱變數,在使用變數的同時,必須把變數用兩個驚嘆號括起來,如!$ldur!
$ldur表示整個作用行的時間長度,$start表示該行的開頭到該音節開始的那段時間長度,$end表示該行的開頭到該音節結束的那斷時間長度。
!retime("line",0,200)!表示重設該行的起點和終點時間,這裡我們可以看到結果行的結束時間是作用行結束時間的0.2秒*音節數
詳細的函數和隱變數將在下文中詳細說明。

template syl (noblank)
這個指令和上述兩個不同的是,每一個{\k}都會生成的獨立的一行,輸出結果如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank,自己
  2. Comment: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,karaoke,{\k10}的國家{\k10}救{\k10}的特效{\k20}寫{\k20}的總統{\k30}選
  3. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,自己的國家
  4. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,自己救
  5. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,自己的特效
  6. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,自己寫
  7. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,自己的總統
  8. Dialogue: 0,0:05:00.00,0:05:01.00,OP-jp,,0,0,0,fx,自己選
複製代碼
上面可以看出自己取代了{\k}並獨立產生一個結果行,noblank則是跳過在作用行中因為有音節空格而輸出無意義的訊息,
因此通常在使用syl的時候都會寫成template syl noblank,下文將詳細解釋這個指令。
同樣地,template行的內文通常也是加入時間的訊息在裡面,而且和template line相比,這個自由度比較高。範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank,!retime("syl",0,$ldur-$end)!{\pos(!$center!,!$bottom!)\fad(!$sdur!,0)}
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}連{\k70}勝{\k110}丼{\k80}一{\k80}直{\k80}玩
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(810,1030)\fad(800,0)}連
  4. Dialogue: 0,0:05:00.80,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(870,1030)\fad(700,0)}勝
  5. Dialogue: 0,0:05:01.50,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(930,1030)\fad(1100,0)}丼
  6. Dialogue: 0,0:05:02.60,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(990,1030)\fad(800,0)}一
  7. Dialogue: 0,0:05:03.40,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(1050,1030)\fad(800,0)}直
  8. Dialogue: 0,0:05:04.20,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(1110,1030)\fad(800,0)}玩
複製代碼
上面我們可以看到效果都加到了作用行並各自輸出獨立的結果行,而上面用到了$sdur這個時間隱變數和$center$bottom這個位置隱變數。
$sdur表示該音節的長度,$center和$bottom將在下文以圖片詳細說明。
!retime("syl",0,$ldur-$end)!表示重設時間,表示使該行出現的時間為該音節的開頭到該行時間結束,用法則在下文說明。

template char
這個效果和template syl相當類似,不同點是template syl是以{\k}為單位作用,但是template char是以字元為單位作用,不受{\k}的影響,結果如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template char,Fuck
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,連勝丼Money
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck連
  4. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck勝
  5. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck丼
  6. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,FuckM
  7. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fucko
  8. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuckn
  9. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fucke
  10. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fucky
複製代碼
可以看出不論是全形或是半形文字,都是個別作用並輸出獨立的結果行。這裡需要注意的是,template char後面不可加noblank,會導致結果無法輸出。

template notext
這個指令表示在作用的同時,忽略作用行的內文,直接輸出template內文的結果,結果如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank notext,Fuck
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}連{\k70}勝{\k110}丼{\k80}一{\k80}直{\k80}玩
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck
  4. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck
  5. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck
  6. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck
  7. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck
  8. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Fuck
複製代碼
可以看到連勝丼一直玩完全沒有出現在結果行中。
另外一點值得注意的是,這個自動化指令使可以加在template line/syl/char後面的,表示說notext這個自動化指令是可以和line/syl/char同時存在的。
但是唯獨在template pre-line notext這個時候,notext並不會產生任何的效果,仍然會顯示作用行中的內文,也就是效果等同template pre-line,這點要特別注意。
這個指令通常是搭配圖形的效果而存在的,範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank,!retime("syl",0,$ldur-$end)!{\pos(!$center!,!$bottom!)\fad(!$sdur!,0)}
  2. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank notext,!retime("line",0,0)!{\an1\move(!$center!,!$bottom!,!$center!,!$bottom-50!)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
  3. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}連{\k70}勝{\k110}丼{\k80}一{\k80}直{\k80}玩
  4. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(810,1030)\fad(800,0)}連
  5. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\an1\move(810,1030,810,980)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
  6. Dialogue: 0,0:05:00.80,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(870,1030)\fad(700,0)}勝
  7. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\an1\move(870,1030,870,980)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
  8. Dialogue: 0,0:05:01.50,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(930,1030)\fad(1100,0)}丼
  9. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\an1\move(930,1030,930,980)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
  10. Dialogue: 0,0:05:02.60,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(990,1030)\fad(800,0)}一
  11. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\an1\move(990,1030,990,980)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
  12. Dialogue: 0,0:05:03.40,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(1050,1030)\fad(800,0)}直
  13. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\an1\move(1050,1030,1050,980)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
  14. Dialogue: 0,0:05:04.20,0:05:05.00,OP-jp,,0,0,0,fx,{\pos(1110,1030)\fad(800,0)}玩
  15. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,{\an1\move(1110,1030,1110,980)\p1}m -9 -7 l -9 -7 l -15 6 l 0 16 l 13 17 l 21 3 l 18 -7 l -1 -12 m 0 -5 l 10 -4 l 12 6 l 7 12 l -5 6 l -6 -1
複製代碼
可以看到中間輸出的幾行只有圖形,沒有文字。如果不巧在作用行中有英數字,notext則可以避免掉圖形可能會歪掉的麻煩。

template noblank
這個指令通常只會加在template syl的後面,也就是template syl noblank,這個指令是希望中間的空白k軸不要輸出時使用,如下圖所示:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank,!retime("syl",0,0)!Fuck
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}連{\k70}勝{\k110}丼{\k20}{\k60}一{\k80}直{\k80}玩
  3. Dialogue: 0,0:05:00.00,0:05:00.80,OP-jp,,0,0,0,fx,Fuck連
  4. Dialogue: 0,0:05:00.80,0:05:01.50,OP-jp,,0,0,0,fx,Fuck勝
  5. Dialogue: 0,0:05:01.50,0:05:02.60,OP-jp,,0,0,0,fx,Fuck丼
  6. Dialogue: 0,0:05:02.80,0:05:03.40,OP-jp,,0,0,0,fx,Fuck一
  7. Dialogue: 0,0:05:03.40,0:05:04.20,OP-jp,,0,0,0,fx,Fuck直
  8. Dialogue: 0,0:05:04.20,0:05:05.00,OP-jp,,0,0,0,fx,Fuck玩
複製代碼
再比較如果沒有加上noblank時輸出的結果:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl,!retime("syl",0,0)!Fuck
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}連{\k70}勝{\k110}丼{\k20}{\k60}一{\k80}直{\k80}玩
  3. Dialogue: 0,0:05:00.00,0:05:00.00,OP-jp,,0,0,0,fx,Fuck
  4. Dialogue: 0,0:05:00.00,0:05:00.80,OP-jp,,0,0,0,fx,Fuck連
  5. Dialogue: 0,0:05:00.80,0:05:01.50,OP-jp,,0,0,0,fx,Fuck勝
  6. Dialogue: 0,0:05:01.50,0:05:02.60,OP-jp,,0,0,0,fx,Fuck丼
  7. Dialogue: 0,0:05:02.60,0:05:02.80,OP-jp,,0,0,0,fx,Fuck
  8. Dialogue: 0,0:05:02.80,0:05:03.40,OP-jp,,0,0,0,fx,Fuck一
  9. Dialogue: 0,0:05:03.40,0:05:04.20,OP-jp,,0,0,0,fx,Fuck直
  10. Dialogue: 0,0:05:04.20,0:05:05.00,OP-jp,,0,0,0,fx,Fuck玩
複製代碼
可以看到這裡多出了第3行和第7行在Fuck的後面沒有文字出現,在這裡可以注意到事實上第3行並不會影響字幕出現的結果,因為這段時間的間隔是0,唯一會影響到的就是第7行。
在第2行的作用行可以注意到,中間有一個200ms沒有文字的音節,這個常在拉k軸的時候在同一行中因為中間沒有唱歌,往往這一個音節是空的,
但是有時候希望在這個間隔內仍然有特效圖形出現的話,這個noblank就建議不要加上去。
另外,這個指令也可以和notext同時使用,如template syl noblank notext

template keeptags
這個自動化指令表示保留作用行中的特效指令,這個指令只對template pre-line/line/syl有作用,對template char完全沒有影響,也就是template char keeptags的效果和template char完全一樣。
而template pre-linetemplate line/syl的效果又稍微不同,先比較template pre-line 和template pre-line keeptags的結果,如下圖:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line,Hellen
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Hellen煙燻最恩最合豆腐
複製代碼
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line keeptags,Hellen
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,Hellen{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
複製代碼
從上面的兩個例子可以看到,template pre-line這個指令完全忽略整個作用行內的所有特效指令,包含{\k}和{\fscx}全部都忽略,直接把template行後面的內文直接和作用行的內文執行後在結果行輸出。
而在template pre-line keeptags這個指令作用的時候,可以發現作用行內的所有特效指令都被保留了。
通常template pre-line keeptags會使用在一般字幕中如果要選定每一行字幕都出現例如像{\blur5\bord3}等特效,又不想改變字幕中可能有使用其他字型時,這個自動化指令就可以達到不改變字型的效果,範例如下:
  1. Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,template pre-line  keeptags,{\blur5\bord2}
  2. Comment: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,karaoke,我無法{\fnDFPPOP1W7-B5\fs80\c&HFFA4A3&}焗烤的{\r}
  3. Dialogue: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,fx,{\blur5\bord2}我無法{\fnDFPPOP1W7-B5\fs80\c&HFFA4A3&}焗烤的{\r}
複製代碼
從這例子可以觀察到,焗烤的的效果{\fnDFPPOP1W7-B5\fs80\c&HFFA4A3&}完全被保留了,如果不加keeptags的時候,則後面的效果會被完全忽略掉。
接下來說明template line和template line keeptags的差別,如下圖所示:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template line,D
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D煙D燻D最D恩D最D合D豆D腐
複製代碼
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template line keeptags,D
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D煙D燻D最D恩D{\fscx50}最D合D豆D腐
複製代碼
由這兩個例子可以觀察到,template line這個指令本身就是把{\k}取代成template行的內文,並且忽略作用行內所有的特效指令,
template line keeptags則一樣是把{\k}取代成template行的內文,但是這裡保留了{\k}以外的所有特效。
反之亦然,template syl (kepptags)和template line (kepptags)所產生的效果其實類似,如下圖所示:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank,D
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D煙
  4. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D燻
  5. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D最
  6. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D恩
  7. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D最
  8. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D合
  9. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D豆
  10. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D腐
複製代碼
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template syl noblank keeptags,D
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}煙{\k60}燻{\k30}最{\k70}恩{\k60\fscx50}最{\k40}合{\k80}豆{\k80}腐
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D煙
  4. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D燻
  5. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D最
  6. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D恩
  7. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D{\fscx50}最
  8. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D合
  9. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D豆
  10. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,D腐
複製代碼
從這個例子也可以看出,template syl則是把{\k}取代掉,忽略其他的特效指令,每個音節個別產生後輸出到結果行,
template syl keeptags則是把{\k}取代掉之後,保留{\k}以外的所有特效指令,並個別輸出到結果行。
另外,這個自動化指令和notextnoblank同時使用並沒有任何意義,而這個指令也就比較常和template pre-line同時使用而已。

template loop N
這個自動化指令的意思就是這一個template行對作用行執行N次的意思,其中N為正整數,如下圖:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line loop 3,連D最愛
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k50}甜{\k80}甜{\k90}圈{\k80}甜{\k100}甜{\k100}圈
  3. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,連D最愛甜甜圈甜甜圈
  4. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,連D最愛甜甜圈甜甜圈
  5. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,fx,連D最愛甜甜圈甜甜圈
複製代碼
可以看到template pre-line執行的果重複了3次,其他的template line/syl/char也會得到重複的效果。
通常這個指令會用在圖形的迴圈,範例如下:


由於這個輸出結果稍微冗長,這裡直接附上ass範本。這個自動化指令我給他迴圈5次,需要注意的是這個template行的內文!retime("presyl",(j-1)/maxj*$sdur,(j-1)/maxj*$sdur+500)!
上面用藍色字寫的jmaxj是一個迴圈變數,這個迴圈總共進行5次,所以這個maxj=5,第1次迴圈時,j=1,第2次迴圈時,j=2,最多跳到j=5時停止迴圈,
簡單來說,可以想成這個template行其實總共是有5行,第1行是!retime("presyl",1/5*$sdur,1/5*$sdur+500)!***,第2行是!retime("presyl",2/5*$sdur,2/5*$sdur+500)!***,以此類推,
!retime("presyl",t1,t2)!所指的是把每一個音節的時間重設為音節開頭往後的t1毫秒到音節開頭往後的t2毫秒的這段時間間隔,詳細也在下文的函數中說明。
在這個template行內文中的math.random(-100,100)是一個LUA函數,LUA函數裡面有包含指數函數、對數函數、三角函數、反三角函數、弧度、π等可以表示所有函數的基底,
有了這些函數就可以用近似的方法去畫出各種多項式函數或是特殊函數,如Gamma函數、Legendre函數、Bessel函數、Laguerre函數等有名的函數,這些函數的基底都可以查表。
而在這裡使用的math.random(-100,100)就是其中一種,這個是隨機函數,表示任意在[-100,100]之間任意選取一個整數。
事實上除了template loop N以外,還有一個類似的實用函數!maxloop(R)!可以達到一樣的效果,好處是R可以是任意大於0的實數
這個loop N可以和上面任何一個自動化指令同時使用,如template syl noblank notext loop 8

template fxgroup Name
在所有的template行之中,已經知道相同樣式的template行僅執行相同樣式的作用行,但是若只想執行某幾行的作用行的話,其中一個方法是把template行和想執行的作用行都改成另一個樣式名稱,
另一個方法則是在code行和角色欄上面動手腳,使用這個方法的話就會用到這個自動化指令,範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,code line all,fxgroup.Hellen01 = (line.actor == "eff001");fxgroup.Hellen02 = (line.actor == "eff002");fxgroup.Hellen03 = (line.actor == "eff003")
  2. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line fxgroup Hellen01,連D最愛
  3. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line fxgroup Hellen02,神豬最愛
  4. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line fxgroup Hellen03,連勝丼最愛
  5. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,eff001,0,0,0,karaoke,煙燻豆腐
  6. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,eff002,0,0,0,karaoke,滷味卷
  7. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,eff003,0,0,0,karaoke,甜甜圈
  8. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,eff003,0,0,0,karaoke,便秘好夥伴
  9. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,eff003,0,0,0,karaoke,13不整
  10. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,eff001,0,0,0,fx,連D最愛煙燻豆腐
  11. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,eff002,0,0,0,fx,神豬最愛滷味卷
  12. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,eff003,0,0,0,fx,連勝丼最愛甜甜圈
  13. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,eff003,0,0,0,fx,連勝丼最愛便秘好夥伴
  14. Dialogue: 0,0:05:00.00,0:05:05.00,OP-jp,eff003,0,0,0,fx,連勝丼最愛13不整
複製代碼
從上面的例子可以觀察到第2行作用到第5行,第3行作用到第6行,第4行作用到7~9行,而樣式全部都是OP-jp。要使用這個方法必須要先定義code行,也就是定義執行的規則,
注意第1行,特效欄必須是code line all,表示對每一個作用行執行以前,先讀取第1行的規則後才進行,
內文的fxgroup.Hellen01 = (line.actor == "eff001"); fxgroup.Hellen02 = (line.actor == "eff002"); fxgroup.Hellen03 = (line.actor == "eff003")則是運行規則,綠色字體表示可替換,
這句話翻譯成白話文就是template fxgroup Hellen01僅對角色欄eff001作用; template fxgroup Hellen02僅對角色欄eff002作用; template fxgroup Hellen03僅對角色欄eff003作用
在使用fxgroup Name的時候,這一行code指令是不可或缺的,用法可以死記,同樣地,這個語法也可以和template pre-line/line/syl/char共用,也可以和template notext/noblank/keeptags/loop N共用,
如template syl noblank notext loop 7 fxgroup KP


實用函數

在ass中,做自動化的同時,弱希望該行對某行可以進行某種變化,可以使用函數來重新定義你所期望輸出的結果。
在使用函數時,內文必須用兩個驚嘆號把函數夾進去,如 !retime("line",0,200)! ,其中retime為所使用的函數,()內的東西為函數的變數。
以下將對常使用的函數做一些解說。

retime("mode",t1,t2)
這個函數可以讓該行的時間做重新分配,用綠色字體表示的是變數,mode為時間分配的模式,常用的有8種,t1和t2分別為時間的起點和終點,時間的單位是毫秒(0.001秒)
但是t1和t2的起點和終點根據mode的不同,所定義的起點和終點也會不一樣。
下圖為表示每個模式的初始時間分配(t1=t2=0):

若要改變初始時間分配,示意圖如下:

須注意上圖的時間間隔Δtn≥0,表示該時間差的絕對值,另外藍色字體為隱變數(Inline variables)
這個隱變數為aegisub內建的code,其code功能很多,可以表示位置分配或是時間分配,而在這個函數中所使用的隱變數皆為時間分配的變數,而且是具有特定時間間隔的Δt
在這個函數底下,所用到時間隱變數如下圖:

在這裡要特別說明,常用的時間隱變數共有11種,分別為$ldur、$dur、$sdur、$kdur、$skdur、$start、$sstart、$end、$send、$mid、$smid,且隱變數的時間單位是毫秒,
但是這裡的$sdur=$dur、$kdur=$skdur、$start=$sstart、$end=$send、$mid=$smid,所以這樣扣下來只剩6種,為了方便,我們只需要記得這6種用法。
而又因$kdur=0.1*$sdur,$end=$start+$sdur,$mid=$start+0.5*$sdur,因此嚴格來說,只需要$start$sdur$ldur,3種就可以表示出所有的時間間隔。
上面解釋了retime的定義,這樣就可以再和前面的自動化指令結合寫出重設時間的字幕特效行。

範例一,template pre-line
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template pre-line,!retime("line",0,0.1*$ldur)!{\fscx0\t(0,!$ldur!,\fsc100)\t(!$ldur!,!1.1*$ldur!,\fscx0)}
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}我{\k20}不{\k60}要{\k70}跟{\k50}連{\k60}勝{\k70}文{\k40}一{\k50}樣
  3. Dialogue: 0,0:05:00.00,0:05:05.50,OP-jp,,0,0,0,fx,{\fscx0\t(0,5000,\fsc100)\t(5000,5500,\fscx0)}我不要跟連勝文一樣
複製代碼
從上面的例子來看,!retime("line",0,0.1*$ldur)!表示我讓作用行的時間終點重設成延後原時間長度的0.1倍,並且忽略作用行中的所有特效,
並把template行的內文{\fscx0\t(0,!$ldur!,\fsc100)\t(!$ldur!,!1.1*$ldur!,\fscx0)}加到作用行文字的最前面,輸出到結果行。
需要注意的是,隱變數已經在函數之內了,不用特地再用2個驚嘆號括起來。再次強調,凡是函數(包含實用函數或是LUA函數)或是隱變數,都必須要用2個驚嘆號括起來。
這裡的!$ldur!表示整個作用行的時間長度,在這個case裡面,該作用行的時間長度是5秒,因此$ldur=5000。

範例二,template syl


第1行的函數是!retime("start2syl",0,0)!,也就是讓每一個音節出現的時間為從該作用行的開始時間直到該音節開始時間為止
第2行的函數是!retime("syl",0,500)!,也就是讓每一個音節出現的時間為該音節的開始時間直到音節結束時間後500毫秒為止,這裡的函數也可以寫成!retime("presyl",0,$sdur+500)!,完全等價。
而這2個template行的內文中有使用\pos(!$center!,!$middle!),而這裡的$center$middle位置隱變數,可以重設該音節的字出現的位置,而這個位置是相對於作用行的,這裡在後面將會詳細介紹。
由上面的2行,事實上就可以構成一個完整有頭有尾的特效了,而一般歌詞特效的寫法也是類似這樣的結構。

範例三,template char


這裡需要注意的是作用行,跟範例二很像,但是這裡我把連勝文放在同一個音節,而template char又是以每個字元為單位作用,
因此可以看到第12~14行以及第15~17行時間分配的結果是一樣的,但是這裡因為我也放了位置隱變數\pos(!$center!,!$middle!),
而且又是以每個字元為單位作用,因為每個字分配的位置是相對於作用行的每個字,所以這裡輸出的位置也不同。
另外值得注意的是,如果是相同的內文,只是把template行中的特效欄改成template syl的話,結果也會稍微不同,結果如下:


從這個例子可以看到連勝文這3個字相當突兀,因為template syl他是以音節為單位去執行,而這3個字又在同一個音節內,因此連勝文會一起被作用。
而且這個位置隱變數也是相對於作用行內的連勝文這3個字為基準重設的,因此可以看到連勝文會黏在一起旋轉。

範例四,template line
  1. Comment: 0,0:00:00.00,0:00:00.00,OP-jp,,0,0,0,template line,!retime("line",0,500)!{\pos(!$lcenter!,!$lmiddle!)\an10\alpha&HFF&\fs5\t(!$start!,!$end!,\fs60\alpha&H00&)\t(!$ldur!,!$ldur+500!,\fs10\alpha&HFF&)}
  2. Comment: 0,0:05:00.00,0:05:05.00,OP-jp,,0,0,0,karaoke,{\k80}我{\k20}不{\k60}要{\k70}跟{\k70}連{\k70}勝{\k40}文{\k40}一{\k50}樣
  3. Dialogue: 0,0:05:00.00,0:05:09.50,OP-jp,,0,0,0,fx,{\pos(960,995)\an10\alpha&HFF&\fs5\t(0,800,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}我{\pos(960,995)\an10\alpha&HFF&\fs5\t(800,1000,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}不{\pos(960,995)\an10\alpha&HFF&\fs5\t(1000,1600,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}要{\pos(960,995)\an10\alpha&HFF&\fs5\t(1600,2300,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}跟{\pos(960,995)\an10\alpha&HFF&\fs5\t(2300,3000,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}連{\pos(960,995)\an10\alpha&HFF&\fs5\t(3000,3700,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}勝{\pos(960,995)\an10\alpha&HFF&\fs5\t(3700,4100,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}文{\pos(960,995)\an10\alpha&HFF&\fs5\t(4100,4500,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}一{\pos(960,995)\an10\alpha&HFF&\fs5\t(4500,5000,\fs60\alpha&H00&)\t(5000,5500,\fs10\alpha&HFF&)}樣
複製代碼
這裡會發現,我明明使用的是!retime("line",0,500)!,字面上的意思是整行的結束時間應該是作用行結束時間加上0.5秒才對,但是這裡卻變成了加4.5秒,而這就是在template line才會出現的特例!!
在template line之中,!retime("line",0,500)!正確的意思是整段輸出後的時間變為該作用行的起始時間到結束時間後0.5秒*音節數,在這個範例當中,因為總共有9個音節,因此這裡的結束時間多了4.5秒。
如果希望結果行出現的時間可以完整地設定在作用行後0.5秒的話,這裡的函數要改寫成!retime("line",0,500/$syln)!,而這裡的$syln也是隱變數,意思是該作用行的音節數

relayer(N)
這個函數相當簡單也容易理解,顧名思義就是讓每個輸出的結果重新定義層數,
這裡的N為不小於0的整數,用法範例如下:


第2行中的!relayer(10-syl.i)!就是重設層數的函數,而這裡的syl.iLUA變數,表示該行中的第i個音節,這個變數相當常用,
在結果行中,可以看到第5行是template行對作用行中的第1個音節作用,因此這裡的syl.i=110-syl.i=9,層數就是9;第7行是template行對作用行中的第2個音節作用,因此這裡的syl.i=2,層數就是8,以此類推,
仔細觀察輸出的效果,在第2行中內文因為有\fs60\t(0,!0.5*$dur!,\fs100)\t(!0.5*$sdur!,!$sdur!,\fs60),因為在中間字放大的同時,如果沒有使用relayer這個函數的話,會導致右邊的文字永遠蓋在左邊的文字上,
明明是放大,卻被比較小的文字壓住,相當不自然,因此在這裡設計成放大的字永遠壓在比較小的文字前面,並且設定愈右邊的字層數愈小,也就是左邊的字永遠在右邊文字之上。

maxloop(R)
這個函數和前面的自動化指令template loop N相當類似,但差別是這裡的R可以放隱變數,N只能是選定好的整數,而R可以是不小於0的實數
在前面的template loop N的範例中,N=5,也就是每一個音節只會噴出5顆星星,但是因為音節有常有短,又希望每顆星星之間噴出的時間間隔相同,這時候maxloop這個函數就派的上用場,以下是範例:


這裡我設定每顆星星噴出的時間間格是50ms,因此每一個音節就可以噴出$sdur/50顆星星,所以這裡我就設定的函數為!maxloop($sdur/50)!,
需要注意的是!maxloop(R)!的R可以是不小於0的實數,如果R不是整數,則迴圈次數會判定成把R後面的小數點無條件進位也就是!maxloop(8.08)!=template loop 9,!maxloop(math.pi)!=template loop 4
上面用到的math.pi也是LUA函數,意思就是圓周率π,所以math.pi=3.1415926535...,因此小數點後面進位之後,就同等於是template loop 4
而時間重設函數!retime("presyl",(j-1)*50,(j-1)*50+500)!則就是設定每顆星星出現的時間長短及順序,每顆星星出現的時間長短是500ms,星星則每隔50ms就出現,出現的示意圖如下:

這裡使用了函數!retime("presyl",ti,tf)!,只須要在這個函數調整星星出現的時間(ti、tf)即可,首先Δtd是每顆星星的間隔時間,Δtl是星星出現的時間長短,
由上面的圖可以輕易看出,ti是星星的開頭時間,tf是星星的結束時間,而ti和tf的關係式如上圖,且j=1,2,3,...,[$sdur/Δtd]
在這個case裡面,Δtd=50Δtl=500,可以任意調整。

隱變數
在前文提到了很多時間隱變數和位置隱變數,但不論是哪一種隱變數,隱變數輸出的結果就是一個數字,也就是在retime裡面也可以放上位置隱變數,如!retime("line",$lcenter,$syln)!之類的
之所以$start、$sdur、$ldur稱為時間隱變數,是因為它們讀取了作用行中的時間訊息而輸出一個數值,同理,$center、$lx、$bottom...等之所以稱為位置隱變數,是因為讀取了作用行中的位置訊息而輸出一個數值,
當然也有一些隱變數既非時間隱變數也非位置隱變數,如$syln$si,我們稱之為特殊隱變數
在前面retime的章節中我們已經詳細討論的時間隱變數的功能,這個章節裡面將詳細描述位置隱變數以及特殊隱變數。

位置隱變數
首先介紹跟作用行整行相關的位置隱變數,有$lleft、$lcenter、$lright、$ltop、$lmiddle、$lbottom、$lx、$ly、$lheight、$lwidth,共10種,其位置示意圖如下:

($lleft,$ltop)表示說這2個隱變數讀取該點的座標,也就是$lleft=作用行文字左邊邊緣的x座標$ltop=作用行文字上面邊緣的y座標
($lcenter,$lbottom)同理,也就是$lcenter=作用行文字中心的x座標$lbottom=作用行文字下面邊緣的y座標,以此類推。
而這裡的($lx,$ly)則是隨著作用行的預設樣式改變,如果該作用行的樣式編輯器內,對齊如果選擇7,則($lx,$ly)=($lleft.$ltop);若選擇2,則($lx,$ly)=($lcenter,$lbottom),以此類推。
$lheight則是該作用行文字的高度,也就是$lheight=$lbottom-$ltop$lwidth則是該作用行文字的寬度,但是關係式稍微不同,關係式為$lwidth=$lright-$lleft+1,但實際上沒有差很多,可以直接使用。
通常這個隱變數是拿來做重新定位使用,範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template line notext,!retime("line",0,0)!{\an2\pos(!$lleft!,!$ltop!)\fs30}●
  2. Comment: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,karaoke,台灣獨立
  3. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(820,935)\fs30}●
複製代碼
這裡可以看到結果行位置中心被重新定位,請注意是位置中心,也就是的位置,如果template內的{\an2}改成{\an5},則template內文的則和位置中心重疊。
在這個範例當中,輸出結果後,暫時先將作用行的註解欄的勾取消,可以看到輸出後的位置中心和原先的內文的關係,如下圖:

可以看到(!$lleft!,!$ltop!)對齊的位置剛好就是台灣獨立的左上角,如果使用別的位置隱變數,輸出的結果也會跟著改變,可以自己操作看看。
介紹完和作用行整行相關的隱變數之後,接著介紹和音節相關的隱變數,$left、$center、$right、$top、$middle、$bottom、$x、$y、$height、$width,共10種,其位置示意圖如下:

可以看到音節的位置隱變數的位置分配和整行的分配是相當類似的,只是這個隱變數是以音節為單位執行,
($left,$top)表示說這2個隱變數讀取該點的座標,也就是$left=作用行中該音節文字左邊邊緣的x座標$top=作用行中該音節文字上面邊緣的y座標
($center,$bottom)同理,也就是$lcenter=作用行文字中該音節中心的x座標$bottom=作用行中該音節文字下面邊緣的y座標,以此類推。
同樣地,($x,$y)也是隨著預設樣式的改變而改變。
且這裡的$width=$left-$right$height=$bottom-$top,不會有+1的關係式出現。
音節定位的範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template syl noblank notext,!retime("line",0,0)!{\an5\pos(!$center!,!$middle!)\fs30}●
  2. Comment: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,karaoke,{\k125}台{\k125}灣{\k125}獨{\k125}立
  3. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an5\pos(855,973)\fs30}●
  4. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an5\pos(925,973)\fs30}●
  5. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an5\pos(995,973)\fs30}●
  6. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an5\pos(1065,973)\fs30}●
複製代碼
因為(!$center!,!$middle!)是設定在每個音節文字的正中央,因此可以觀察到template行的全部被定位在每個文字的正中央。
另外這個音節位置隱變數中,每一個隱變數前加s的效果是相同的,也就是$center=$scenter$left=$sleft,以此類推。

特殊隱變數
特殊隱變數在這裡只介紹經常使用的,只有$si$slyn,而$si=$i
$syln的意思就是整行的音節數,$si就是該行的第i個音節。通常這個隱變數是用在有隨音節漸變效果的情況,範例如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template syl noblank,!retime("line",0,0)!{\an2\pos(!$center!,!$bottom!)\fs!$syln*4+$si*5!}
  2. Comment: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,karaoke,{\k50}國{\k50}民{\k50}黨{\k50}不{\k50}倒 {\k50}台{\k50}灣{\k50}不{\k50}會{\k50}好
  3. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(636,1010)\fs45}國
  4. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(706,1010)\fs50}民
  5. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(776,1010)\fs55}黨
  6. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(846,1010)\fs60}不
  7. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(916,1010)\fs65}倒
  8. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1004,1010)\fs70}台
  9. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1074,1010)\fs75}灣
  10. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1144,1010)\fs80}不
  11. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1214,1010)\fs85}會
  12. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1284,1010)\fs90}好
複製代碼
從這個例子可以看到,作用行中總共有10個音節,因此這裡$syln=10是第1個音節,所以$si=1是第2個音節,所以$si=2,以此類推。
可以看到我的隱變數放在{\fs!$syln*4+$si*5!}裡面,也就是每執行1個音節,字型大小從{\fs45}~{\fs90}漸漸變化,所以畫面就會看到字體由左而右愈來愈大。

LUA函數
在前文中有介紹到math.random(Z1,Z2)和math.pi這個LUA函數,在使用LUA函數的時候也是必須要用2個驚嘆號把函數括起來,用法如下:
  1. Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template syl noblank,!retime("line",0,0)!{\an2\pos(!$center!,!$bottom!)\fs!50+30*math.sin($si)!}
  2. Comment: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,karaoke,{\k50}國{\k50}民{\k50}黨{\k50}不{\k50}倒 {\k50}台{\k50}灣{\k50}不{\k50}會{\k50}好
  3. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(636,1010)\fs75.244129544237}國
  4. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(706,1010)\fs77.27892280477}民
  5. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(776,1010)\fs54.233600241796}黨
  6. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(846,1010)\fs27.295925140762}不
  7. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(916,1010)\fs21.232271760106}倒
  8. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1004,1010)\fs41.617535054032}台
  9. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1074,1010)\fs69.709597961564}灣
  10. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1144,1010)\fs79.680747398701}不
  11. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1214,1010)\fs62.363554557253}會
  12. Dialogue: 0,0:05:00.00,0:05:05.00,Default,,0,0,0,fx,{\an2\pos(1284,1010)\fs33.679366673319}好
複製代碼
在template行中,{\fs}這個特效語法裡面我用了math.sin(R)這個函數,這個就是sin函數,也是其中一個LUA函數。
在這個章節中,將介紹常使用的LUA函數。

特殊隱變數

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?立即註冊

x
推文

使用道具 舉報

您需要登入後才可以推文 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|論壇導覽|TUCaptions

GMT+8, 2020-10-31 10:12 , Processed in 0.077369 second(s), 16 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. 技術支持 by 巔峰設計.

快速回復 返回頂部 返回列表