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

标题: [youkaze]008_Accel·world_OP1 [打印本页]

作者: 四月一日 君寻    时间: 2013-3-8 23:16:20     标题: [youkaze]008_Accel·world_OP1

本帖最后由 四月一日 君寻 于 2013-3-8 23:22 编辑
  1. from tcaxPy import *
  2. from pixLibs.ImageStone.pixStone import *

  3. def tcaxPy_Init():
  4.     global _FD
  5.     global _Fs
  6.     global _TextLength
  7.     global Font
  8.     global FontOut
  9.     global PIX_tex
  10.     global PIX_tex2
  11.     global _Spacing
  12.     _FD = 1000 / GetVal(val_FXFPS)
  13.     _Fs = GetVal(val_FontSize)
  14.     _TextLength = GetVal(val_TextLength)
  15.     _FontFileName = GetVal(val_FontFileName)
  16.     _FaceID       = GetVal(val_FaceID)
  17.     Font    = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), MakeRGB(0, 0, 0), 0, 0)
  18.     FontOut = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), MakeRGB(180, 180, 180), 0, 0)
  19.     PIX_tex = ImagePix(abspath('ime06.png'), _Fs, 0)
  20.     PIX_tex2 = ImagePix(abspath('out01.png'))
  21.     _Spacing =  GetVal(val_Spacing)
  22.    
  23.     global pyFont

  24.     _FontSize = GetVal(val_FontSize)

  25.     pyFont    = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), GetVal(val_FontSize), GetVal(val_Spacing), GetVal(val_SpaceScale), 0x0000FF, 0, 0)


  26. def tcaxPy_Fin():
  27.     FinFont(Font)
  28.     FinFont(FontOut)
  29.     FinFont(pyFont)


  30. def tcaxPy_User():
  31.     # 创建ASS文件
  32.     file_name  = GetVal(val_OutFile) + '.ass'
  33.     ass_header = GetVal(val_AssHeader)
  34.     ASS_FILE   = CreateAssFile(file_name, ass_header)
  35.     # 创建TCAS文件
  36.     file_name  = GetVal(val_OutFile) + '.tcas'
  37.     fx_width   = GetVal(val_ResolutionX)
  38.     fx_height  = GetVal(val_ResolutionY)
  39.     fx_fps     = GetVal(val_FXFPS)
  40.     TCAS_FILE  = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  41.     # 基本数据, 如果需要查看含义, 请取消下面两行代码的注释
  42.     #GetHelp()
  43.     #Pause()
  44.     fontSize   = GetVal(val_FontSize)
  45.     marginX    = GetVal(val_OffsetX)
  46.     marginY    = GetVal(val_OffsetY)
  47.     spacing    = GetVal(val_Spacing)
  48.     lineNum    = GetVal(val_nLines)
  49.     textNum    = GetVal(val_nTexts)
  50.     start      = GetVal(val_BegTime)
  51.     end        = GetVal(val_EndTime)
  52.     kar        = GetVal(val_KarTime)
  53.     elapKar    = GetVal(val_KarTimeDiff)
  54.     text       = GetVal(val_Text)
  55.     textLength = GetVal(val_TextLength)
  56.     advance    = GetVal(val_TextAdvance)
  57.     advDiff    = GetVal(val_TextAdvanceDiff)
  58.     # 主循环
  59.     for i in range(lineNum):#lineNum
  60.         #initPosX = marginX                                          # an 7, 4, 1
  61.         initPosX = (fx_width - textLength[i]) / 2 + marginX        # an 8, 5, 2
  62.         #initPosX = fx_width - textLength[i] - marginX              # an 9, 6, 3
  63.         initPosY = marginY                                          # an 7, 8, 9
  64.         #initPosY = fx_height / 2 - marginY                         # an 4, 5, 6
  65.         #initPosY = fx_height - fontSize - marginY                  # an 1, 2, 3
  66.         for j in range(textNum[i]):
  67.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  68.             posY = initPosY + fontSize / 2
  69.             # Fake2 4~8句有效
  70.             if 3 <= i or i <= 13:
  71.                 ASS_BUF, TCAS_BUF = tcaxPy_Main_Fake2(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], start[i - 1], end[i - 1])
  72.                 if len(ASS_BUF) > 0:
  73.                     WriteAssFile(ASS_FILE, ASS_BUF)
  74.                 if len(TCAS_BUF) > 0:
  75.                     WriteTcasFile(TCAS_FILE, TCAS_BUF)
  76.             # Fake1 一直有效
  77.             if text[i][j] == ''or text[i][j] == ' ' or text[i][j] == ' ':
  78.                 continue
  79.             ASS_BUF, TCAS_BUF = tcaxPy_Main_Fake1(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j])
  80.             if len(ASS_BUF) > 0:
  81.                 WriteAssFile(ASS_FILE, ASS_BUF)
  82.             if len(TCAS_BUF) > 0:
  83.                 WriteTcasFile(TCAS_FILE, TCAS_BUF)
  84.             Progress(i, j)      # 显示进度
  85.     FinAssFile(ASS_FILE)
  86.     FinTcasFile(TCAS_FILE)


  87. def tcaxPy_Main_Fake1(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt):

  88.     ASS_BUF  = []        # 保存ASS特效
  89.     TCAS_BUF = []        # 保存TCAS特效

  90.     ##### 主要特效编写操作 #####

  91.     dx = _x - int(_a / 2 + 0.5)         # 一个固定操作, 将an5的坐标转换为an7
  92.     dy = _y - int(_Fs / 2 + 0.5)        # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标


  93.     PIX_t = TextPix(Font, _txt)             # 获取文字
  94.    
  95.     dx = _x - int(_a / 2 + 0.5) + PIX_t[0][0]
  96.     dy = _y - int(_Fs / 2 + 0.5) + PIX_t[0][1]
  97.     dur = _KT * 10

  98.     PIX_t = PixTexture(PIX_t, PIX_tex)      # 增加纹理
  99.     PIX_out = TextPix(FontOut, _txt)        # 获取边框
  100.     PIX_out = PixTexture(PIX_out, PIX_tex2)
  101.     PIX_out = PixColorMul(PIX_out, 1, 1, 1, 0)    # 增加透明度
  102.     PIX_out = PixBlur(PIX_out, 0)           # 增加模糊
  103.     PIX_ori = CombinePixs(PIX_out, PIX_t)   # 混合文字主体和边框 (边框作底)
  104.     points = PixPoints(PIX_ori)
  105.     pt_num = len(points)
  106.    
  107.     inix = dx - randint(30, 30)

  108.     tab_posx = (inix + randint(-40, 40), inix + randint(-130, 130), inix + randint(-130, 130), inix + randint(-40, 40))
  109.     tab_posy = (dy + _Fs + randint(-15, 20), _y + randint(-100, 100), _y + randint(-110, 110), dy + randint(-15, 20))
  110.    
  111.     POS = Bezier3(pt_num, tab_posx[0] + randint(-15, 15), tab_posy[0], tab_posx[3] + randint(-15, 15), tab_posy[3], tab_posx[1] + randint(-20, 20), tab_posy[1], tab_posx[2] + randint(-20, 20), tab_posy[2])

  112.   
  113.     for i in range(pt_num):
  114.         w = points[i][0]
  115.         h = points[i][1]
  116.         idx  = 4 * (h * PIX_ori[1][0] + w)                # 脚标
  117.         PixR = PIX_ori[2][idx + 0]                        # 当前像素的红色分量
  118.         PixG = PIX_ori[2][idx + 1]                        # 当前像素的绿色分量
  119.         PixB = PIX_ori[2][idx + 2]                        # 当前像素的蓝色分量
  120.         PixA = PIX_ori[2][idx + 3]                        # 当前像素的透明度
  121.         
  122.         x = dx + points[i][0]
  123.         y = dy + points[i][1]
  124.         
  125.         C = randint(-20, 20)
  126.         if _i > -1 and _i < 3:
  127.             EFT1 = an(7)+shad(0)+bord(0)+pos(x,y)+alpha(255-PixA)+color1(FmtRGB(PixR,PixG,PixB))
  128.             ass_main(ASS_BUF, SubL(_BT-20+_j*5,_BT+_SK+_KT+C,0,Pix_Style), EFT1, PixPt())

  129.             EFT1 = an(7)+shad(0)+bord(0)+mov(x, y,POS[i][0],POS[i][1])+alpha(255-PixA)+color1(FmtRGB(PixR,PixG,PixB))+fad(0,300+C)
  130.             ass_main(ASS_BUF, SubL(_BT+_SK+_KT+C,_BT+_SK+_KT+50,0,Pix_Style), EFT1, PixPt())

  131.     if _i > -1 and _i < 3:
  132.         ass_main(ASS_BUF, SubL(_BT-20+_j*5,_BT+_SK+_KT,3), an(5)+bord(2)+blur(2)+alpha1(255)+pos(_x,_y), _txt)
  133.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(5)+blur(7)+alpha1(255)+pos(_x,_y)+color3('0000FF'), _txt)
  134.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(3)+blur(5)+alpha1(255)+pos(_x,_y)+color3('28DDF7'), _txt)

  135.         for i in range (_BT+_SK,_BT+_SK+_KT,8):
  136.             ass_main(ASS_BUF, SubL(i,i+10,3), an(5)+bord(2)+blur(3)+alpha1(120)+pos(_x,_y)+color1('FFFFFF')+color3('FFFFFF'), _txt)



  137.     PIX_tex1 = ImagePix(abspath('ime07.png'), _Fs, 0)
  138.     PIX_d = TextPix(Font, _txt)             # 获取文字
  139.    
  140.     dx = _x - int(_a / 2 + 0.5) + PIX_t[0][0]
  141.     dy = _y - int(_Fs / 2 + 0.5) + PIX_t[0][1]
  142.     dur = _KT * 10

  143.     PIX_d = PixTexture(PIX_d, PIX_tex1)      # 增加纹理
  144.     PIX_out = TextPix(FontOut, _txt)        # 获取边框
  145.     PIX_out = PixTexture(PIX_out, PIX_tex2)
  146.     PIX_out = PixColorMul(PIX_out, 1, 1, 1, 0)    # 增加透明度
  147.     PIX_out = PixBlur(PIX_out, 0)           # 增加模糊
  148.     PIX_ori = CombinePixs(PIX_out, PIX_d)   # 混合文字主体和边框 (边框作底)
  149.     points = PixPoints(PIX_ori)
  150.     pt_num = len(points)
  151.    
  152.     inix = dx - randint(30, 30)

  153.     tab_posx = (inix + randint(-40, 40), inix + randint(-130, 130), inix + randint(-130, 130), inix + randint(-40, 40))
  154.     tab_posy = (dy + _Fs + randint(-15, 20), _y + randint(-100, 100), _y + randint(-110, 110), dy + randint(-15, 20))
  155.    
  156.     POS = Bezier3(pt_num, tab_posx[0] + randint(-15, 15), tab_posy[0], tab_posx[3] + randint(-15, 15), tab_posy[3], tab_posx[1] + randint(-20, 20), tab_posy[1], tab_posx[2] + randint(-20, 20), tab_posy[2])

  157.   
  158.     for i in range(pt_num):
  159.         w = points[i][0]
  160.         h = points[i][1]
  161.         idx  = 4 * (h * PIX_ori[1][0] + w)                # 脚标
  162.         PixR = PIX_ori[2][idx + 0]                        # 当前像素的红色分量
  163.         PixG = PIX_ori[2][idx + 1]                        # 当前像素的绿色分量
  164.         PixB = PIX_ori[2][idx + 2]                        # 当前像素的蓝色分量
  165.         PixA = PIX_ori[2][idx + 3]                        # 当前像素的透明度
  166.         
  167.         x = dx + points[i][0]
  168.         y = dy + points[i][1]
  169.         
  170.         if _i > 2 and _i < 8:
  171.             EFT1 = an(7)+shad(0)+bord(0)+pos(x,y)+alpha(255-PixA)+color1(FmtRGB(PixR,PixG,PixB))+fad(0,100)
  172.             ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET+10-8+_j*5+h,0,Pix_Style), EFT1, PixPt())
  173.             
  174.     if _i > 2 and _i < 8:
  175.         ass_main(ASS_BUF, SubL(_BT+_SK+_KT-10,_ET+20-8+_j*5,3), an(5)+bord(2)+blur(2)+alpha1(255)+pos(_x,_y)+fad(0,200), _txt)

  176.         
  177.     if _i > 2 and _i < 8:
  178.         ass_main(ASS_BUF, SubL(_BT-20+_j*5,_BT+_SK,3), an(5)+bord(2)+blur(2)+alpha1(0)+pos(_x,_y)+fad(200,0)+color3('000000'), _txt)
  179.         
  180.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(5)+blur(7)+alpha1(0)+pos(_x,_y)+fs(60)+t(fs(40))+fad(0,100)+color1('0000FF')+color3('0000FF'), _txt)
  181.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(3)+blur(5)+alpha1(0)+pos(_x,_y)+fs(60)+t(fs(40))+fad(0,100)+color1('28DDF7')+color3('28DDF7'), _txt)
  182.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(1)+blur(2)+alpha1(0)+pos(_x,_y)+fs(60)+t(fs(40))+fad(0,100)+color1('FFFFFF')+color3('FFFFFF'), _txt)
  183.    
  184.    
  185.    
  186.     if _i > 7 and _i < 10:
  187.         ass_main(ASS_BUF, SubL(_BT+_j*5,_ET+_j*5,0), an(5)+bord(2)+blur(2)+alpha1(0)+color3('000000')+pos(_x,_y)+fad(0,200), _txt)
  188.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(5)+blur(7)+alpha1(255)+pos(_x,_y)+color3('F7372A'), _txt)
  189.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(3)+blur(5)+alpha1(255)+pos(_x,_y)+color3('FFF900'), _txt)
  190.         
  191.         for i in range (_BT+_SK,_BT+_SK+_KT,8):
  192.             ass_main(ASS_BUF, SubL(i,i+10,3), an(5)+bord(2)+blur(3)+alpha1(120)+pos(_x,_y)+color1('FFFFFF')+color3('FFFFFF'), _txt)
  193.             
  194.             
  195.     PIX = TextPix(pyFont, _txt)                                  # 創建粒子
  196.     InitPosX = _x - int(_a / 2 + 0.5) + PIX[0][0]                # an7 X座標
  197.     InitPosY = _y - int(_Fs / 2 + 0.5) + PIX[0][1]         # an7 Y座標
  198.     running = 1                                                  # 無限循環用參數
  199.     while running == 1:
  200.         h = randint(0,PIX[1][1]-1)                               # 隨機取一個點
  201.         w = randint(0,PIX[1][0]-1)
  202.             
  203.         idx  = 4 * (h * PIX[1][0] + w)                           # PIX元組腳標
  204.             
  205.         if PIX[2][idx + 3] != 0:                                 # 該點透明度不為0 即該點在文字上時 終止循環
  206.             running = 0
  207.         
  208.     B  = InitPosY + h                                            # 該點的X Y 座標
  209.     A = InitPosX + w
  210.         
  211.     distance = [int(sqrt(w**2+h**2)),int(sqrt((w-PIX[1][0])**2+h**2)),int(sqrt(w**2+(h-PIX[1][1])**2)),int(sqrt((w-PIX[1][0])**2+(h-PIX[1][1])**2))]             
  212.     dmax = max(distance)+1                                       # 計算點與粒子四個角座標的距離 取最大值 由於小數會捨去所以加1

  213.     global CLR
  214.     CLR = DivClr('FFFFFF', 'F80C3B', dmax//2)
  215.     CLR.extend(DivClr('F80C3B', 'FFFFFF', dmax - dmax//2))
  216.     global CLR1
  217.     CLR1 = DivClr('0000FF', 'FFFFFF', dmax//2)
  218.     CLR1.extend(DivClr('FFFFFF', '0000FF', dmax - dmax//2))
  219.         
  220.         
  221.     global CLR2
  222.     CLR2 = DivClr('05FF00', 'FFFFFF', dmax//2)
  223.     CLR2.extend(DivClr('FFFFFF', '05FF00', dmax - dmax//2))
  224.     global CLR3
  225.     CLR3 = DivClr('FFFFFF', 'FF00C8', dmax//2)
  226.     CLR3.extend(DivClr('FF00C8', 'FFFFFF', dmax - dmax//2))
  227.         

  228.     for h in range(PIX[1][1]):                                   # 通常粒子字掃點
  229.         Y  = InitPosY + h                                       
  230.         for w in range(PIX[1][0]):
  231.             X = InitPosX + w                                       
  232.             idx  = 4 * (h * PIX[1][0] + w)
  233.             PixR = PIX[2][idx + 0]
  234.             PixG = PIX[2][idx + 1]
  235.             PixB = PIX[2][idx + 2]
  236.             PixA = PIX[2][idx + 3]
  237.             if PixA != 0:                                   
  238.                 d = int(sqrt((X-A)**2+(Y-B)**2))                 # 計算點到中心點的距離
  239.                
  240.                
  241.                 if _i > 7 and _i < 9:
  242.                     ass_main(ASS_BUF, SubL(_BT-10+_j*5-d,_BT+_SK+10,0,Pix_Style),pos(X-0.3,Y)+fad(200,200)+bord(0)+alpha(255-PixA)+color1(CLR[d]), PixPt())
  243.                     ass_main(ASS_BUF, SubL(_BT+_SK-5+d,_ET+_j*5+d,0,Pix_Style),pos(X-0.3,Y)+fad(200,200)+bord(0)+alpha(255-PixA)+color1(CLR1[d]), PixPt())
  244.                     
  245.                     
  246.                 if _i > 8 and _i < 10:
  247.                     ass_main(ASS_BUF, SubL(_BT-10+_j*5-d,_BT+_SK+10,0,Pix_Style),pos(X-0.3,Y)+fad(200,200)+bord(0)+alpha(255-PixA)+color1(CLR2[d]), PixPt())
  248.                     ass_main(ASS_BUF, SubL(_BT+_SK-5+d,_ET+_j*5+d,0,Pix_Style),pos(X-0.3,Y)+fad(200,200)+bord(0)+alpha(255-PixA)+color1(CLR3[d]), PixPt())
  249.                     
  250.                     
  251.                     
  252.                     
  253.     PIX_t = TextPix(Font, _txt)             # 获取文字
  254.    
  255.     dx = _x - int(_a / 2 + 0.5) + PIX_t[0][0]
  256.     dy = _y - int(_Fs / 2 + 0.5) + PIX_t[0][1]
  257.     dur = _KT * 10

  258.     PIX_t = PixTexture(PIX_t, PIX_tex)      # 增加纹理
  259.     PIX_out = TextPix(FontOut, _txt)        # 获取边框
  260.     PIX_out = PixTexture(PIX_out, PIX_tex2)
  261.     PIX_out = PixColorMul(PIX_out, 1, 1, 1, 0)    # 增加透明度
  262.     PIX_out = PixBlur(PIX_out, 0)           # 增加模糊
  263.     PIX_ori = CombinePixs(PIX_out, PIX_t)   # 混合文字主体和边框 (边框作底)
  264.     points = PixPoints(PIX_ori)
  265.     pt_num = len(points)
  266.    
  267.     inix = dx - randint(30, 30)

  268.     tab_posx = (inix + randint(-40, 40), inix + randint(-130, 130), inix + randint(-130, 130), inix + randint(-40, 40))
  269.     tab_posy = (dy + _Fs + randint(-15, 20), _y + randint(-100, 100), _y + randint(-110, 110), dy + randint(-15, 20))
  270.    
  271.     POS = Bezier3(pt_num, tab_posx[0] + randint(-15, 15), tab_posy[0], tab_posx[3] + randint(-15, 15), tab_posy[3], tab_posx[1] + randint(-20, 20), tab_posy[1], tab_posx[2] + randint(-20, 20), tab_posy[2])

  272.   
  273.     for i in range(pt_num):
  274.         w = points[i][0]
  275.         h = points[i][1]
  276.         idx  = 4 * (h * PIX_ori[1][0] + w)                # 脚标
  277.         PixR = PIX_ori[2][idx + 0]                        # 当前像素的红色分量
  278.         PixG = PIX_ori[2][idx + 1]                        # 当前像素的绿色分量
  279.         PixB = PIX_ori[2][idx + 2]                        # 当前像素的蓝色分量
  280.         PixA = PIX_ori[2][idx + 3]                        # 当前像素的透明度
  281.         
  282.         x = dx + points[i][0]
  283.         y = dy + points[i][1]
  284.         
  285.         C = randint(-20, 20)
  286.         
  287.         if _i > 9:
  288.             EFT1 = an(7)+shad(0)+bord(0)+pos(x,y)+alpha(255-PixA)+color1(FmtRGB(PixR,PixG,PixB))
  289.             ass_main(ASS_BUF, SubL(_BT-20+_j*5,_ET+C,0,Pix_Style), EFT1, PixPt())

  290.             EFT1 = an(7)+shad(0)+bord(0)+mov(x, y,POS[i][0],POS[i][1])+alpha(255-PixA)+color1(FmtRGB(PixR,PixG,PixB))+fad(0,300+C)
  291.             ass_main(ASS_BUF, SubL(_ET+C,_ET+50,0,Pix_Style), EFT1, PixPt())
  292.             
  293.             
  294.     if _i > 9:
  295.         ass_main(ASS_BUF, SubL(_BT-20+_j*5,_ET+20-_j*5,3), an(5)+bord(2)+blur(2)+alpha1(255)+color3('000000')+pos(_x,_y)+fad(200,200), _txt)
  296.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(5)+blur(7)+alpha1(255)+pos(_x,_y)+color3('0000FF'), _txt)
  297.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), an(5)+bord(3)+blur(5)+alpha1(255)+pos(_x,_y)+color3('28DDF7'), _txt)
  298.         
  299.         for i in range (_BT+_SK,_BT+_SK+_KT,8):
  300.             ass_main(ASS_BUF, SubL(i,i+10,3), an(5)+bord(2)+blur(3)+alpha1(120)+pos(_x,_y)+color1('FFFFFF')+color3('FFFFFF'), _txt)
  301.                     

  302.                     

  303.                     
  304.                     
  305.     return (ASS_BUF, TCAS_BUF)


  306. def tcaxPy_Main_Fake2(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt, ewaicanshu1, ewaicanshu2):
  307.     ASS_BUF  = []
  308.     TCAS_BUF = []

  309.     dx = _x - int(_a / 2 + 0.5)         # 一个固定操作, 将an5的坐标转换为an7
  310.     dy = _y - int(_Fs / 2 + 0.5)        # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标

  311.     if _i > 2 and _i < 8:
  312.    
  313.         for i in range(0,_a,10):
  314.             for j in range(0,_Fs,10):
  315.                 for k in range(2):
  316.                     R = randint(-20,20)
  317.                     B = randint(-5,5)
  318.                     ass_main(ASS_BUF, SubL(_BT+_SK+int(i/_Fs*_KT)+R,_BT+_SK+int(i/_Fs*_KT)+R+80), bord(0)+blur(15)+fs(15)+mov(dx+i,dy+j,dx+i+B,dy+j-40+R)+alpha1(150+R)+color1('000000')+fad(0,200), "●")
  319.                     ass_main(ASS_BUF, SubL(_BT+_SK+int(i/_Fs*_KT)+R,_BT+_SK+int(i/_Fs*_KT)+R+40), bord(0)+blur(10)+fs(20)+pos(dx+i,dy+j)+color1('0000FF')+fad(0,300), "●")
  320.     if _i > 9:
  321.         for i in range(0,_a,10):
  322.             for j in range(0,_Fs,10):
  323.                 for k in range(2):
  324.                     R = randint(-20,20)
  325.                     B = randint(-5,5)
  326.                     ass_main(ASS_BUF, SubL(_BT+_SK+int(i/_Fs*_KT)+R,_BT+_SK+int(i/_Fs*_KT)+R+80), bord(0)+blur(15)+fs(15)+mov(dx+i,dy+j,dx+i+B,dy+j-40+R)+alpha1(150+R)+color1('000000')+fad(0,200), "●")
  327.                     ass_main(ASS_BUF, SubL(_BT+_SK+int(i/_Fs*_KT)+R,_BT+_SK+int(i/_Fs*_KT)+R+40), bord(0)+blur(10)+fs(20)+pos(dx+i,dy+j)+color1('0000FF')+fad(0,300), "●")



  328.     return (ASS_BUF, TCAS_BUF)
复制代码
上面是特效主体部分

下面是mask部分
  1. from tcaxPy import *
  2. from pixLibs.ImageStone.pixStone import *

  3. def tcaxPy_Init():
  4.     global _FD          # 一帧的时间
  5.     global _Fs
  6.     global _TextLength

  7.     _FD = 1000 / GetVal(val_FXFPS)
  8.     _Fs = GetVal(val_FontSize)
  9.     _TextLength = GetVal(val_TextLength)


  10. def tcaxPy_Fin():
  11.     pass

  12. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt):

  13.     ASS_BUF  = []        # 保存ASS特效
  14.     TCAS_BUF = []        # 保存TCAS特效


  15.     if _i > -1 and _i < 3:
  16.         ass_main(ASS_BUF, SubL(_BT-20+_j*5,_BT+(_j+1)*5), an(5)+blur(1)+fad(0,50)+pos(_x,_y)+fs(100)+t(fs(1)), '▲')

  17.     if _i > 9:
  18.         ass_main(ASS_BUF, SubL(_BT-20+_j*5,_BT+(_j+1)*5), an(5)+blur(1)+fad(0,50)+pos(_x,_y)+fs(100)+t(fs(1)), '▲')


  19.     return (ASS_BUF, TCAS_BUF)
复制代码
这脚本之前打算发的 后面发现跟现在的TCAX版本运行此脚本会有BUG就没发 丢一边了  然后今天算是修复了吧
此特效火焰烟雾移动部分 之前的设想是跟 艾文大 025 - CANAAN - OP 特效一样  烟雾回头效果  但是 当时没弄出来 然后就是现在的这个版本  不打算 V2 回头部分的写法在 我的19号特效里面 都会发出来 嗯

最后这个特效得用avs的 overlay 挂起才能看到最终效果 就是这样

以下是AVS
  1. LoadPlugin("D:\tcax\VSFilter.dll")


  2. c = DirectShowSource("D:\youkaze_KFX\Accel_world\Accel_world_jp_k.mp4",fps=23.976,convertfps=true)
  3. a = DirectShowSource("D:\youkaze_KFX\Accel_world\Accel_world_jp_k.mp4",fps=23.976,convertfps=true).textsub("Accel_world_jp.ass").textsub("Accel_world_cn.ass")

  4. b = BlankClip(length = 36000, width = 1280, height = 720, fps = 23.976, color = $000000).KillAudio.ConvertToRGB32.textsub("Accel_world_jp_mask.ass")

  5. Overlay(a, c, mask = b).lanczosresize(1280,720)
复制代码
预览下载地址:
http://pan.baidu.com/share/link?shareid=316421&uk=900964
作者: balibabyer    时间: 2013-3-9 09:51:01

四月老师~~这个脚本太有深度了~~~膜拜~~~
作者: Mirael    时间: 2013-3-9 20:29:44

本帖最后由 Mirael 于 2013-3-9 21:05 编辑

Thanks for sharing, the script is admirable, but I'm after reviewing confused.
Worked a long time on it? :)

By the way, youkaze, I have a question: are you going to share in forum the effect of the [011]Hyouka Op?
I know that it is based on a sequence of images and Milky did a similar effect in Horizon Op.
I'm interested in bezier movement and clouds, but I would be grateful for the full effect, because I am weak at this.
作者: jijidata    时间: 2013-3-9 21:40:30

好长.......
作者: 四月一日 君寻    时间: 2013-3-10 13:12:26

Mirael 发表于 2013-3-9 20:29
Thanks for sharing, the script is admirable, but I'm after reviewing confused.
Worke ...

[011]Hyouka Op  这个大部分都是都是用 Tenka_Muteki_7x3 的AVS脚本制作的  py脚本过于简单 不值得放上来
作者: BurySakura    时间: 2013-3-10 14:31:47

不萌,砍掉重练。
作者: Mirael    时间: 2013-3-24 23:30:46

本帖最后由 Mirael 于 2013-3-29 21:26 编辑
四月一日 君寻 发表于 2013-3-10 13:12
[011]Hyouka Op  这个大部分都是都是用 Tenka_Muteki_7x3 的AVS脚本制作的  py脚本过于简单 不值得放上来 ...


Ach, I understand
And could you please share here the rest of the files (timing_k.ass, images, TCAS & tcc)?

EDIT:
Youkaze, please, can you help me?
作者: TQYSY    时间: 2018-8-19 14:17:10

四月大大,这个main特效的那张png图片可以放上来吗,我想看看图片的选择方向




欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/) Powered by Discuz! X2