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

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

[其他] 【TCAX相关】Python脚本编写时的代码缩进问题 [复制链接]

Rank: 4

跳转到指定楼层
楼主
发表于 2021-7-13 11:47:47 |只看该作者 |倒序浏览
本帖最后由 Seekladoom 于 2021-7-13 12:28 编辑

相关链接:
用TCAX制作分段特效时注意到的一些问题

初学者用Python语言写代码时很容易踩代码缩进的坑,容易写出多种空格缩进代码混用的情况,而Python语言对代码缩进很敏感,混用会直接导致TCAX无法运行。用惯了Aegisub去写lua代码的人在接触Python时很容易碰到这个问题,因为lua语言的缩进并没有python这么严格,多种缩进混用只要没有大错一般也能跑,容错性较高。

补充:如果反复修改TCAX脚本的两格缩进和四格缩进,运行TCAX时就有可能出现即便统一了代码缩进格式也依然报错的情况,特别是刚把两格缩进全换成四格缩进或者四格缩进全换成两格缩进时,这种情况最容易发生,这个时候你即便写对了,TCAX也依然会反馈缩进错误。这种情况下建议关掉TCAX重开或者改完以后等十几秒再跑TCAX就能正常运行了。

贴一下两格缩进四格缩进的代码示例,推荐用四格缩进,因为四格缩进便于浏览且论坛内写的人也多,工业生态相对较好:

两格缩进
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _FD                              # frame duration, in millisecond
  4.     global _Blur
  5.     _FD = 1000 / GetVal(val_FXFPS)
  6.     _Blur = GetVal(val_Blur)

  7. def tcaxPy_Fin():
  8.     pass

  9. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  10.     ASS_BUF = []        # used for saving ASS FX lines
  11.    
  12.   if _i < 5:
  13.     ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,0,'OPJP'), pos(_x,_y)+color1('3767E6')+color3('FFFFFF')+blur(2)+fad(200,0), _txt)                                  #入场特效 - start2syl
  14.     ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,0,'OPJP'), pos(_x,_y)+blur(2)+color1('3767E6')+color3('FFFFFF')+t(color1('FFFFFF')+color3('3767E6')), _txt)      #卡拉OK特效 - syl
  15.     ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,0,'OPJP'), pos(_x,_y)+color1('FFFFFF')+color3('3767E6')+blur(2)+fad(0,200), _txt)                          #退场特效 - syl2end

  16.   if _i >= 5:
  17.     ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,0,'OPJP2'), pos(_x,_y)+color1('3767E6')+color3('FFFFFF')+blur(2)+fad(200,0), _txt)                                  #入场特效 - start2syl
  18.     ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,0,'OPJP2'), pos(_x,_y)+blur(2)+color1('3767E6')+color3('FFFFFF')+t(color1('FFFFFF')+color3('3767E6')), _txt)      #卡拉OK特效 - syl
  19.     ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,0,'OPJP2'), pos(_x,_y)+color1('FFFFFF')+color3('3767E6')+blur(2)+fad(0,200), _txt)                          #退场特效 - syl2end

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

四格缩进
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _FD                              # frame duration, in millisecond
  4.     global _Blur
  5.     _FD = 1000 / GetVal(val_FXFPS)
  6.     _Blur = GetVal(val_Blur)

  7. def tcaxPy_Fin():
  8.     pass

  9. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  10.     ASS_BUF = []        # used for saving ASS FX lines
  11.    
  12.     if _i < 5:
  13.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,0,'OPJP'), pos(_x,_y)+color1('3767E6')+color3('FFFFFF')+blur(2)+fad(200,0), _txt)                                  #入场特效 - start2syl
  14.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,0,'OPJP'), pos(_x,_y)+blur(2)+color1('3767E6')+color3('FFFFFF')+t(color1('FFFFFF')+color3('3767E6')), _txt)      #卡拉OK特效 - syl
  15.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,0,'OPJP'), pos(_x,_y)+color1('FFFFFF')+color3('3767E6')+blur(2)+fad(0,200), _txt)                          #退场特效 - syl2end

  16.     if _i >= 5:
  17.         ass_main(ASS_BUF, SubL(_start+_j*3-20,_start+_elapk,0,'OPJP2'), pos(_x,_y)+color1('3767E6')+color3('FFFFFF')+blur(2)+fad(200,0), _txt)                                  #入场特效 - start2syl
  18.         ass_main(ASS_BUF, SubL(_start+_elapk,_start+_elapk+_k,0,'OPJP2'), pos(_x,_y)+blur(2)+color1('3767E6')+color3('FFFFFF')+t(color1('FFFFFF')+color3('3767E6')), _txt)      #卡拉OK特效 - syl
  19.         ass_main(ASS_BUF, SubL(_start+_elapk+_k,_end-(_n-_j-1)*3+20,0,'OPJP2'), pos(_x,_y)+color1('FFFFFF')+color3('3767E6')+blur(2)+fad(0,200), _txt)                          #退场特效 - syl2end

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

Rank: 4

沙发
发表于 2021-8-19 11:49:39 |只看该作者
本帖最后由 Seekladoom 于 2021-8-19 13:59 编辑

补充:使用TCAX或TCAX Studio时,如果短时间(15秒内对py、tcc文件进行3次以上修改并用TCAX或TCAX Studio进行自动化操作)内频繁修改py和tcc文件且所有修改的语法都正确的情况下,用TCAX或TCAX Studio自动化生成特效字幕时,依然很容易碰到这样的报错(实际上我自己的代码没有任何语法问题,等待15秒就能继续用就是最好的证明):

操作过快引发的报错.png

这种时候只要把TCAX或TCAX Studio关掉重开或者等待15秒左右就能继续跑了,如果脾气暴躁的朋友碰到这个问题,个人推荐直接关掉重开来得更快些,需要高强度测试TCAX的人强烈建议关掉重开,实在不行可以重启电脑。

个人猜测可能是TCAX底层代码中的垃圾回收处理机制不够完善且TCAX释放缓存的速度不够快,缓存释放完之前使用者又继续操作了,TCAX来不及处理而产生了上面这样的报错。


Rank: 4

板凳
发表于 2021-12-22 15:12:39 |只看该作者
  1. def tcaxPy_Fin():
  2.     pass
复制代码
That's great, thank you.

Rank: 4

地板
发表于 2022-3-17 03:23:37 |只看该作者
本帖最后由 Seekladoom 于 2022-3-17 03:23 编辑

注:长按Tab可输入长空格
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-11-22 01:44

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH