TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua
标题:
自定义特效编写模板tcaxPy_User函数用法例子
[打印本页]
作者:
milkyjing
时间:
2012-2-26 14:25:34
标题:
自定义特效编写模板tcaxPy_User函数用法例子
说明
利用tcaxPy_User函数, 我们可以随意定制自己的特效模板. 比起直接使用tcaxPy_Main函数, 灵活性要大很多, 但tcaxPy_Main封装了许多细节, 使用起来更加简单. 下面这个例子, 既保持了tcaxPy_Main的简单性, 也提供了tcaxPy_User的灵活性, 值得参考. 使用tcaxPy_User函数, 需要在tcc文件中设置, < tcaxpy user = true >
例子
代码如下
user_template_1.py
(3.32 KB, 下载次数: 2086)
2012-2-26 14:25:32 上传
下载次数: 2086
from tcaxPy import *
# 用户修订版的tcaxPy_Main函数, 保留原始tcaxPy_Main风格是为了减少额外记忆量, 实际上该函数形式可以非常多样化
def tcaxPy_Main_Fake(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
ASS_BUF = [] # 保存ASS特效
TCAS_BUF = [] # 保存TCAS特效
##### 主要特效编写操作 ####
_Spacing = GetVal(val_Spacing)
_Fs = GetVal(val_FontSize)
dx = _x - int((_a + _Spacing) / 2 + 0.5) # 一个固定操作, 将an5的坐标转换为an7
dy = _y - int(_Fs / 2 + 0.5) # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
# 增加特效
# ass_main...
ass_main(ASS_BUF, SubL(_start, _end), pos(_x, _y), _txt)
# tcas_main...
##### 将结果返回给tcax进行处理 #####
return (ASS_BUF, TCAS_BUF)
# 除了少数几个细节的不同, 本例子实际上就是TCAX内部对tcaxPy_Main函数的封装方法
def tcaxPy_User():
# 创建ASS文件
file_name = GetVal(val_OutFile) + '.ass'
ass_header = GetVal(val_AssHeader)
ASS_FILE = CreateAssFile(file_name, ass_header)
# 创建TCAS文件
file_name = GetVal(val_OutFile) + '.tcas'
fx_width = GetVal(val_ResolutionX)
fx_height = GetVal(val_ResolutionY)
fx_fps = GetVal(val_FXFPS)
TCAS_FILE = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
# 基本数据, 如果需要查看含义, 请取消下面两行代码的注释
#GetHelp()
#Pause()
fontSize = GetVal(val_FontSize)
marginX = GetVal(val_OffsetX)
marginY = GetVal(val_OffsetY)
spacing = GetVal(val_Spacing)
lineNum = GetVal(val_nLines)
textNum = GetVal(val_nTexts)
start = GetVal(val_BegTime)
end = GetVal(val_EndTime)
kar = GetVal(val_KarTime)
elapKar = GetVal(val_KarTimeDiff)
text = GetVal(val_Text)
textLength = GetVal(val_TextLength)
advance = GetVal(val_TextAdvance)
advDiff = GetVal(val_TextAdvanceDiff)
# 主循环
for i in range(lineNum):
initPosX = marginX # an 7, 4, 1
#initPosX = (fx_width - textLength[i]) / 2 + marginX # an 8, 5, 2
#initPosX = fx_width - textLength[i] - marginX # an 9, 6, 3
initPosY = marginY # an 7, 8, 9
#initPosY = fx_height / 2 - marginY # an 4, 5, 6
#initPosY = fx_height - fontSize - marginY # an 1, 2, 3
for j in range(textNum[i]):
if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
continue
posX = initPosX + advDiff[i][j] + advance[i][j] / 2
posY = initPosY + fontSize / 2
param = [None] # 传递需要的参数到tcaxPy_Main_Fake函数中
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)
if len(ASS_BUF) > 0:
WriteAssFile(ASS_FILE, ASS_BUF)
if len(TCAS_BUF) > 0:
WriteTcasFile(TCAS_FILE, TCAS_BUF)
Progress(i, j) # 显示进度
FinAssFile(ASS_FILE)
FinTcasFile(TCAS_FILE)
复制代码
以下两个脚本都利用了这模板.
http://www.tcax.org/forum.php?mod=viewthread&tid=214
http://www.tcax.org/forum.php?mod=viewthread&tid=276
附件:
user_template_1.py
(2012-2-26 14:25:32, 3.32 KB) / 下载次数 2086
http://tcax.org/forum.php?mod=attachment&aid=MzQ1fGMzNTlhYjk3fDE3MzI0NzIxNTF8MHww
作者:
youkaze
时间:
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):
忘记了 不然后果很严重- -
待续- -
作者:
Seekladoom
时间:
2021-7-28 02:47:32
本帖最后由 Seekladoom 于 2022-1-28 02:14 编辑
以这个脚本作为tcaxPy_User函数的工业标准去修改和量产特效脚本会方便很多啊。
追加:这部分应该早点加大封装力度并做成GUI的,不然每次写代码都写的很长,时间久了,代码编写效率过于低下,愿意用的人就少了。。。
for循环:tcaxPy_User模式下_i、_j(这里写成了i和j,没有_)等变量的核心载体
作者:
Seekladoom
时间:
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)下也能使用。
欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/)
Powered by Discuz! X2