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

 找回密码
 加入社区
查看: 2688|回复: 14

[完整特效] [jiji]010_Sword Art OnlineⅡ OP Karaoke effect [复制链接]

Rank: 5Rank: 5

发表于 2014-7-27 02:22:48 |显示全部楼层
日文py
  1. from tcaxPy import *
  2. from s import *
  3. from util.gdiFont import *  #加入GDIfont模块
  4. from util.tcCurve import *
  5. import math
  6. import random


  7. def tcaxPy_Init():
  8.     global _FontFileName
  9.     global _FaceID
  10.     global _Fs
  11.     global _TextWidth
  12.     global _TextHeight
  13.     global _TextLength
  14.     global _TextAdvDiff
  15.     global _ResolutionX
  16.     global _FD
  17.     global _TextInitX
  18.     global _Ascender        # 字体上行高度
  19.     global _Descender        # 字体下行高度 通常为负数
  20.     global _H
  21.     global _3C
  22.     global _KarTime         
  23.     _KarTime = GetVal(val_KarTime)# 第i句卡拉OK歌词的第j个字符的Karaoke时间 = !$start!
  24.     _H = GetVal(val_FontSize)
  25.     _3C = GetVal(val_3C)
  26.     _FontFileName = GetVal(val_FontFileName)
  27.     _FaceID       = GetVal(val_FaceID)
  28.     _Fs           = GetVal(val_FontSize)
  29.     _Ascender = GetVal(val_Ascender) #字体上行高度
  30.     _TextHeight   = GetVal(val_TextHeight)# 第i句卡拉OK歌词的j个字符的高度
  31.     _TextWidth    = GetVal(val_TextWidth)# 第i句卡拉OK歌词的j个字符的宽度
  32.     _TextLength   = GetVal(val_TextLength)# 第i句卡拉OK歌词的文字总长度
  33.     _TextAdvDiff  = GetVal(val_TextAdvanceDiff)# 从初始位置到第i句卡拉OK歌词的j个字符的水平步距
  34.     _TextInitX  = GetVal(val_TextInitX)
  35.     _ResolutionX  = GetVal(val_ResolutionX)
  36.     _FD           = 1000 / GetVal(val_FXFPS)
  37.     global GdiFont   #GDIfont
  38.     GdiFont = gfInitFont(GetVal(val_FontFaceName), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0, False)   #GDIfont
  39.     global Font
  40.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)



  41. def p(y):#绘图缩放代码
  42.     if y == int(y):
  43.         Y = str(int(y))
  44.     else:
  45.         Y = str(format(y, '.2f'))
  46.     return '\\p{0}'.format(Y)
  47.    
  48. def frxyz(x):
  49.     X1 = randint(-x,x)
  50.     X2 = randint(-x,x)
  51.     X3 = randint(-x,x)
  52.     return frx(X1)+fry(X2)+frz(X3)

  53.    


  54. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):
  55.     ASS_BUF = []                # 用于保存ASS特效
  56.     _7X = _X - int(_A / 2 + 0.5)              #每个字的上X坐标= !$left!
  57.     _7Y = _Y - int(_H / 2 + 0.5)              #每个字的上Y坐标=!$top!
  58.     _bottom = _Y + int(_H / 2 + 0.5)              #每个字的下Y坐标





  59.     if (_i > -1 and _i < 2) or (_i> 8 and _i<11) :
  60.         
  61.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X, _Y)+frx(90)+blur(2)+t(frx(360))+fad(200,0), _TXT)
  62.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  63.         for i in range(_BT+_SK,_BT+_SK+_KT):
  64.             R=randint(-30,30)
  65.             ass_main(ASS_BUF, SubL(i, i+10),move(_X+randint(-2,2),_Y+randint(-2,2),_X,_Y)+blur(5)+alpha1(150)+alpha3(150)+fscx(100+R)+fscy(100+R)+fad(0,100), _TXT)
  66.         ass_main(ASS_BUF,SubL(_BT+_SK+_KT,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)
  67.         ass_main(ASS_BUF,SubL(_ET,_ET+15,2),an(5)+pos(_X,_Y)+color1("FFFFFF")+color3("000000")+blur(1)+bord(1)+fad(0,50)+t(10,80,color1("030291")+color3("030291")+blur(5)) ,_TXT)
  68.         
  69.     elif _i == 2 or _i== 11 :
  70.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X, _Y)+frx(90)+blur(2)+t(frx(360))+fad(200,0), _TXT)
  71.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  72.         for i in range(_BT+_SK,_BT+_SK+_KT):
  73.             R=randint(-30,30)
  74.             ass_main(ASS_BUF, SubL(i, i+10),move(_X+randint(-2,2),_Y+randint(-2,2),_X,_Y)+shad(0)+blur(5)+alpha1(150)+alpha3(150)+fscx(100+R)+fscy(100+R)+fad(0,100), _TXT)
  75.         ass_main(ASS_BUF,SubL(_BT+_SK+_KT,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)
  76.         for j in range(8):
  77.             ass_main(ASS_BUF,SubL(_ET,_ET+20,2),an(5)+t(frxyz(360)+fsc(0,0))+move(_X,_Y,_X+randint(-200,200),_Y+randint(-200,200))+fad(0,120) ,_TXT)
  78.             
  79.     elif (_i > 2 and _i < 9):
  80.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X, _Y)+frx(90)+blur(2)+t(frx(360))+fad(200,0), _TXT)
  81.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  82.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT),an(5)+blur(2)+pos(_X,_Y)+t(0,_KT*5,fsc(130,130)+frz(10*(-1)**_j)+blur(9)+bord(3))+t(_KT*5,_KT*10,fsc(100,100)+blur(2)+frz(0)), _TXT)
  83.         
  84.         for k in range(2):# 曲线数
  85.             posX1 = _X+random.uniform(-_A,-_A/2)
  86.             posX2 =_X+random.uniform(-_A/2,_A)
  87.             PP  = [(posX1, _Y),(posX1, _Y),(posX1, _Y),(_X+random.uniform(-_A*3.5,_A*1.5), _Y+randint(-80,90)), (_X+random.uniform(-_A*1.5,_A*1.5), _Y+randint(-60,20)),(posX2 ,_Y),(posX2,_Y),(posX2 ,_Y)]
  88.             ucb = UCBSpline(PP)     #使用ucb
  89.             L = ucb.length()       # 曲线总长度
  90.             STEP_N = _KT*3       # 取样点数
  91.             step_size = 1 / STEP_N
  92.             print('控制点: {0}    曲线总长度: {1:.02f}    所取点数: {2}'.format(len(PP), L, STEP_N))
  93.             t1 = 0
  94.             POS = []
  95.             for w in range(int(STEP_N/2)):
  96.                 POS.append(UniformCubicBSpline(PP,w * step_size))
  97.                 particle = RandPolygon(12/5, 12/8, 4)
  98.                 BT2=_BT+_SK-20+w*1
  99.                 ET2=_BT+_SK-20+70+(w+1)*1
  100.                 EFT2=alt(BT2,ET2, t = 80 , FX1 =alpha(0), FX2 = alpha(255), offset = 0, a1 = None,a2 = None)
  101.                 ass_main(ASS_BUF, SubL(BT2, ET2,11), an(5)+t(frxyz(720))+bord(1)+shad(0)+blur(2)+color3("38504D")+EFT2+ move(POS[w][0], POS[w][1],POS[w][0]+randint(-15,15), POS[w][1]+randint(-15,15)) +fad(100,200), particle ) #曲线
  102.                
  103.         ass_main(ASS_BUF,SubL(_BT+_SK+_KT,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)
  104.         ass_main(ASS_BUF,SubL(_ET,_ET+15,2),an(5)+pos(_X,_Y)+color1("FFFFFF")+color3("000000")+blur(1)+bord(1)+fad(0,50)+t(10,80,color1("030291")+color3("030291")+blur(5)) ,_TXT)

  105.     elif _i >11:
  106.         ###################入场&退场###########################
  107.         for i in range(0,_A,5):
  108.             for j in range(0,_H,5):
  109.                 Xr = 150+randint(-20,20)
  110.                 Yr = randint(-20,20)
  111.                 CLIP1 = clip(_7X+i+Xr,_7Y+j+Yr,_7X+i+5+Xr,_7Y+j+5+Yr)+t(clip(_7X+i,_7Y+j,_7X+i+5,_7Y+j+5))
  112.                 CLIP2 = clip(_7X+i,_7Y+j,_7X+i+5,_7Y+j+5)
  113.                 MOVE = move(_X-0.3+Xr,_Y-0.2+Yr,_X-0.3,_Y-0.2)
  114.                 ass_main(ASS_BUF, SubL(_BT-20-8+_j*5+randint(-10,10),_BT+(_j+1)*5),CLIP1+MOVE+bord(1.5)+alpha1(180)+alpha3(100)+fad(200,0), _TXT)                #入场
  115.                 if _i== 12 or _i==13 or _i == 14:
  116.                     ass_main(ASS_BUF, SubL(_ET,_ET+10-8+_j*5+randint(-10,10)),CLIP2+pos(_X,_Y)+bord(1.5)+alpha1(0)+alpha3(00)+fad(0,50), _TXT)                           #退场
  117.                     
  118.         if _i >14:
  119.             for j in range(8):
  120.                 ass_main(ASS_BUF,SubL(_ET,_ET+20,2),an(5)+t(frxyz(360)+fsc(0,0))+move(_X,_Y,_X+randint(-200,200),_Y+randint(-200,200))+fad(0,120) ,_TXT)              #退场2
  121.         ##############################################         
  122.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  123.         for i in range(_BT+_SK,_BT+_SK+_KT):
  124.             R=randint(-30,30)
  125.             ass_main(ASS_BUF, SubL(i, i+10),move(_X+randint(-2,2),_Y+randint(-2,2),_X,_Y)+blur(5)+alpha1(150)+alpha3(150)+fscx(100+R)+fscy(100+R)+fad(0,100), _TXT) #卡拉ok方式
  126.         ass_main(ASS_BUF,SubL(_BT+_SK+_KT,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)


  127.         
  128.     return (ASS_BUF, None)
复制代码
中文py:
  1. from tcaxPy import *
  2. from s import *
  3. from util.gdiFont import *  #加入GDIfont模块
  4. from util.tcCurve import *
  5. import math
  6. import random


  7. def tcaxPy_Init():
  8.     global _FontFileName
  9.     global _FaceID
  10.     global _Fs
  11.     global _TextWidth
  12.     global _TextHeight
  13.     global _TextLength
  14.     global _TextAdvDiff
  15.     global _ResolutionX
  16.     global _FD
  17.     global _TextInitX
  18.     global _Ascender        # 字体上行高度
  19.     global _Descender        # 字体下行高度 通常为负数
  20.     global _H
  21.     global _3C
  22.     global _KarTime         
  23.     _KarTime = GetVal(val_KarTime)# 第i句卡拉OK歌词的第j个字符的Karaoke时间 = !$start!
  24.     _H = GetVal(val_FontSize)
  25.     _3C = GetVal(val_3C)
  26.     _FontFileName = GetVal(val_FontFileName)
  27.     _FaceID       = GetVal(val_FaceID)
  28.     _Fs           = GetVal(val_FontSize)
  29.     _Ascender = GetVal(val_Ascender) #字体上行高度
  30.     _TextHeight   = GetVal(val_TextHeight)# 第i句卡拉OK歌词的j个字符的高度
  31.     _TextWidth    = GetVal(val_TextWidth)# 第i句卡拉OK歌词的j个字符的宽度
  32.     _TextLength   = GetVal(val_TextLength)# 第i句卡拉OK歌词的文字总长度
  33.     _TextAdvDiff  = GetVal(val_TextAdvanceDiff)# 从初始位置到第i句卡拉OK歌词的j个字符的水平步距
  34.     _TextInitX  = GetVal(val_TextInitX)
  35.     _ResolutionX  = GetVal(val_ResolutionX)
  36.     _FD           = 1000 / GetVal(val_FXFPS)
  37.     global GdiFont   #GDIfont
  38.     GdiFont = gfInitFont(GetVal(val_FontFaceName), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0, False)   #GDIfont
  39.     global Font
  40.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)



  41. def p(y):#绘图缩放代码
  42.     if y == int(y):
  43.         Y = str(int(y))
  44.     else:
  45.         Y = str(format(y, '.2f'))
  46.     return '\\p{0}'.format(Y)
  47.    
  48. def frxyz(x):
  49.     X1 = randint(-x,x)
  50.     X2 = randint(-x,x)
  51.     X3 = randint(-x,x)
  52.     return frx(X1)+fry(X2)+frz(X3)

  53.    


  54. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):
  55.     ASS_BUF = []                # 用于保存ASS特效
  56.     _7X = _X - int(_A / 2 + 0.5)              #每个字的上X坐标= !$left!
  57.     _7Y = _Y - int(_H / 2 + 0.5)              #每个字的上Y坐标=!$top!
  58.     _bottom = _Y + int(_H / 2 + 0.5)              #每个字的下Y坐标





  59.     if (_i > -1 and _i < 2) or (_i> 8 and _i<11) :
  60.         
  61.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X, _Y)+frx(90)+blur(2)+t(frx(360))+fad(200,0), _TXT)
  62.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  63.         ass_main(ASS_BUF,SubL(_BT+_SK,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)
  64.         ass_main(ASS_BUF,SubL(_ET,_ET+15,2),an(5)+pos(_X,_Y)+color1("FFFFFF")+color3("000000")+blur(1)+bord(1)+fad(0,50)+t(10,80,color1("030291")+color3("030291")+blur(5)) ,_TXT)
  65.         
  66.     elif _i == 2 or _i== 11 :
  67.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X, _Y)+frx(90)+blur(2)+t(frx(360))+fad(200,0), _TXT)
  68.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  69.         ass_main(ASS_BUF,SubL(_BT+_SK,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)
  70.         for j in range(8):
  71.             ass_main(ASS_BUF,SubL(_ET,_ET+20,2),an(5)+t(frxyz(360)+fsc(0,0))+move(_X,_Y,_X+randint(-200,200),_Y+randint(-200,200))+fad(0,120) ,_TXT)
  72.             
  73.     elif (_i > 2 and _i < 9):
  74.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X, _Y)+frx(90)+blur(2)+t(frx(360))+fad(200,0), _TXT)
  75.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  76.         ass_main(ASS_BUF,SubL(_BT+_SK,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)
  77.         ass_main(ASS_BUF,SubL(_ET,_ET+15,2),an(5)+pos(_X,_Y)+color1("FFFFFF")+color3("000000")+blur(1)+bord(1)+fad(0,50)+t(10,80,color1("030291")+color3("030291")+blur(5)) ,_TXT)

  78.     elif _i >11:
  79.         ###################入场&退场###########################
  80.         for i in range(0,_A,5):
  81.             for j in range(0,_H,5):
  82.                 Xr = 150+randint(-20,20)
  83.                 Yr = randint(-20,20)
  84.                 CLIP1 = clip(_7X+i+Xr,_7Y+j+Yr,_7X+i+5+Xr,_7Y+j+5+Yr)+t(clip(_7X+i,_7Y+j,_7X+i+5,_7Y+j+5))
  85.                 CLIP2 = clip(_7X+i,_7Y+j,_7X+i+5,_7Y+j+5)
  86.                 MOVE = move(_X-0.3+Xr,_Y-0.2+Yr,_X-0.3,_Y-0.2)
  87.                 ass_main(ASS_BUF, SubL(_BT-20-8+_j*5+randint(-10,10),_BT+(_j+1)*5),CLIP1+MOVE+bord(1.5)+alpha1(180)+alpha3(100)+fad(200,0), _TXT)                #入场
  88.                 if _i== 12 or _i==13 or _i == 14:
  89.                     ass_main(ASS_BUF, SubL(_ET,_ET+10-8+_j*5+randint(-10,10)),CLIP2+pos(_X,_Y)+bord(1.5)+alpha1(0)+alpha3(00)+fad(0,50), _TXT)                           #退场
  90.                     
  91.         if _i >14:
  92.             for j in range(8):
  93.                 ass_main(ASS_BUF,SubL(_ET,_ET+20,2),an(5)+t(frxyz(360)+fsc(0,0))+move(_X,_Y,_X+randint(-200,200),_Y+randint(-200,200))+fad(0,120) ,_TXT)              #退场2
  94.         ##############################################         
  95.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X, _Y)+blur(2), _TXT)
  96.         ass_main(ASS_BUF,SubL(_BT+_SK,_ET,2),an(5)+pos(_X,_Y)+blur(2) ,_TXT)


  97.         
  98.     return (ASS_BUF, None)
复制代码
下载:http://pan.baidu.com/s/1qWsJE7U
3

查看全部评分

Rank: 5Rank: 5

发表于 2014-7-27 02:24:54 |显示全部楼层
tcc:
  1. # tcc file version

  2. < tcc file version = 1.000 >

  3. # mode configuration

  4. < inherit ass header = false >
  5. < k mode = word >
  6. < text layout = horizontal >
  7. < tcaxpy init = true >
  8. < tcaxpy user = false >
  9. < tcaxpy fin = false >

  10. # py settings
  11. < py file = jiji-010.py >    < beg line = 1 >    < end line = 0 >





  12. < k-timed ass file = OP-JP_k.ass >
  13. < font file = DFMrg7.ttc >    < font face id = 2 >    < font size = 35 >
  14. < fx width = 1280 >    < fx height = 720 >    < fx fps = 23.976 >
  15. < alignment = 2 >
  16. < x offset = 10 >    < y offset = 20 >
  17. < spacing = 0 >    < space scale = 1.000 >



  18. # style settings

  19. < font face name = "" >
  20. < bord = 2 >    < shad = 0 >
  21. < primary color = FFFFFF >    < secondary color = 000000 >    < outline color = 38504D >    < back color = 000000 >
  22. < primary alpha = 0 >    < secondary alpha = 240 >    < outline alpha = 0 >    < back alpha = 240 >

  23. # additional settings

  24. < blur = 0.000 >
复制代码
1

查看全部评分

Rank: 1

发表于 2014-7-27 13:16:32 |显示全部楼层
前排

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2014-8-10 10:26:30 |显示全部楼层
最后那个文字消散的效果很酷啊

Rank: 4

发表于 2014-9-8 22:45:30 |显示全部楼层
请问98和99的那两个坐标怎么求的?

Rank: 4

发表于 2014-10-5 23:41:21 |显示全部楼层
from s import *
这个调用的东西哪里可以找到呢

Rank: 4

发表于 2014-10-6 06:13:59 |显示全部楼层
稀饭 发表于 2014-10-5 23:41
from s import *
这个调用的东西哪里可以找到呢

已解决>_<

Rank: 4

发表于 2014-10-14 16:04:55 |显示全部楼层
很不错 =)

Rank: 4

发表于 2014-10-30 13:10:41 |显示全部楼层
发现每parse一个,都会出现各种各样的错误,这是需要修改什么吗?
图片.jpg

Rank: 5Rank: 5

发表于 2014-10-30 16:11:06 |显示全部楼层
oiuu 发表于 2014-10-30 13:10
发现每parse一个,都会出现各种各样的错误,这是需要修改什么吗?

除零错误,看看ass的k值里面有没有k是零的,改成1或2

Rank: 4

发表于 2016-11-25 20:20:46 |显示全部楼层
感谢大佬分享

Rank: 4

发表于 2016-11-25 20:21:13 |显示全部楼层
文字消散的效果很酷

Rank: 4

发表于 2017-12-17 00:37:05 |显示全部楼层
感谢分享

Rank: 4

发表于 2018-4-15 10:34:07 |显示全部楼层
感谢

Rank: 4

发表于 2018-7-16 00:48:48 |显示全部楼层
稀饭 发表于 2014-10-6 06:13
已解决>_

求问怎么解决。。我也想问。。
您需要登录后才可以回帖 登录 | 加入社区

GitHub|TCAX 主页

GMT+8, 2018-10-24 07:44

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH