TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 6542|回复: 0

[完整特效] [Seek] 罪恶王冠 Guilty Crown OP2 [复制链接]

Rank: 4

发表于 2021-7-16 02:18:26 |显示全部楼层
本帖最后由 Seekladoom 于 2021-7-18 23:45 编辑

最近复习了一下TCAX的用法,用夏天前辈分享的代码([附加效果] ext_fluf002)改了下配合彗星体中日匹配做了罪恶王冠OP2的特效,太久没人做动画这块的科幻风歌词特效了。。。_(:з」∠)_

另外这六边形代码我暂时还没找到精简的方法,做两段效果时复制粘贴了一次,不知道有没有方法只留一段六边形代码然后跨行给多个ass_main行使用(找到方法了我还会再改的)。。。_(:з」∠)_

内附ass、py、tcc文件以及字体文件的下载链接:
[Seek] 罪恶王冠 Guilty Crown OP2.rar (0 Bytes, 下载次数: 2014)

在线预览:
【歌词特效】罪恶王冠 OP2

注:以后我自己写的中日双语特效,tcc文件中的字体名称一律使用Sarasa Gothic J Semibold(更纱黑体日文版的Semibold字重),这个字体的字数足够多(换成微软雅黑、黑体、楷体、平方等字数在27000以上的字体也行,没有的话就把字体装上。),因此可以确保TCAX运行时不会因为TCC中的日文或中文字体缺字而无法正常运行,具体的中日字体名称修改可以放到py脚本中去修改即可,就像下面这样:
  1. fn('FOT-Comet Std B')
  2. fn('MZhiHei PRC UltraBold')
复制代码
如此一来也算是让TCAX在字体上挣脱了必须在TCC文件中修改字体名称且只能用英文名称的限制了。

单段特效:红色文字和六边形
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _FD                              # frame duration, in millisecond
  4.     global _Blur, _Bord
  5.     global _FS
  6.     _FD = 1000 / GetVal(val_FXFPS)
  7.     _Blur = GetVal(val_Blur)
  8.     _Bord = GetVal(val_Bord)
  9.     _FS = GetVal(val_FontSize)

  10. def tcaxPy_Fin():
  11.     pass

  12. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  13.     ASS_BUF = []        # used for saving ASS FX lines
  14.          
  15.     # ----------OPJP----------
  16.     if _i < 12:
  17.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,1,'OPJP'), pos(_x,_y)+color1('1F20EF')+color3('FFFFFF')+b(1)+blur(4)+fad(200,0)+fn('FOT-Comet Std B'), _txt)                                 #入场特效 - start2syl
  18.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,1,'OPJP'), pos(_x,_y)+color1('1F20EF')+color3('FFFFFF')+t(color1('FFFFFF')+color3('1F20EF'))+b(1)+blur(4)+fn('FOT-Comet Std B'), _txt)     #卡拉OK特效 - syl
  19.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,1,'OPJP'), pos(_x,_y)+color1('FFFFFF')+color3('1F20EF')+b(1)+blur(4)+fad(0,200)+fn('FOT-Comet Std B'), _txt)                         #退场特效 - syl2end
  20.         
  21.         hexagon = 'm -6 -10 l 6 -10 l 12 0 l 6 10 l -6 10 l -12 0 l -6 -10 '
  22.         clist = []
  23.         able = []
  24.         f = 10
  25.         zoom1 = 45
  26.         zoom2 = 52
  27.         initx = int(GetVal(5) // 2 - _n / 2 * _FS - 55)
  28.         lastx = int(GetVal(5) // 2 + _n / 2 * _FS + 55)
  29.         inity = int(_y - _FS)
  30.         for x in range(initx - f * 1 , lastx + _a + f * 2, f * 2):
  31.             for y in range(inity - f * 0, _y + _FS + f * 1, f):
  32.                 clist.append((x, y))
  33.         for x in range(initx - f * 2 , lastx + _a + f * 1, f * 2):
  34.             for y in range(inity - f // 2 - f * 0, _y + _FS - f // 2 + f * 1, f):
  35.                 clist.append((x, y))
  36.         for (px, py) in clist:
  37.             if (px - _x) ** 2 + (py - _y) ** 2 <= 30 ** 2:
  38.                 able.append((px, py))

  39.         count = int(_k * 1.6)
  40.         for i in range(count):
  41.             pt = choice(able)
  42.             px = pt[0]
  43.             py = pt[1]
  44.             st = randint(_start + _elapk - 10, _start + _elapk + _k)
  45.             et = st + randint(55, 75)
  46.             if st >= _start + _elapk + _k - 5:
  47.                 et = st + randint(70, 100)
  48.             dur = et - st - 10
  49.             transp = 50
  50.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP'), pos(px, py+10) + color3('FFFFFF') + color1('1F20EF') + alpha1(255) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom1, zoom1), r'{\\p1}'+ hexagon +'{\\p0}')
  51.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP'), pos(px, py+10) + color3('FFFFFF') + color1('1F20EF') + alpha1(100) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom2, zoom2), r'{\\p1}'+ hexagon +'{\\p0}')
  52.      
  53.     # ----------OPCN----------
  54.     if _i > 11:
  55.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_end-(_n-_j-1)*3+20,1,'OPCN'), pos(_x,_y+993)+color1('FFFFFF')+color3('1F20EF')+blur(4)+fad(200,200)+fax(-0.11)+fn('MZhiHei PRC UltraBold')+fs(66)+fscx(85)+'\\fsp11', _txt)  #整体特效 - line

  56.     return (ASS_BUF, None)
复制代码

两段特效:红色文字和六边形+蓝色文字和六边形

写法1:直接复制粘贴
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _FD                              # frame duration, in millisecond
  4.     global _Blur, _Bord
  5.     global _FS
  6.     _FD = 1000 / GetVal(val_FXFPS)
  7.     _Blur = GetVal(val_Blur)
  8.     _Bord = GetVal(val_Bord)
  9.     _FS = GetVal(val_FontSize)

  10. def tcaxPy_Fin():
  11.     pass

  12. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  13.     ASS_BUF = []        # used for saving ASS FX lines
  14.          
  15.     # ----------OPJP----------
  16.     if _i < 6:
  17.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,1,'OPJP'), pos(_x,_y)+color1('1F20EF')+color3('FFFFFF')+b(1)+blur(4)+fad(200,0)+fn('FOT-Comet Std B'), _txt)                                 #入场特效 - start2syl
  18.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,1,'OPJP'), pos(_x,_y)+color1('1F20EF')+color3('FFFFFF')+t(color1('FFFFFF')+color3('1F20EF'))+b(1)+blur(4)+fn('FOT-Comet Std B'), _txt)     #卡拉OK特效 - syl
  19.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,1,'OPJP'), pos(_x,_y)+color1('FFFFFF')+color3('1F20EF')+b(1)+blur(4)+fad(0,200)+fn('FOT-Comet Std B'), _txt)                         #退场特效 - syl2end
  20.         
  21.         hexagon = 'm -6 -10 l 6 -10 l 12 0 l 6 10 l -6 10 l -12 0 l -6 -10 '
  22.         clist = []
  23.         able = []
  24.         f = 10
  25.         zoom1 = 45
  26.         zoom2 = 52
  27.         initx = int(GetVal(5) // 2 - _n / 2 * _FS - 55)
  28.         lastx = int(GetVal(5) // 2 + _n / 2 * _FS + 55)
  29.         inity = int(_y - _FS)
  30.         for x in range(initx - f * 1 , lastx + _a + f * 2, f * 2):
  31.             for y in range(inity - f * 0, _y + _FS + f * 1, f):
  32.                 clist.append((x, y))
  33.         for x in range(initx - f * 2 , lastx + _a + f * 1, f * 2):
  34.             for y in range(inity - f // 2 - f * 0, _y + _FS - f // 2 + f * 1, f):
  35.                 clist.append((x, y))
  36.         for (px, py) in clist:
  37.             if (px - _x) ** 2 + (py - _y) ** 2 <= 30 ** 2:
  38.                 able.append((px, py))

  39.         count = int(_k * 1.6)
  40.         for i in range(count):
  41.             pt = choice(able)
  42.             px = pt[0]
  43.             py = pt[1]
  44.             st = randint(_start + _elapk - 10, _start + _elapk + _k)
  45.             et = st + randint(55, 75)
  46.             if st >= _start + _elapk + _k - 5:
  47.                 et = st + randint(70, 100)
  48.             dur = et - st - 10
  49.             transp = 50
  50.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP'), pos(px, py+10) + color3('FFFFFF') + color1('1F20EF') + alpha1(255) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom1, zoom1), r'{\\p1}'+ hexagon +'{\\p0}')
  51.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP'), pos(px, py+10) + color3('FFFFFF') + color1('1F20EF') + alpha1(100) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom2, zoom2), r'{\\p1}'+ hexagon +'{\\p0}')

  52.     # ----------OPJP2----------
  53.     if _i > 5 and _i < 12:
  54.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,1,'OPJP2'), pos(_x,_y)+color1('FFBC11')+color3('FFFFFF')+b(1)+blur(4)+fad(200,0)+fn('FOT-Comet Std B'), _txt)                                 #入场特效 - start2syl
  55.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,1,'OPJP2'), pos(_x,_y)+color1('FFBC11')+color3('FFFFFF')+t(color1('FFFFFF')+color3('FFBC11'))+b(1)+blur(4)+fn('FOT-Comet Std B'), _txt)     #卡拉OK特效 - syl
  56.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,1,'OPJP2'), pos(_x,_y)+color1('FFFFFF')+color3('FFBC11')+b(1)+blur(4)+fad(0,200)+fn('FOT-Comet Std B'), _txt)   
  57.         
  58.         hexagon = 'm -6 -10 l 6 -10 l 12 0 l 6 10 l -6 10 l -12 0 l -6 -10 '
  59.         clist = []
  60.         able = []
  61.         f = 10
  62.         zoom1 = 45
  63.         zoom2 = 52
  64.         initx = int(GetVal(5) // 2 - _n / 2 * _FS - 55)
  65.         lastx = int(GetVal(5) // 2 + _n / 2 * _FS + 55)
  66.         inity = int(_y - _FS)
  67.         for x in range(initx - f * 1 , lastx + _a + f * 2, f * 2):
  68.             for y in range(inity - f * 0, _y + _FS + f * 1, f):
  69.                 clist.append((x, y))
  70.         for x in range(initx - f * 2 , lastx + _a + f * 1, f * 2):
  71.             for y in range(inity - f // 2 - f * 0, _y + _FS - f // 2 + f * 1, f):
  72.                 clist.append((x, y))
  73.         for (px, py) in clist:
  74.             if (px - _x) ** 2 + (py - _y) ** 2 <= 30 ** 2:
  75.                 able.append((px, py))

  76.         count = int(_k * 1.6)
  77.         for i in range(count):
  78.             pt = choice(able)
  79.             px = pt[0]
  80.             py = pt[1]
  81.             st = randint(_start + _elapk - 10, _start + _elapk + _k)
  82.             et = st + randint(55, 75)
  83.             if st >= _start + _elapk + _k - 5:
  84.                 et = st + randint(70, 100)
  85.             dur = et - st - 10
  86.             transp = 50
  87.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP2'), pos(px, py+10) + color3('FFFFFF') + color1('FFBC11') + alpha1(255) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom1, zoom1), r'{\\p1}'+ hexagon +'{\\p0}')
  88.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP2'), pos(px, py+10) + color3('FFFFFF') + color1('FFBC11') + alpha1(100) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom2, zoom2), r'{\\p1}'+ hexagon +'{\\p0}')
  89.             
  90.     # ----------OPCN----------
  91.     if _i > 11 and _i < 18:
  92.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_end-(_n-_j-1)*3+20,1,'OPCN'), pos(_x,_y+993)+color1('FFFFFF')+color3('1F20EF')+blur(4)+fad(200,200)+fax(-0.11)+fn('MZhiHei PRC UltraBold')+fs(66)+fscx(85)+'\\fsp11', _txt)  #整体特效 - line
  93.    
  94.     # ----------OPCN2----------
  95.     if _i > 17:
  96.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_end-(_n-_j-1)*3+20,1,'OPCN2'), pos(_x,_y+993)+color1('FFFFFF')+color3('FFBC11')+blur(4)+fad(200,200)+fax(-0.11)+fn('MZhiHei PRC UltraBold')+fs(66)+fscx(85)+'\\fsp11', _txt)  #整体特效 - line

  97.     return (ASS_BUF, None)
复制代码


写法2:
为节省代码行数,把绘图代码的if代码块写进for循环
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _FD                              # frame duration, in millisecond
  4.     global _Blur, _Bord
  5.     global _FS
  6.     _FD = 1000 / GetVal(val_FXFPS)
  7.     _Blur = GetVal(val_Blur)
  8.     _Bord = GetVal(val_Bord)
  9.     _FS = GetVal(val_FontSize)

  10. def tcaxPy_Fin():
  11.     pass

  12. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  13.     ASS_BUF = []        # used for saving ASS FX lines
  14.    
  15.     # ----------tcax line----------
  16.     hexagon = 'm -6 -10 l 6 -10 l 12 0 l 6 10 l -6 10 l -12 0 l -6 -10 '
  17.     hlist = []
  18.     able = []
  19.     f = 10
  20.     zoom1 = 45
  21.     zoom2 = 52
  22.     initx = int(GetVal(5) // 2 - _n / 2 * _FS - 55)
  23.     lastx = int(GetVal(5) // 2 + _n / 2 * _FS + 55)
  24.     inity = int(_y - _FS)
  25.     for x in range(initx - f * 1 , lastx + _a + f * 2, f * 2):
  26.         for y in range(inity - f * 0, _y + _FS + f * 1, f):
  27.             hlist.append((x, y))
  28.     for x in range(initx - f * 2 , lastx + _a + f * 1, f * 2):
  29.         for y in range(inity - f // 2 - f * 0, _y + _FS - f // 2 + f * 1, f):
  30.             hlist.append((x, y))
  31.     for (px, py) in hlist:
  32.         if (px - _x) ** 2 + (py - _y) ** 2 <= 30 ** 2:
  33.             able.append((px, py))

  34.     count = int(_k * 1.6)
  35.     for i in range(count):
  36.         pt = choice(able)
  37.         px = pt[0]
  38.         py = pt[1]
  39.         st = randint(_start + _elapk - 10, _start + _elapk + _k)
  40.         et = st + randint(55, 75)
  41.         if st >= _start + _elapk + _k - 5:
  42.             et = st + randint(70, 100)
  43.         dur = et - st - 10
  44.         transp = 50

  45.     # ----------绘图代码行----------
  46.         if _i < 6:#OPJP
  47.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP'), pos(px, py+10) + color3('FFFFFF') + color1('1F20EF') + alpha1(255) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom1, zoom1) + p(1), hexagon)
  48.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP'), pos(px, py+10) + color3('FFFFFF') + color1('1F20EF') + alpha1(100) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom2, zoom2) + p(1), hexagon)

  49.         if _i > 5 and _i < 12:#OPJP2
  50.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP2'), pos(px, py+10) + color3('FFFFFF') + color1('FFBC11') + alpha1(255) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom1, zoom1) + p(1), hexagon)
  51.             ass_main(ASS_BUF, SubL(st, et, 0, 'OPJP2'), pos(px, py+10) + color3('FFFFFF') + color1('FFBC11') + alpha1(100) + alpha3(transp) + bord(1) + fad(100, dur * 10) + fsc(zoom2, zoom2) + p(1), hexagon)
  52.          
  53.     # ----------文本行----------
  54.     if _i < 6:#OPJP
  55.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,1,'OPJP'), pos(_x,_y)+color1('1F20EF')+color3('FFFFFF')+b(1)+blur(4)+fad(200,0)+fn('FOT-Comet Std B'), _txt)                                 #入场特效 - start2syl
  56.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,1,'OPJP'), pos(_x,_y)+color1('1F20EF')+color3('FFFFFF')+t(color1('FFFFFF')+color3('1F20EF'))+b(1)+blur(4)+fn('FOT-Comet Std B'), _txt)     #卡拉OK特效 - syl
  57.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,1,'OPJP'), pos(_x,_y)+color1('FFFFFF')+color3('1F20EF')+b(1)+blur(4)+fad(0,200)+fn('FOT-Comet Std B'), _txt)                         #退场特效 - syl2end
  58.    
  59.     if _i > 5 and _i < 12:#OPJP2
  60.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,1,'OPJP2'), pos(_x,_y)+color1('FFBC11')+color3('FFFFFF')+b(1)+blur(4)+fad(200,0)+fn('FOT-Comet Std B'), _txt)                                 #入场特效 - start2syl
  61.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,1,'OPJP2'), pos(_x,_y)+color1('FFBC11')+color3('FFFFFF')+t(color1('FFFFFF')+color3('FFBC11'))+b(1)+blur(4)+fn('FOT-Comet Std B'), _txt)     #卡拉OK特效 - syl
  62.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,1,'OPJP2'), pos(_x,_y)+color1('FFFFFF')+color3('FFBC11')+b(1)+blur(4)+fad(0,200)+fn('FOT-Comet Std B'), _txt)                         #退场特效 - syl2end
  63.       
  64.     if _i > 11 and _i < 18:#OPCN
  65.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_end-(_n-_j-1)*3+20,1,'OPCN'), pos(_x,_y+993)+color1('FFFFFF')+color3('1F20EF')+blur(4)+fad(200,200)+fax(-0.11)+fn('MZhiHei PRC UltraBold')+fs(66)+fscx(85)+'\\fsp11', _txt)  #整体特效 - line
  66.    
  67.     if _i > 17:#OPCN2
  68.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_end-(_n-_j-1)*3+20,1,'OPCN2'), pos(_x,_y+993)+color1('FFFFFF')+color3('FFBC11')+blur(4)+fad(200,200)+fax(-0.11)+fn('MZhiHei PRC UltraBold')+fs(66)+fscx(85)+'\\fsp11', _txt)  #整体特效 - line

  69.     return (ASS_BUF, None)
复制代码


您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-6-25 16:49

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH