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

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

[完整特效] [jiji]004_Clannad ~After Story OP1 [复制链接]

Rank: 4

楼主
发表于 2021-8-20 21:11:05 |显示全部楼层
本帖最后由 Seekladoom 于 2021-8-20 23:09 编辑

第110行的blink目的是想做类似AutoTags一样的效果吗?
  1. blink = alt(start,end, t = 30 , FX1 = alpha(255), FX2 = alpha(0), offset = 0, a1 = None,a2 = None)
复制代码

常用自定义函数AutoTags及其变种的介绍
http://www.tcax.org/forum.php?mod=viewthread&tid=1230


Python版的AutoTags:
  1. import math

  2. class autotag:
  3.         def __init__(self, intervalo1=0, intervalo2=0, dato1="",
  4.                                 dato2="", pause=0, delay=0, line_dur=0):
  5.                
  6.                 self.intervalo1 = intervalo1
  7.                 self.intervalo2 = intervalo2
  8.                 self.dato1 = dato1
  9.                 self.dato2 = dato2
  10.                 self.pause = pause
  11.                 self.delay = delay
  12.                
  13.                 self.resultado = ""
  14.                 self.suerte = ""
  15.                 self.contador = 0
  16.                 self.line_dur = line_dur
  17.       
  18.         def autotags(self):
  19.                 count = math.ceil(self.line_dur / self.intervalo1)
  20.                
  21.                 for i in range(count):
  22.                         if i % 2 == 0:
  23.                                 self.suerte = self.dato1
  24.                         else:
  25.                                 self.suerte = self.dato2
  26.                        
  27.                         self.resultado += "\\t({0}, {1}, {2})".format(i*self.intervalo1, (i+1)*self.intervalo1, self.suerte)
  28.                
  29.                 return self.resultado
  30.       
  31.         def autotags1(self):
  32.                 count = math.ceil(self.line_dur / (self.intervalo1+self.pause))
  33.                
  34.                 for i in range(count):
  35.                         if i % 2 == 0:
  36.                                 self.suerte = self.dato1
  37.                         else:
  38.                                 self.suerte = self.dato2
  39.                        
  40.                         self.resultado += "\\t({0}, {1}, {2})".format(i*(self.intervalo1+self.pause), (i+1)*self.intervalo1+i*self.pause, self.suerte)
  41.                
  42.                 return self.resultado
  43.       
  44.         def autotags2(self):
  45.                 count = math.ceil(self.line_dur / self.intervalo1)
  46.                
  47.                 for i in range(count):
  48.                         if i % 2 == 0:
  49.                                 self.suerte = self.dato1
  50.                         else:
  51.                                 self.suerte = self.dato2
  52.                        
  53.                         self.resultado += "\\t({0}, {1}, {2})".format(i*self.intervalo1+self.delay, (i+1)*self.intervalo1+self.delay, self.suerte)
  54.                
  55.                 return self.resultado
  56.       
  57.         def autotags3(self):
  58.                 count = 2 * math.ceil(self.line_dur / (self.intervalo1 + self.intervalo2))
  59.                 d = math.ceil((self.intervalo2 - self.intervalo1) / count)
  60.                 t = [0]
  61.                
  62.                 for i in range(count):
  63.                        
  64.                         t.append(t[i] + self.intervalo1 + i * d)
  65.                        
  66.                         if i % 2 == 0:
  67.                                 self.suerte = self.dato1
  68.                         else:
  69.                                 self.suerte = self.dato2
  70.                        
  71.                         self.resultado += "\\t({0}, {1}, {2})".format(t[i], t[i+1], self.suerte)
  72.                
  73.                 return self.resultado
复制代码

Rank: 4

沙发
发表于 2021-8-20 21:37:55 |显示全部楼层
本帖最后由 Seekladoom 于 2021-8-20 23:56 编辑

在这个帖子中找到了,果然是类似AutoTags的闪烁字幕效果:
主要是MOD的tag 不是很實用 自己都沒怎麼用過


代码如下:
  1. def alt(BT,ET, t = 100 , FX1 = alpha(255), FX2 = alpha(0), offset = 0, a1 = None,a2 = None):         #交替t效果 默认闪烁
  2.     n = 1
  3.     T = ''
  4.     for i in range(int(t)+ int(offset),(ET-BT)*10,int(t)):
  5.         if n % 2 != 0 :   
  6.             X1 = [str(i-t),str(i),a1,FX1]
  7.             T1 = '\\t('+','.join(str(x) for x in X1 if x != None)+ ')'
  8.             T += T1
  9.         else:
  10.             X2 = [str(i-t),str(i),a2,FX2]
  11.             T2 = '\\t('+','.join(str(x) for x in X2 if x != None)+ ')'
  12.             T += T2
  13.         n += 1   
  14.     return T
复制代码
注:这个def alt我尝试直接添加到tcaxPy.py文件中去,结果跑tcax命令行时就出现了这样的提示:
【图1】
alpha未定义.png

然而alpha在tcaxPy.py文件是有定义的,具体如下图所示:
图2
问题分析?.png

搞清楚原因了,def alt必须放到def alpha后面(如图2,def alpha在第645行,def alt在第660行)才不会出现name 'alpha' is not defined(名称alpha未定义)的情况。
因为def alt本身是一个带有多个变量的复合函数,其中用到的变量对应的函数(比如alpha变量对应的def alpha)若是被放到def alt后面的位置就会无法顺利读取,导致出现name 'alpha' is not defined(名称alpha未定义)的情况。

之前图1的情况就是因为def alt被放在了第450行,而def alpha在第600多行的位置才发生的。

这里附上我在mccoy39082的基础上(tcax.py Version 8.0.0.2)修改过的tcaxPy.py文件(mccoy39082帖子下的2楼回复),各位朋友直接放进tcax的根目录下替换原先的tcaxPy.py文件即可:
tcaxPy.py (46.86 KB, 下载次数: 1608)


如此一来也可以省去from s import *这行代码了,根据上面摸索出来的规则就可以把s.py的内容转移到tcaxPy.py文件中并进行测试了。
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-6 14:01

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH