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

 找回密码
 新人加入
查看: 3402|回复: 0
打印 上一主题 下一主题

[完整特效] [youkaze]006_AnotherOP [复制链接]

Moderator

youkaze

Rank: 5Rank: 5

跳转到指定楼层
楼主
发表于 2012-2-23 22:12:49 |只看该作者 |倒序浏览
本帖最后由 七海の游风 于 2012-2-24 11:00 编辑
  1. from tcaxPy import *


  2. def tcaxPy_Init():

  3.     global _FontFileName
  4.     global _FaceID
  5.     global _Fs
  6.     global _FD
  7.     global _Height
  8.     global _Font
  9.     global _FontSize
  10.     global pyFont
  11.     pyFont    = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), GetVal(val_FontSize), GetVal(val_Spacing), GetVal(val_SpaceScale), 0x0000FF, 0, 0)
  12.     _FontSize = GetVal(val_FontSize)
  13.     _FontFileName = GetVal(val_FontFileName)
  14.     _FaceID       = GetVal(val_FaceID)
  15.     _Fs           = GetVal(val_FontSize)
  16.     _FD = 1000 / GetVal(val_FXFPS)
  17.     _Height       = GetVal(val_TextHeight)
  18.     _Font = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  19.    

  20. def tcaxPy_Fin():


  21.     FinFont(_Font)

  22. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT,):
  23.     ASS_BUF = []


  24.     COLOR=[ "8BA8A4", "8B89A4","A48B93","7F96A6","527565","5F597E","9CB6B4","89A1AF","B08366","916A8A","292D69" ]
  25.     COLOR1=color1(COLOR[randint(0,10)])

  26.     dx = _X - int(_A  / 2 + 0.5)
  27.     dy = _Y - int(_Fs / 2 + 0.5)
  28.     mask = TextOutlineDraw(_Font, _TXT, dx, dy)

  29.     if _i > -1 and _i <17:
  30.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X-2,_Y+1)+bord(0)+fad(200,0)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)
  31.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X-2,_Y+1)+bord(0)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)
  32.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT),pos(_X-2,_Y+1)+bord(0)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)
  33.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET+20-8+_j*5),pos(_X-2,_Y+1)+bord(0)+fad(0,200)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)
  34.     if _i == 17:
  35.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5),pos(_X-2,_Y+1)+bord(0)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)
  36.         ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK),pos(_X-2,_Y+1)+bord(0)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)
  37.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT),pos(_X-2,_Y+1)+bord(0)+fad(0,200)+alpha1(50)+color1('A09E9E')+blur(2), _TXT)


  38.     R = randint(0,7)
  39.     t1 = _BT+_SK-20
  40.     t2 = _ET
  41.    
  42.     _Bd = GetVal(val_Bord)
  43.     _Br = GetVal(val_Blur)
  44.     PIX = TextPix(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), DecRGB('0000FF'), 0, False, _TXT)
  45.     PIX = PixBlur(PIX, _Br)

  46.    
  47.     if _i < 2:
  48.         R = randint(0,7)
  49.         t1 = _BT+_SK-20
  50.         t2 = _ET
  51.         

  52.         InitPosX = _X - int(_A / 2 + 0.5) + PIX[0][0]        # 第一个像素的X轴坐标
  53.         InitPosY = _Y - int(_Fs / 2 + 0.5) + PIX[0][1]        # 第一个像素的Y轴坐标
  54.         for h in range(PIX[1][1]):                                # 开始纵向扫描
  55.             PosY  = InitPosY + h
  56.                                       # 当前像素Y轴坐标
  57.             for w in range(PIX[1][0]):                        # 开始横向扫描
  58.                 PosX = InitPosX + w
  59.                 X = PosX-randint(-50,50)
  60.                 Y = PosY-randint(-50,50)                        # 当前像素X轴坐标
  61.                 idx  = 4 * (h * PIX[1][0] + w)                # 脚标
  62.                 PixR = PIX[2][idx + 0]                        # 当前像素的红色分量
  63.                 PixG = PIX[2][idx + 1]                        # 当前像素的绿色分量
  64.                 PixB = PIX[2][idx + 2]                        # 当前像素的蓝色分量
  65.                 PixA = PIX[2][idx + 3]                        # 当前像素的透明度
  66.                 if PixA != 0:                                # 如果当前像素不为透明则进行如下操作
  67.                     D = [-h,-w,-(PIX[1][1]-h),-(PIX[1][0]-w),-(PIX[1][1]-h+PIX[1][0]-w),-h-w,-(PIX[1][1]-h+PIX[1][0]+w),-(PIX[1][0]-w+PIX[1][1]-h)][R]
  68.                     ass_main(ASS_BUF, SubL(_BT-8+_j*5+randint(-10,10),_BT+_SK,0,Pix_Style),pos(PosX, PosY)+bord(0)+fad(50,0)+color1('010076')+alpha(255-PixA), PixPt())
  69.                     ass_main(ASS_BUF, SubL(_BT+_SK+_KT,(t2+20)-D,0,Pix_Style),pos(PosX, PosY)+bord(0)+fad(0,200)+color1('010076')+alpha(255-PixA), PixPt())

  70.                     C = randint(-1,1)
  71.                     ass_main(ASS_BUF, SubL(_BT-8+_j*5+randint(-10,10),_BT+_SK,0,Pix_Style),pos(PosX+C, PosY+C)+bord(0)+fad(50,0)+color1('010076')+alpha(255-PixA), PixPt())
  72.                     ass_main(ASS_BUF, SubL(_BT+_SK+_KT,(t2+20)-D,0,Pix_Style),pos(PosX+C, PosY+C)+bord(0)+fad(0,200)+color1('010076')+alpha(255-PixA), PixPt())


  73.     if _i < 2:
  74.         InitPosX = _X - int(_A / 2 + 0.5) + PIX[0][0]        # 第一个像素的X轴坐标
  75.         InitPosY = _Y - int(_Fs / 2 + 0.5) + PIX[0][1]        # 第一个像素的Y轴坐标
  76.         for h in range(PIX[1][1]):                                # 开始纵向扫描
  77.             PosY  = InitPosY + h
  78.                                       # 当前像素Y轴坐标
  79.             for w in range(PIX[1][0]):                        # 开始横向扫描
  80.                 PosX = InitPosX + w
  81.                 X = PosX-randint(-50,50)
  82.                 Y = PosY-randint(-50,50)                        # 当前像素X轴坐标
  83.                 idx  = 4 * (h * PIX[1][0] + w)                # 脚标
  84.                 PixR = PIX[2][idx + 0]                        # 当前像素的红色分量
  85.                 PixG = PIX[2][idx + 1]                        # 当前像素的绿色分量
  86.                 PixB = PIX[2][idx + 2]                        # 当前像素的蓝色分量
  87.                 PixA = PIX[2][idx + 3]                        # 当前像素的透明度
  88.                 if PixA != 0:                                # 如果当前像素不为透明则进行如下操作
  89.                     step = int(_FD/10)
  90.                     for j in range(_BT+_SK,_BT+_SK+_KT,step):
  91.                         R = randint(-3,3)
  92.                         t = j
  93.                         t1 = t + step
  94.                         B = randint(-1,1)
  95.                         POS = pos(PosX+B, PosY+B)
  96.                         ass_main(ASS_BUF, SubL(t,t1,0,Pix_Style), POS+color1('010076')+alpha1(255 - PixA), PixPt())



  97.     if _i > 1 and _i <4:
  98.         F = randint(-10,10)
  99.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+_SK+_KT),an(5)+pos(_X+F,_Y+F)+color1('010076')+bord(0)+blur(2)+alpha1(0)+fs(1)+animation(0,_KT*10,fs(100))+clip2(7, mask), "●")
  100.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET+20-8+_j*5),an(5)+pos(_X,_Y)+color1('010076')+bord(0)+fad(0,200)+blur(2)+alpha1(0)+fs(100)+clip2(7, mask), "●")
  101.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT),an(5)+pos(_X,_Y-30)+color1('FFFFFF')+bord(0)+blur(8)+alpha1(50)+fs(1)+animation(0,_KT*10,fs(80))+clip2(7, mask), "●")
  102.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET-8+_j*5),an(5)+pos(_X,_Y-30)+color1('FFFFFF')+bord(0)+fad(0,200)+blur(8)+alpha1(50)+fs(80)+clip2(7, mask), "●")


  103.         for i in range(70):
  104.             ass_main(ASS_BUF, SubL((_BT+_SK+40)-i,_BT+_SK+_KT),pos(_X,(_Y+20)-i)+color1('FFFFFF')+alpha1(255-(i/2-2))+bord(0)+fs(50-(i/10-6))+blur(1-(i/10-6))+shad(0)+frx(55)+fad(0,200), _TXT)


  105.     if _i > 3 and _i <6:
  106.         F = randint(-10,10)
  107.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+_SK+_KT),an(5)+pos(_X+F,_Y+F)+color1('000000')+bord(0)+blur(2)+alpha1(0)+fs(1)+animation(0,_KT*10,fs(100))+clip2(7, mask), "●")
  108.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET+20-8+_j*5),an(5)+pos(_X,_Y)+color1('000000')+bord(0)+fad(0,200)+blur(2)+alpha1(0)+fs(100)+clip2(7, mask), "●")
  109.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT),an(5)+pos(_X,_Y-30)+color1('0000FF')+bord(0)+blur(8)+alpha1(50)+fs(1)+animation(0,_KT*10,fs(80))+clip2(7, mask), "●")
  110.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET-8+_j*5),an(5)+pos(_X,_Y-30)+color1('0000FF')+bord(0)+fad(0,200)+blur(8)+alpha1(50)+fs(80)+clip2(7, mask), "●")


  111.         for i in range(70):
  112.             ass_main(ASS_BUF, SubL((_BT+_SK+40)-i,_BT+_SK+_KT),pos(_X,(_Y+20)-i)+color1('0000FF+i')+alpha1(255-(i/2-2))+bord(0)+fs(50-(i/10-6))+blur(1-(i/10-6))+shad(0)+frx(55)+fad(0,200), _TXT)




  113.     if _i > 5 and _i <10:
  114.         R = randint(-20,20)
  115.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_ET),an(5) + pos(_X,_Y)+color1('000000')+bord(0)+fad(100,0)+alpha1(0)+fs(100)+blur(5)+clip2(7, mask), "●")
  116.         ass_main(ASS_BUF, SubL(_ET,_ET+20-8+_j*5),an(5) + pos(_X,_Y)+color1('000000')+bord(0)+fad(0,200)+alpha1(0)+fs(100)+blur(5)+clip2(7, mask), "●")
  117.         ass_main(ASS_BUF, SubL(_BT-8+_j*5,_ET),an(5) + pos(_X+R,_Y+R)+color1('0000FF')+bord(0)+fad(100,0)+alpha1(100)+fs(1)+animation(0,400,fs(50))+blur(8)+clip2(7, mask), "●")
  118.         ass_main(ASS_BUF, SubL(_ET,_ET+20-8+_j*5),an(5) + pos(_X+R,_Y+R)+color1('0000FF')+bord(0)+fad(0,200)+alpha1(100)+fs(50)+animation(0,400,fs(1))+blur(8)+clip2(7, mask), "●")


  119.         InitPosX = _X - int(_A / 2 + 0.5) + PIX[0][0]        # 第一个像素的X轴坐标
  120.         InitPosY = _Y - int(_Fs / 2 + 0.5) + PIX[0][1]        # 第一个像素的Y轴坐标
  121.         for h in range(0,PIX[1][1],4):                                # 开始纵向扫描
  122.             PosY  = InitPosY + h
  123.                                       # 当前像素Y轴坐标
  124.             for w in range(PIX[1][0]):                        # 开始横向扫描
  125.                 PosX = InitPosX + w
  126.                 X = PosX-randint(-50,50)
  127.                 Y = PosY-randint(-50,50)                        # 当前像素X轴坐标
  128.                 idx  = 4 * (h * PIX[1][0] + w)                # 脚标
  129.                 PixR = PIX[2][idx + 0]                        # 当前像素的红色分量
  130.                 PixG = PIX[2][idx + 1]                        # 当前像素的绿色分量
  131.                 PixB = PIX[2][idx + 2]                        # 当前像素的蓝色分量
  132.                 PixA = PIX[2][idx + 3]                        # 当前像素的透明度
  133.                 if PixA != 0:                                # 如果当前像素不为透明则进行如下操作
  134.                     ass_main(ASS_BUF, SubL(_BT+_SK-20+w,_BT+_SK+_KT,0,Pix_Style),pos(PosX,PosY)+bord(0)+fad(100,0)+color1('0000FF')+alpha(255-PixA), PixPt())
  135.                     ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET+w-8+_j*5,0,Pix_Style),pos(PosX,PosY)+bord(0)+fad(0,200)+color1('0000FF')+alpha(255-PixA), PixPt())


  136.         InitPosX = _X - int(_A / 2 + 0.5) + PIX[0][0]        # 第一个像素的X轴坐标
  137.         InitPosY = _Y - int(_Fs / 2 + 0.5) + PIX[0][1]        # 第一个像素的Y轴坐标
  138.         for h in range(PIX[1][1]):                                # 开始纵向扫描
  139.             PosY  = InitPosY + h
  140.                                       # 当前像素Y轴坐标
  141.             for w in range(0,PIX[1][0],4):                        # 开始横向扫描
  142.                 PosX = InitPosX + w
  143.                 X = PosX-randint(-50,50)
  144.                 Y = PosY-randint(-50,50)                        # 当前像素X轴坐标
  145.                 idx  = 4 * (h * PIX[1][0] + w)                # 脚标
  146.                 PixR = PIX[2][idx + 0]                        # 当前像素的红色分量
  147.                 PixG = PIX[2][idx + 1]                        # 当前像素的绿色分量
  148.                 PixB = PIX[2][idx + 2]                        # 当前像素的蓝色分量
  149.                 PixA = PIX[2][idx + 3]                        # 当前像素的透明度
  150.                 if PixA != 0:                                # 如果当前像素不为透明则进行如下操作
  151.                     ass_main(ASS_BUF, SubL(_BT+_SK-20+h,_BT+_SK+_KT,0,Pix_Style),pos(PosX,PosY)+bord(0)+fad(100,0)+color1('0000FF')+alpha(255-PixA), PixPt())
  152.                     ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET+h-8+_j*5,0,Pix_Style),pos(PosX,PosY)+bord(0)+fad(0,200)+color1('0000FF')+alpha(255-PixA), PixPt())




  153.     if _i > 9 and _i <17:
  154.         step = int(_FD/10)
  155.         for j in range(int(_BT+_SK),int(_BT+_SK+_KT/2),step):
  156.             t = j
  157.             t1 = t + step
  158.             ass_main(ASS_BUF, SubL(t,t1),an(5) + pos(_X+randint(-20,20),_Y+randint(-20,20))+color1('000000')+bord(0)+alpha1(0)+fs(40+randint(-20,20))+blur(4)+clip2(7, mask), "●")
  159.     if _i > 9 and _i <17:
  160.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT/2,_ET+10-8+_j*5),an(5) + pos(_X+randint(-10,10),_Y+randint(-10,10))+color1('000000')+bord(0)+alpha1(0)+fs(1)+animation(0,_KT*10,fs(150))+blur(4)+clip2(7, mask), "●")

  161.     if _i > 9 and _i <17:
  162.         step = int(_FD/10)
  163.         for j in range(_BT+_SK+20,_ET+10-8+_j*5,step):
  164.             t = j
  165.             t1 = t + step
  166.             R = randint(-15,15)
  167.             ass_main(ASS_BUF, SubL(t,t1),an(5) + pos(_X+R,_Y+R)+color1('0000FF')+bord(0)+alpha1(150)+fs(40+randint(-20,30))+blur(6)+clip2(7, mask), "●")




  168.     if _i == 17:
  169.         PIX = TextPix(pyFont, _TXT)
  170.         InitPosX = _X - int(_A / 2 + 0.5) + PIX[0][0]            
  171.         InitPosY = _Y - int(_FontSize / 2 + 0.5) + PIX[0][1]      
  172.         X_list = []
  173.         Y_list = []
  174.         for h in range(PIX[1][1]):
  175.             PosY  = InitPosY + h                              

  176.             for w in range(PIX[1][0]):
  177.                 PosX = InitPosX + w                  

  178.                 X = PosX
  179.                 Y = PosY
  180.             
  181.                 idx  = 4 * (h * PIX[1][0] + w)
  182.                 PixR = PIX[2][idx + 0]
  183.                 PixG = PIX[2][idx + 1]
  184.                 PixB = PIX[2][idx + 2]
  185.                 PixA = PIX[2][idx + 3]
  186.                 if PixA != 0:
  187.                     Y_list.append(PosY)   
  188.                     X_list.append(PosX)  
  189.         B = Y_list[randint(0,len(Y_list)-1)]   
  190.         A = X_list[randint(0,len(Y_list)-1)]


  191.    
  192.         distance = []
  193.         for h in range(PIX[1][1]):
  194.             PosY  = InitPosY + h                 
  195.             for w in range(PIX[1][0]):
  196.                 PosX = InitPosX + w               
  197.                 X = PosX
  198.                 Y = PosY

  199.                 idx  = 4 * (h * PIX[1][0] + w)
  200.                 PixR = PIX[2][idx + 0]
  201.                 PixG = PIX[2][idx + 1]
  202.                 PixB = PIX[2][idx + 2]
  203.                 PixA = PIX[2][idx + 3]
  204.                 if PixA != 0:
  205.                     import math
  206.                     d = int(math.sqrt((X-A)**2+(Y-B)**2))
  207.                     distance.append(d)   
  208.         dmax = max(distance)
  209.         
  210.         Color2 = DivClr('000000','0000FF',int(dmax))


  211.         for h in range(PIX[1][1]):
  212.             PosY  = InitPosY + h                    
  213.             for w in range(PIX[1][0]):
  214.                 PosX = InitPosX + w  
  215.                 X = PosX
  216.                 Y = PosY

  217.                 idx  = 4 * (h * PIX[1][0] + w)
  218.                 PixR = PIX[2][idx + 0]
  219.                 PixG = PIX[2][idx + 1]
  220.                 PixB = PIX[2][idx + 2]
  221.                 PixA = PIX[2][idx + 3]
  222.                 if PixA != 0:
  223.                     import math
  224.                     d = int(math.sqrt((X-A)**2+(Y-B)**2))-1

  225.                     ass_main(ASS_BUF, SubL(_BT+w-8+_j*5,_BT+_SK,0,Pix_Style),pos(X,Y)+fad(200,0)+bord(0)+alpha1(255-PixA)+color1(Color2[d]), PixPt())
  226.                     ass_main(ASS_BUF, SubL(_BT+w-8+_j*5,_BT+_SK,0,Pix_Style),pos(X,Y)+fad(200,0)+bord(0)+alpha1(255-PixA)+color1(Color2[d]), PixPt())
  227.                     
  228.                     ass_main(ASS_BUF, SubL(_BT+_SK,int(_BT+_SK+w*(_KT/PIX[1][0])),0,Pix_Style),pos(X,Y)+bord(0)+alpha1(255-PixA)+color1(Color2[d]), PixPt())
  229.                     ass_main(ASS_BUF, SubL(_BT+_SK,int(_BT+_SK+w*(_KT/PIX[1][0])),0,Pix_Style),pos(X,Y)+bord(0)+alpha1(255-PixA)+color1(Color2[d]), PixPt())

  230.                     rnd = randint(-10,10)

  231.                     ass_main(ASS_BUF, SubL(int(_BT+_SK+w*(_KT/PIX[1][0])),int(_BT+_SK+100+rnd+w*(_KT/PIX[1][0])),0,Pix_Style),mov(X,Y,X-50+rnd,Y+rnd)+fad(0,300)+bord(0)+alpha1(255-PixA)+color1(Color2[d]), PixPt())




  232.     return (ASS_BUF, None)
复制代码
115下载预览:http://115.com/file/beldgnv5
1

查看全部评分

Rank: 4

沙发
发表于 2022-2-3 01:36:10 |只看该作者
本帖最后由 Seekladoom 于 2022-2-3 01:37 编辑

简化拆分脚本,内附工程文件,TCAX可直接运行TCC文件生成ASS特效:
【youkaze】Another OP 简化拆分.part01.rar (950 KB, 下载次数: 1158)
【youkaze】Another OP 简化拆分.part02.rar (218.23 KB, 下载次数: 1139)
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-20 15:51

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH