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

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

[完整特效] [SAI]045_mekakucityactorsED [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2014-4-29 22:29:36 |只看该作者 |倒序浏览
預覽:http://pan.baidu.com/s/1hqqY9CC#dir/path=%2FSaiyakuFX_Preview
第一次用tcvideo 稍微寫了點注釋 tcvideo這個模塊貌似沒發 改天發吧
  1. from tcaxPy import *
  2. from util.tcVideo import *



  3. def tcaxPy_Init():
  4.     global _Fs
  5.     global Font
  6.     global fx_fps
  7.     global _FD
  8.     global video
  9.     global _L
  10.     _L = GetVal(val_TextLength)
  11.     _Fs = GetVal(val_FontSize)
  12.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  13.     fx_fps = GetVal(val_FXFPS)
  14.     _FD = 1000 / GetVal(val_FXFPS)
  15.     tcVideoInit()    # tcvideo初始化
  16.     video = tcVideoOpen('test.mp4')   #打開媒體文件
  17.     global light
  18.     light = []

  19.     r_o = 65
  20.     l_o = 0
  21.     for i in range (2200):
  22.         PIX = tcVideoGetFrame(video, int((getBT(0)*10/_FD)+0.5)+i)   # 獲取int((getBT(0)*10/_FD)+0.5)+i幀的畫面像素信息

  23.         cc = 30     #這邊沒什麼用 只是在調整 畫面黑白的計算容差
  24.         if int((getBT(0)*10/_FD)+0.5)+i > 30200:
  25.             cc = 15
  26.         if int((getBT(0)*10/_FD)+0.5)+i > 30840:
  27.             cc = 30
  28.         if int((getBT(0)*10/_FD)+0.5)+i > 31040:
  29.             cc = 15
  30.         if int((getBT(0)*10/_FD)+0.5)+i > 31810:
  31.             cc = 5
  32.         
  33.         h = 265   #像素Y坐標
  34.         w = 618   #像素X坐標
  35.         idx  = 4 * (h * PIX[1][0] + w)  #list腳標
  36.         r = PIX[2][idx + 0]  # RGB顏色 R值
  37.         #print(r)    #debug用
  38.         if r - r_o > cc:
  39.             l = 1
  40.         elif r_o -r >cc:
  41.             l = 0
  42.         else:
  43.             l=l_o
  44.         light.append(l)
  45.             
  46.         r_o = r
  47.         l_o = l

  48. def tcaxPy_Fin():
  49.     FinFont(Font)
  50.     tcVideoClose(video)    #關閉
  51.     tcVideoFin()

  52. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):

  53.     ASS_BUF  = []        # 保存ASS特效
  54.     TCAS_BUF = []        # 保存TCAS特效

  55.             

  56.     dx = _X - int(_A / 2 + 0.5)
  57.     dy = _Y - int(_Fs / 2 + 0.5)

  58.     outline = TextOutlineDraw(Font, _TXT, dx, dy)

  59.     t0 = _BT - 15 + _j * 7
  60.     t1 = t0 + 50
  61.     t2 = _BT + _SK - 5
  62.     t3 = _BT + _SK + _KT
  63.     t4 = _ET - 60 + _j * 7
  64.     t5 = t4 + 15

  65.     scol = 'FFFFFF'

  66.     T = 120

  67.     if _KT>120:
  68.         T = _KT
  69.    
  70.     ass_main(ASS_BUF, SubL(t2, t2+T, 11, Pix_Style), pos(0, 0) + fad(0, 900) + alpha1(0) + alpha3(HexToDec('77')) + \
  71.                                            blur(5) + bord(5) + t(bord(0)), '{\\p7}' + outline + '{\\p0}')
  72.     ass_main(ASS_BUF, SubL(t0, t5, 5, Pix_Style), pos(1, 1) + fad(500, 500) + alpha1(0) + blur(1.3) + color1('000000'), \
  73.                                                    '{\\p7}' + outline + '{\\p0}')

  74.     bframe = int((t0-getBT(0))*10/_FD)
  75.     if light[bframe]==1:

  76.         ass_main(ASS_BUF, SubL(t0, t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(150)  + color1('FFFFFF'),'{\\p7}' + outline + '{\\p0}')
  77.     else:
  78.         ass_main(ASS_BUF, SubL(t0,t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(120)  + color1('000000'),'{\\p7}' + outline + '{\\p0}')

  79.     frames = int((_ET - 60-t1)*10 / _FD + 0.5)   #總幀數
  80.     bframe = int((t1-getBT(0))*10/_FD)      #開始幀
  81.     ts = t1
  82.     te = t1
  83.     ll = light[bframe]
  84.     ll_o = light[bframe]
  85.     for i in range(frames):      #逐幀
  86.         te += _FD / 10
  87.         ll = light[bframe+i]
  88.         if ll != ll_o:

  89.             ll_o = ll
  90.             if te < _ET - 60:
  91.                 if ll!=1:
  92.                     ass_main(ASS_BUF, SubL(ts, te - _FD / 10, 6, Pix_Style), pos(0, 0) +fad(30,30) + alpha1(150)  + color1('FFFFFF'),'{\\p7}' + outline + '{\\p0}')
  93.                 else:
  94.                     ass_main(ASS_BUF, SubL(ts,te - _FD / 10, 6, Pix_Style), pos(0, 0) +fad(30,30) + alpha1(120)  + color1('000000'),'{\\p7}' + outline + '{\\p0}')
  95.             ts = te - _FD / 10

  96.     # 這下面就沒什麼好講的了 無視
  97.     lastptx0 = 0
  98.     lastpty0 = 0
  99.     first = True
  100.     ti = t0 - 100 + randint(-30, 30)
  101.     while ti <= t5 - 150:
  102.         ptt0 = ti
  103.         ptt1 = ptt0 + 300
  104.         ptx0 = randint(_X - 20, _X + 20)
  105.         pty0 = randint(_Y - 20, _Y + 20)
  106.         if not first:
  107.             for i in range(2):
  108.                 ptx0_tmp = randint(_X - 20, _X + 20)
  109.                 pty0_tmp = randint(_Y - 20, _Y + 20)
  110.                 if GetDistance(lastptx0, lastpty0, ptx0, pty0) < GetDistance(lastptx0, lastpty0, ptx0_tmp, pty0_tmp):
  111.                     ptx0 = ptx0_tmp
  112.                     pty0 = pty0_tmp
  113.         first = False
  114.         lastptx0 = ptx0
  115.         lastpty0 = pty0
  116.         ptcol = 'FFFFFF'
  117.         lumsz = 15 + GetDistance(_X, _Y, ptx0, pty0) * 0.5
  118.         if ptt0 >= t2:
  119.             ptcol = scol
  120.         ts0 = ''
  121.         if ptt0 < t2 and ptt1 > t2:
  122.             ts0 = t(10 * (t2 - ptt0) - 10, 10 * (t2 - ptt0), color1(scol) + color3(scol))
  123.         dup = 1
  124.         if _j >= 4:
  125.             dup = 2
  126.         while dup > 0:
  127.             ass_main(ASS_BUF, SubL(ptt0, ptt1, 10, Pix_Style), pos(ptx0, pty0) + clip(7, outline) + org(_X, _Y) + t(frz(RandSign() * randint(80, 120))) + \
  128.                                 fad(800, 800) + t(0, 10 * (ptt1 - ptt0), bord(lumsz) + blur(lumsz)) + alpha1(HexToDec('44')) + alpha3(HexToDec('44')) + color1(ptcol) + color3(ptcol) + \
  129.                                 ts0 + t((ptt1 - ptt0) * 700, ptt1, color1('000000') + color3('000000')), PixPt())
  130.             dup -= 1
  131.         ti += randint(120, 165)

  132.    

  133.     return (ASS_BUF, TCAS_BUF)
复制代码
3

查看全部评分

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2014-4-30 20:43:31 |只看该作者
这货前些天小伊也尝试了下, 话说我都忘光了...

p.s. 效果和画面很融合啊, 赞一个

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2014-4-30 21:41:41 |只看该作者
milkyjing 发表于 2014-4-30 20:43
这货前些天小伊也尝试了下, 话说我都忘光了...

p.s. 效果和画面很融合啊, 赞一个 ...

小伊用的tcaudio吧 這是tcvideo
貌似沒發佈 我去發佈一下? 順便把例子扔出來

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

地板
发表于 2014-4-30 22:28:32 |只看该作者
saiyaku 发表于 2014-4-30 21:41
小伊用的tcaudio吧 這是tcvideo
貌似沒發佈 我去發佈一下? 順便把例子扔出來 ...

给力~ 发吧

我看错了

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

5#
发表于 2014-5-1 16:03:51 |只看该作者
milkyjing 发表于 2014-4-30 22:28
给力~ 发吧

我看错了


在改那個平均值算法
我昨天試了取區域方塊的平均值還是和畫面一點關係都沒有。。。
我估計改成取中值也許會接近一點
畢竟一般做畫像處理也都是medianfilter
另外眾數什麼的 也可能試一下
改完 會和例子一起放出來

Rank: 4

6#
发表于 2014-5-1 16:20:32 |只看该作者
太赞了 电车驶过 同步的特效

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

7#
发表于 2014-5-2 22:17:21 |只看该作者
saiyaku 发表于 2014-5-1 16:03
在改那個平均值算法
我昨天試了取區域方塊的平均值還是和畫面一點關係都沒有。。。
我估計改成取中值也 ...

看到了, 很赞~, ASS大群里吼一声

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

8#
发表于 2014-5-2 22:17:40 |只看该作者
兜兜里没糖 发表于 2014-5-1 16:20
太赞了 电车驶过 同步的特效

我也觉得, 和画面很融洽

Rank: 4

9#
发表于 2022-1-26 03:06:17 |只看该作者
本帖最后由 Seekladoom 于 2022-1-29 03:59 编辑

上面的脚本没法直接跑啊,能直接跑的得看下面这个链接:
TCAX視頻處理模塊tcVideo Beta版發佈


tcVideo.part1.rar (950 KB, 下载次数: 1887)
tcVideo.part2.rar (950 KB, 下载次数: 1880)
tcVideo.part3.rar (797.06 KB, 下载次数: 1880)

tcVideo跑不起来的可能原因

【User格式】
1.分辨率过高(建议优先考虑360P、480P)
2.pos写法不规范(sai大示例均为具体实数)
3.progress写法不正确

【Main格式】
缺乏相应的进度反馈函数

Rank: 4

10#
发表于 2022-1-27 03:12:16 |只看该作者
本帖最后由 Seekladoom 于 2022-2-1 03:31 编辑

反复试错试了半天才注意到,sai大的脚本应该是能跑的,不过本人用的是TCAX 1.2.0,直接使用sai大的代码去跑时TCAX半天没有出现任何运行提示,等了很多次都是大概等待3分钟左右,TCAX就崩溃了。 黑屏等待.png

拆解了各分区代码运行测试后发现,tcVideo模块的相关代码写在def tcaxPy_Main下无法正常运行,极其容易出现等待3分钟左右,TCAX就崩溃的现象。不知道sai大用的是哪个版本的TCAX?

1.非tcVideo部分(可直接运行)
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _Fs
  4.     global Font
  5.     global fx_fps
  6.     global _FD
  7.     _Fs = GetVal(val_FontSize)
  8.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  9.     fx_fps = GetVal(val_FXFPS)
  10.     _FD = 1000 / GetVal(val_FXFPS)

  11. def tcaxPy_Fin():
  12.     FinFont(Font)

  13. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):
  14.     ASS_BUF  = []        # 保存ASS特效

  15.     dx = _X - int(_A / 2 + 0.5)
  16.     dy = _Y - int(_Fs / 2 + 0.5)
  17.     outline = TextOutlineDraw(Font, _TXT, dx, dy)
  18.     t0 = _BT - 15 + _j * 7
  19.     t1 = t0 + 50
  20.     t2 = _BT + _SK - 5
  21.     t3 = _BT + _SK + _KT
  22.     t4 = _ET - 60 + _j * 7
  23.     t5 = t4 + 15

  24.     scol = 'FFFFFF'
  25.    
  26.     T = 120
  27.     if _KT > 120:
  28.         T = _KT
  29.    
  30.     ass_main(ASS_BUF, SubL(t2, t2+T, 11, Pix_Style), pos(0, 0) + fad(0, 900) + alpha1(0) + alpha3(HexToDec('77')) + blur(5) + bord(5) + t(bord(0)) + p(7), outline)
  31.     ass_main(ASS_BUF, SubL(t0, t5, 5, Pix_Style), pos(1, 1) + fad(500, 500) + alpha1(0) + blur(1.3) + color1('000000') + p(7), outline)

  32.     # 這下面就沒什麼好講的了 無視
  33.     lastptx0 = 0
  34.     lastpty0 = 0
  35.     first = True
  36.     ti = t0 - 100 + randint(-30, 30)
  37.     while ti <= t5 - 150:
  38.         ptt0 = ti
  39.         ptt1 = ptt0 + 300
  40.         ptx0 = randint(_X - 20, _X + 20)
  41.         pty0 = randint(_Y - 20, _Y + 20)
  42.         if not first:
  43.             for i in range(2):
  44.                 ptx0_tmp = randint(_X - 20, _X + 20)
  45.                 pty0_tmp = randint(_Y - 20, _Y + 20)
  46.                 if GetDistance(lastptx0, lastpty0, ptx0, pty0) < GetDistance(lastptx0, lastpty0, ptx0_tmp, pty0_tmp):
  47.                     ptx0 = ptx0_tmp
  48.                     pty0 = pty0_tmp
  49.         first = False
  50.         lastptx0 = ptx0
  51.         lastpty0 = pty0
  52.         ptcol = 'FFFFFF'
  53.         lumsz = 15 + GetDistance(_X, _Y, ptx0, pty0) * 0.5
  54.         if ptt0 >= t2:
  55.             ptcol = scol
  56.         ts0 = ''
  57.         if ptt0 < t2 and ptt1 > t2:
  58.             ts0 = t(10 * (t2 - ptt0) - 10, 10 * (t2 - ptt0), color1(scol) + color3(scol))
  59.         dup = 1
  60.         if _j >= 4:
  61.             dup = 2
  62.         while dup > 0:
  63.             ass_main(ASS_BUF, SubL(ptt0, ptt1, 10, Pix_Style), pos(ptx0, pty0) + clip(7, outline) + org(_X, _Y) + t(frz(RandSign() * randint(80, 120))) + \
  64.                                 fad(800, 800) + t(0, 10 * (ptt1 - ptt0), bord(lumsz) + blur(lumsz)) + alpha1(HexToDec('44')) + alpha3(HexToDec('44')) + color1(ptcol) + color3(ptcol) + \
  65.                                 ts0 + t((ptt1 - ptt0) * 700, ptt1, color1('000000') + color3('000000')), PixPt())
  66.             dup -= 1
  67.         ti += randint(120, 165)

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


2.写在def tcaxPy_Init和def tcaxPy_Main下无法正常运行的【文字跟色部分】
  1. from tcaxPy import *
  2. from util.tcVideo import *

  3. def tcaxPy_Init():
  4.     global _FD
  5.     global _Fs
  6.     global Font
  7.     global fx_fps
  8.     global light
  9.     _FD = 1000 / GetVal(val_FXFPS)
  10.     _Fs = GetVal(val_FontSize)
  11.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  12.     fx_fps = GetVal(val_FXFPS)
  13.     light = []

  14.     global video
  15.     tcVideoInit()    # tcvideo初始化
  16.     video = tcVideoOpen('test.mp4')   #打開媒體文件

  17.     r_o = 65
  18.     l_o = 0
  19.     for i in range (2200):
  20.         PIX = tcVideoGetFrame(video, int((getBT(0)*10/_FD)+0.5)+i)   # 獲取int((getBT(0)*10/_FD)+0.5)+i幀的畫面像素信息

  21.         cc = 30     #這邊沒什麼用 只是在調整 畫面黑白的計算容差
  22.         if int((getBT(0)*10/_FD)+0.5)+i > 30200:
  23.             cc = 15
  24.         if int((getBT(0)*10/_FD)+0.5)+i > 30840:
  25.             cc = 30
  26.         if int((getBT(0)*10/_FD)+0.5)+i > 31040:
  27.             cc = 15
  28.         if int((getBT(0)*10/_FD)+0.5)+i > 31810:
  29.             cc = 5
  30.         
  31.         h = 265   #像素Y坐標
  32.         w = 618   #像素X坐標
  33.         idx  = 4 * (h * PIX[1][0] + w)  #list腳標
  34.         r = PIX[2][idx + 0]  # RGB顏色 R值
  35.         #print(r)    #debug用
  36.         if r - r_o > cc:
  37.             l = 1
  38.         elif r_o - r > cc:
  39.             l = 0
  40.         else:
  41.             l=l_o
  42.         light.append(l)
  43.             
  44.         r_o = r
  45.         l_o = l


  46. def tcaxPy_Fin():
  47.     FinFont(Font)
  48.     tcVideoClose(video)    #關閉
  49.     tcVideoFin()

  50. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):
  51.     ASS_BUF  = []        # 保存ASS特效

  52.     DY = _Y - 13
  53.     dx = _X - int(_A / 2 + 0.5)
  54.     dy = DY - int(_Fs / 2 + 0.5)
  55.     outline = TextOutlineDraw(Font, _TXT, dx, dy)
  56.     t0 = _BT - 15 + _j * 7
  57.     t1 = t0 + 50
  58.     t2 = _BT + _SK - 5
  59.     t3 = _BT + _SK + _KT
  60.     t4 = _ET - 60 + _j * 7
  61.     t5 = t4 + 15

  62.     scol = 'FFFFFF'
  63.    
  64.     T = 120
  65.     if _KT > 120:
  66.         T = _KT
  67.    
  68.     ass_main(ASS_BUF, SubL(t2, t2+T, 11, Pix_Style), pos(0, 0) + fad(0, 900) + alpha1(0) + alpha3(HexToDec('77')) + blur(5) + bord(5) + t(bord(0)) + p(7), outline)
  69.     ass_main(ASS_BUF, SubL(t0, t5, 5, Pix_Style), pos(1, 1) + fad(500, 500) + alpha1(0) + blur(1.3) + color1('000000') + p(7), outline)

  70.     bframe = int((t0-getBT(0))*10/_FD)
  71.     if light[bframe] == 1:
  72.         ass_main(ASS_BUF, SubL(t0, t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(150)  + color1('FFFFFF') + p(7), outline)
  73.     else:
  74.         ass_main(ASS_BUF, SubL(t0,t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(120)  + color1('000000') + p(7), outline)

  75.     frames = int((_ET - 60-t1)*10 / _FD + 0.5)   #總幀數
  76.     bframe = int((t1-getBT(0))*10/_FD)      #開始幀
  77.     ts = t1
  78.     te = t1
  79.     ll = light[bframe]
  80.     ll_o = light[bframe]
  81.     for i in range(frames):      #逐幀
  82.         te += _FD / 10
  83.         ll = light[bframe+i]
  84.         if ll != ll_o:

  85.             ll_o = ll
  86.             if te < _ET - 60:
  87.                 if ll!=1:
  88.                     ass_main(ASS_BUF, SubL(ts, te - _FD / 10, 6, Pix_Style), pos(0, 0) +fad(30,30) + alpha1(150)  + color1('FFFFFF'),'{\\p7}' + outline + '{\\p0}')
  89.                 else:
  90.                     ass_main(ASS_BUF, SubL(ts,te - _FD / 10, 6, Pix_Style), pos(0, 0) +fad(30,30) + alpha1(120)  + color1('000000'),'{\\p7}' + outline + '{\\p0}')
  91.             ts = te - _FD / 10

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



脚本目前还在改造中,能直接跑的完整版本改好以后会贴在下面(请先将楼主提供的tcVideo模块解压到TCAX安装目录下的util文件夹以后,再使用如下脚本,否则无法正常运行):
TCAX Karaoke Effect mekaku_ed.rar (19.56 KB, 下载次数: 1854)
  1. from tcaxPy import  *
  2. from util.tcVideo import  *

  3. def tcaxPy_Init():
  4.     global _FD
  5.     global _Fs
  6.     global Font
  7.     _FD = 1000 / GetVal(val_FXFPS)
  8.     _Fs = GetVal(val_FontSize)
  9.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)

  10.     # tcVideo
  11.     global video
  12.     tcVideoInit()    # tcvideo初始化
  13.     video = tcVideoOpen('mekakucityactors_NCED.mp4')   #打开媒体文件
  14.    
  15.     # light 列表
  16.     global light
  17.     light = []
  18.     rgb_o = 65
  19.     l_o = 0
  20.     for i in range (200):
  21.         PIX = tcVideoGetFrame(video, int((getBT(0) * 10 / _FD) + 0.5) + i)   # 逐帧获取int((getBT(0) * 10/_FD) + 0.5) + i帧的画面像素信息,此脚本运行的主要耗时就在这里
  22.         cc = 30     #这边没什麽用 只是在调整 画面黑白的计算容差
  23.         if int((getBT(0) * 10/_FD) + 0.5) + i > 30200:
  24.             cc = 15
  25.         if int((getBT(0) * 10/_FD) + 0.5) + i > 30840:
  26.             cc = 30
  27.         if int((getBT(0) * 10/_FD) + 0.5) + i > 31040:
  28.             cc = 15
  29.         if int((getBT(0) * 10/_FD) + 0.5) + i > 31810:
  30.             cc = 5
  31.         
  32.         h = 265   #像素Y坐标
  33.         w = 618   #像素X坐标
  34.         idx  = 4 * (h * PIX[1][0] + w)  #list脚标
  35.         rgb = PIX[2][idx + 0]  # RGB颜色 R值
  36.         
  37.         #print(rgb)    #debug用
  38.         if rgb - rgb_o > cc:
  39.             l = 1
  40.         elif rgb_o - rgb > cc:
  41.             l = 0
  42.         else:
  43.             l = l_o
  44.         light.append(l) #输出l的列表light

  45.         rgb_o = rgb
  46.         l_o = l
  47.         progress(i + 1, 200)

  48. def tcaxPy_Fin():
  49.     FinFont(Font)
  50.     tcVideoClose(video)    #关闭
  51.     tcVideoFin()

  52. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):
  53.     ASS_BUF  = []        # 保存ASS特效

  54.     DY = _Y - 13
  55.     dx = _X - int(_A / 2 + 0.5)
  56.     dy = DY - int(_Fs / 2 + 0.5)
  57.     outline = TextOutlineDraw(Font, _TXT, dx, dy)
  58.     t0 = _BT - 15 + _j * 7
  59.     t1 = t0 + 50
  60.     t2 = _BT + _SK - 5
  61.     t3 = _BT + _SK + _KT
  62.     t4 = _ET - 60 + _j * 7
  63.     t5 = t4 + 15

  64.     scol = 'FFFFFF'
  65.    
  66.     T = 120
  67.     if _KT > 120:
  68.         T = _KT
  69.    
  70.     ass_main(ASS_BUF, SubL(t2, t2 + T, 11, Pix_Style), pos(0, 0) + fad(0, 900) + alpha1(0) + alpha3(HexToDec('77')) + blur(5) + bord(5) + t(bord(0)) + p(7), outline)
  71.     ass_main(ASS_BUF, SubL(t0, t5, 5, Pix_Style), pos(1, 1) + fad(500, 500) + alpha1(0) + blur(1.3) + color1('000000') + p(7), outline)

  72.     # 根据背景亮度变化闪烁的文字
  73.     bframe = int((t0 - getBT(0)) * 10 / _FD)
  74.     if light[bframe] == 1:
  75.         ass_main(ASS_BUF, SubL(t0, t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(150) + color1('FFFFFF') + p(7), outline)
  76.     else:
  77.         ass_main(ASS_BUF, SubL(t0, t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(120) + color1('000000') + p(7), outline)

  78.     frames = int((_ET - 60 - t1) * 10 / _FD + 0.5)   #总帧数
  79.     bframe = int((t1 - getBT(0)) * 10/_FD)      #开始帧
  80.     ts = t1
  81.     te = t1
  82.     ll = light[bframe]
  83.     ll_o = light[bframe]
  84.     for i in range(frames):#逐帧判断并改变文字的透明度
  85.         te += _FD / 10
  86.         ll = light[bframe+i]
  87.         if ll != ll_o:
  88.             ll_o = ll
  89.             if te < _ET - 60:
  90.                 if ll!=1:#改变文字的透明度
  91.                     ass_main(ASS_BUF, SubL(ts, te - _FD / 10, 6, Pix_Style), pos(0, 0) + fad(30,30) + alpha1(150) + color1('FFFFFF') + p(7), outline)
  92.                 else:
  93.                     ass_main(ASS_BUF, SubL(ts, te - _FD / 10, 6, Pix_Style), pos(0, 0) + fad(30,30) + alpha1(120) + color1('000000') + p(7), outline)
  94.             ts = te - _FD / 10
  95.         progress(i + 1, frames)

  96.     # 像素文字部分
  97.     lastptx0 = 0
  98.     lastpty0 = 0
  99.     first = True
  100.     ti = t0 - 100 + randint(-30, 30)
  101.     while ti <= t5 - 150:
  102.         ptt0 = ti
  103.         ptt1 = ptt0 + 300
  104.         ptx0 = randint(_X - 20, _X + 20)
  105.         pty0 = randint(DY - 20, DY + 20)
  106.         if not first:
  107.             for i in range(2):
  108.                 ptx0_tmp = randint(_X - 20, _X + 20)
  109.                 pty0_tmp = randint(DY - 20, DY + 20)
  110.                 if GetDistance(lastptx0, lastpty0, ptx0, pty0) < GetDistance(lastptx0, lastpty0, ptx0_tmp, pty0_tmp):
  111.                     ptx0 = ptx0_tmp
  112.                     pty0 = pty0_tmp
  113.         first = False
  114.         lastptx0 = ptx0
  115.         lastpty0 = pty0
  116.         ptcol = 'FFFFFF'
  117.         lumsz = 15 + GetDistance(_X, DY, ptx0, pty0) * 0.5
  118.         if ptt0 >= t2:
  119.             ptcol = scol
  120.         ts0 = ''
  121.         if ptt0 < t2 and ptt1 > t2:
  122.             ts0 = t(10 * (t2 - ptt0) - 10, 10 * (t2 - ptt0), color1(scol) + color3(scol))
  123.         dup = 1
  124.         if _j >= 4:
  125.             dup = 2
  126.         while dup > 0:
  127.             ass_main(ASS_BUF, SubL(ptt0, ptt1, 10, Pix_Style), pos(ptx0, pty0) + clip(7, outline) + org(_X, DY) + t(frz(RandSign() * randint(80, 120))) + \
  128.                                 fad(800, 800) + t(0, 10 * (ptt1 - ptt0), bord(lumsz) + blur(lumsz)) + alpha1(HexToDec('44')) + alpha3(HexToDec('44')) + color1(ptcol) + color3(ptcol) + \
  129.                                 ts0 + t((ptt1 - ptt0) * 700, ptt1, color1('000000') + color3('000000')), PixPt())
  130.             dup -= 1
  131.         ti += randint(120, 165)

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

检查测试后发现必须要在有tcVideo的for循环下添加progress以后才能更方便地观察TCAX的工作进度,因此凡是涉及tcVideo的TCAX特效脚本,最好都在相应位置添加progress函数跟踪运行进度。

Rank: 4

11#
发表于 2022-2-7 01:26:57 |只看该作者
Capture.PNG

NameError: global name 'getBT' is not defined

Any help?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

12#
发表于 2022-2-7 12:16:35 |只看该作者
Alex 发表于 2022-2-7 01:26
NameError: global name 'getBT' is not defined

Any help?

getBT is an internal function defined in tcaxPy.py script

find the file then check if it is defined there

Rank: 4

13#
发表于 2022-2-7 22:45:08 |只看该作者
本帖最后由 Alex 于 2022-2-7 22:46 编辑

There's no any internal fun of getBT in tcaxPy.py

Rank: 4

14#
发表于 2022-2-8 18:15:42 |只看该作者
本帖最后由 Seekladoom 于 2022-2-8 18:17 编辑
Alex 发表于 2022-2-7 22:45
There's no any internal fun of getBT in tcaxPy.py
【tcaxPy脚本】tcaxPy Version 0.8.0.3(更新中)

Rank: 4

15#
发表于 2022-2-9 01:37:20 |只看该作者
Thank you
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-25 22:26

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH