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

 找回密码
 新人加入
查看: 5812|回复: 1

自定义特效编写模板tcaxPy_User函数用法例子 [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-26 14:25:34 |显示全部楼层
说明

利用tcaxPy_User函数, 我们可以随意定制自己的特效模板. 比起直接使用tcaxPy_Main函数, 灵活性要大很多, 但tcaxPy_Main封装了许多细节, 使用起来更加简单. 下面这个例子, 既保持了tcaxPy_Main的简单性, 也提供了tcaxPy_User的灵活性, 值得参考. 使用tcaxPy_User函数, 需要在tcc文件中设置, < tcaxpy user = true >


例子

代码如下

user_template_1.py (3.32 KB, 下载次数: 1491)
  1. from tcaxPy import *

  2. # 用户修订版的tcaxPy_Main函数, 保留原始tcaxPy_Main风格是为了减少额外记忆量, 实际上该函数形式可以非常多样化
  3. def tcaxPy_Main_Fake(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  4.     ASS_BUF  = []        # 保存ASS特效
  5.     TCAS_BUF = []        # 保存TCAS特效
  6.     ##### 主要特效编写操作 ####
  7.     _Spacing = GetVal(val_Spacing)
  8.     _Fs = GetVal(val_FontSize)
  9.     dx = _x - int((_a + _Spacing) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  10.     dy = _y - int(_Fs / 2 + 0.5)                 # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  11.     # 增加特效
  12.     # ass_main...
  13.     ass_main(ASS_BUF, SubL(_start, _end), pos(_x, _y), _txt)
  14.     # tcas_main...
  15.     ##### 将结果返回给tcax进行处理 #####
  16.     return (ASS_BUF, TCAS_BUF)

  17. # 除了少数几个细节的不同, 本例子实际上就是TCAX内部对tcaxPy_Main函数的封装方法
  18. def tcaxPy_User():
  19.     # 创建ASS文件
  20.     file_name  = GetVal(val_OutFile) + '.ass'
  21.     ass_header = GetVal(val_AssHeader)
  22.     ASS_FILE   = CreateAssFile(file_name, ass_header)
  23.     # 创建TCAS文件
  24.     file_name  = GetVal(val_OutFile) + '.tcas'
  25.     fx_width   = GetVal(val_ResolutionX)
  26.     fx_height  = GetVal(val_ResolutionY)
  27.     fx_fps     = GetVal(val_FXFPS)
  28.     TCAS_FILE  = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  29.     # 基本数据, 如果需要查看含义, 请取消下面两行代码的注释
  30.     #GetHelp()
  31.     #Pause()
  32.     fontSize   = GetVal(val_FontSize)
  33.     marginX    = GetVal(val_OffsetX)
  34.     marginY    = GetVal(val_OffsetY)
  35.     spacing    = GetVal(val_Spacing)
  36.     lineNum    = GetVal(val_nLines)
  37.     textNum    = GetVal(val_nTexts)
  38.     start      = GetVal(val_BegTime)
  39.     end        = GetVal(val_EndTime)
  40.     kar        = GetVal(val_KarTime)
  41.     elapKar    = GetVal(val_KarTimeDiff)
  42.     text       = GetVal(val_Text)
  43.     textLength = GetVal(val_TextLength)
  44.     advance    = GetVal(val_TextAdvance)
  45.     advDiff    = GetVal(val_TextAdvanceDiff)
  46.     # 主循环
  47.     for i in range(lineNum):
  48.         initPosX = marginX                                          # an 7, 4, 1
  49.         #initPosX = (fx_width - textLength[i]) / 2 + marginX        # an 8, 5, 2
  50.         #initPosX = fx_width - textLength[i] - marginX              # an 9, 6, 3
  51.         initPosY = marginY                                          # an 7, 8, 9
  52.         #initPosY = fx_height / 2 - marginY                         # an 4, 5, 6
  53.         #initPosY = fx_height - fontSize - marginY                  # an 1, 2, 3
  54.         for j in range(textNum[i]):
  55.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  56.                 continue
  57.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  58.             posY = initPosY + fontSize / 2
  59.             param = [None]      # 传递需要的参数到tcaxPy_Main_Fake函数中
  60.             ASS_BUF, TCAS_BUF = tcaxPy_Main_Fake(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  61.             if len(ASS_BUF) > 0:
  62.                 WriteAssFile(ASS_FILE, ASS_BUF)
  63.             if len(TCAS_BUF) > 0:
  64.                 WriteTcasFile(TCAS_FILE, TCAS_BUF)
  65.             Progress(i, j)      # 显示进度
  66.     FinAssFile(ASS_FILE)
  67.     FinTcasFile(TCAS_FILE)
复制代码
以下两个脚本都利用了这模板.

http://www.tcax.org/forum.php?mod=viewthread&tid=214

http://www.tcax.org/forum.php?mod=viewthread&tid=276



Rank: 4

发表于 2012-4-11 13:00:12 |显示全部楼层
本帖最后由 youkaze 于 2012-4-11 13:00 编辑

提示1:大家在用这个模板的时候别把这段
def tcaxPy_Main_Fake(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):

忘记了  不然后果很严重- -

待续- -

Rank: 4

发表于 2021-7-28 02:47:32 |显示全部楼层
本帖最后由 Seekladoom 于 2022-1-28 02:14 编辑

以这个脚本作为tcaxPy_User函数的工业标准去修改和量产特效脚本会方便很多啊。

追加:这部分应该早点加大封装力度并做成GUI的,不然每次写代码都写的很长,时间久了,代码编写效率过于低下,愿意用的人就少了。。。

for循环:tcaxPy_User模式下_i、_j(这里写成了i和j,没有_)等变量的核心载体



Rank: 4

发表于 2022-1-31 19:55:29 |显示全部楼层
本帖最后由 Seekladoom 于 2022-1-31 20:55 编辑

progress(i, j) 的源码在tcax.c文件当中

实测发现所有有for循环的地方都能用progress,并不局限于user格式(def tcaxPy_User)。Init(def tcaxPy_Init)和Main(def tcaxPy_Main)下也能使用。
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-3-29 18:03

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH