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

 找回密码
 新人加入
查看: 10577|回复: 10

tcaxPy.pyc 模块函数说明 [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2011-8-4 18:10:37 |显示全部楼层
全局变量

tcaxPy_Version       = '0.7.9.0'

Main_Style           = 'TCMS'        # 主Style名称 SubL函数默认使用的Style
Pix_Style            = 'TCPS'        # 粒子特效的Style名称

val_AssHeader        = 0        # Ass文件头部信息 用于tcaxPy_User函数
val_OutFile          = 1        # 输出的文件名 不含拓展名 用于tcaxPy_User函数

# tcc info
val_FontFileName     = 2        # 特效使用的字体
val_FaceID           = 3        # 字体名称ID
val_FontSize         = 4        # 字体大小
val_ResolutionX      = 5        # 水平分辨率
val_ResolutionY      = 6        # 垂直分辨率
val_FXFPS            = 7        # 特效的帧率
val_Alignment        = 8        # 对齐方式
val_OffsetX          = 9        # 水平偏移量
val_OffsetY          = 10        # 垂直偏移量
val_Spacing          = 11        # 字体间距
val_SpaceScale       = 12        # 空格跨度百分比
val_Bord             = 13        # 字体边框厚度
val_Shad             = 14        # 字体阴影宽度
val_1C               = 15        # 字体主颜色
val_2C               = 16        # 字体辅助颜色
val_3C               = 17        # 字体边框颜色
val_4C               = 18        # 字体阴影颜色
val_1A               = 19        # 字体主透明度
val_2A               = 20        # 字体辅助透明度
val_3A               = 21        # 字体边框透明度
val_4A               = 22        # 字体阴影透明度
val_Blur             = 23        # 模糊值

# syl info
val_nLines           = 24        # SYL文件的卡拉OK歌词句子总数
val_SylLine          = 25        # 第i句卡拉OK歌词
val_BegTime          = 26        # 第i句卡拉OK歌词的起始时间
val_EndTime          = 27        # 第i句卡拉OK歌词的结束时间
val_nTexts           = 28        # 第i句卡拉OK歌词包含的字符数
val_KarTime          = 29        # 第i句卡拉OK歌词的第j个字符的Karaoke时间
val_KarTimeDiff      = 30        # 到第i句卡拉OK歌词的第j个字符之前的Karaoke时间总和
val_Text             = 31        # 第i句卡拉OK歌词的第j个字符

# tm info (horizontal)
val_Ascender         = 32        # 字体上行高度
val_Descender        = 33        # 字体下行高度 通常为负数
val_TextWidth        = 34        # 第i句卡拉OK歌词的j个字符的宽度
val_TextHeight       = 35        # 第i句卡拉OK歌词的j个字符的高度
val_TextKerning      = 36        # 第i句卡拉OK歌词的j个字符与之前一个字符的kerning 一句歌词第一个字符的kerning为0
val_TextAdvance      = 37        # 第i句卡拉OK歌词的j个字符的水平步距
val_TextAdvanceDiff  = 38        # 从初始位置到第i句卡拉OK歌词的j个字符的水平步距
val_TextLength       = 39        # 第i句卡拉OK歌词的文字总长度
val_TextInitX        = 40        # 第i句卡拉OK歌词的j个字符的左上角X轴坐标
val_TextInitY        = 41        # 第i句卡拉OK歌词的j个字符的左上角Y轴坐标
val_TextBearingY     = 42        # 第i句卡拉OK歌词的j个字符的Y轴bearing

# tm info horizontal
val_TextWidthH       = 34        # 第i句卡拉OK歌词的j个字符的宽度
val_TextHeightH      = 35        # 第i句卡拉OK歌词的j个字符的高度
val_TextKerningH     = 36        # 第i句卡拉OK歌词的j个字符与之前一个字符的kerning 一句歌词第一个字符的kerning为0
val_TextAdvanceH     = 37        # 第i句卡拉OK歌词的j个字符的水平步距
val_TextAdvanceDiffH = 38        # 从初始位置到第i句卡拉OK歌词的j个字符的水平步距
val_TextLengthH      = 39        # 第i句卡拉OK歌词的文字总长度
val_TextInitXH       = 40        # 第i句卡拉OK歌词的j个字符的左上角X轴坐标
val_TextInitYH       = 41        # 第i句卡拉OK歌词的j个字符的左上角Y轴坐标
val_TextBearingYH    = 42        # 第i句卡拉OK歌词的j个字符的Y轴bearing

# tm info vertical
val_TextWidthV       = 43        # 第i句卡拉OK歌词的j个字符的宽度
val_TextHeightV      = 44        # 第i句卡拉OK歌词的j个字符的高度
val_TextKerningV     = 45        # 第i句卡拉OK歌词的j个字符与之前一个字符的kerning 一句歌词第一个字符的kerning为0 (暂时不支持vertical版本的kerning,其值全部为0)
val_TextAdvanceV     = 46        # 第i句卡拉OK歌词的j个字符的水平步距
val_TextAdvanceDiffV = 47        # 从初始位置到第i句卡拉OK歌词的j个字符的水平步距
val_TextLengthV      = 48        # 第i句卡拉OK歌词的文字总长度
val_TextInitXV       = 49        # 第i句卡拉OK歌词的j个字符的左上角X轴坐标
val_TextInitYV       = 50        # 第i句卡拉OK歌词的j个字符的左上角Y轴坐标
val_TextBearingXV    = 51        # 第i句卡拉OK歌词的j个字符的X轴bearing


数据操纵函数

def GetValueIDsInfo():    # 返回全局变量说明

def GetVal(item):    # 获取内置特效变量的值, 由全局变量指定


主要特效函数

def SubL(Start = 0, End = 0, Layer = 0, Style = 'TCMS'):    # 返回特效Line的头部信息

def ass_main(ASS_BUF, SubDlg = '', Event = '', Text = ''):    # 往ASS_BUF列表增加一行特效Line


基本特效函数

# 格式化相关的函数

def FmtHex(n):                                   # dec to hex FormatHex

def HexToDec(a):                                 # hex to dec

def FmtFloat(f):

def FmtRGB(r, g, b):                             # return a formated RGB string

def DeFmtRGB(CLR):                               # convert RGB string to RGB tuple

def DecRGB(RGB):                                 # convert RGB string to RGB dec value

def clip_0_255(a):  # 把a限制为 [0, 255] 中的整数

def MakeRGB(r, g, b):

def MakeRGBA(r, g, b, a):


特效代码行数

def an(a):

def K(a):

def k(a):

def ko(a):

def t(code):    # t代码, 推荐使用等价的animation函数

def animation(code):    # 同t函数

def t1(t1, t2, code):    # t代码, 推荐使用等价的animation1函数

def animation1(t1, t2, code):    # 同t1函数

def t2(t1, t2, a, code):    # t代码, 推荐使用等价的animation2函数

def animation2(t1, t2, a, code):    # 同t2函数

def fscx(x):

def fscy(y):

def fsc(x, y):

def fs(x):

def fad(t1, t2):

def bord(x):

def shad(x):

def blur(x):

def be(x):

def xbord(x):

def ybord(y):

def xshad(x):

def yshad(y):

def fax(x):

def fay(y):

def frx(a):

def fry(a):

def frz(a):

def pos(x, y):

def org(x, y):

def alpha(a):                                    # note that a is a dec value

def alpha1(a):

def alpha2(a):

def alpha3(a):

def alpha4(a):

def color(c):                                    # note that c is a RGB string

def color1(c):

def color2(c):

def color3(c):

def color4(c):

def mov(x1, y1, x2, y2):

def move(x1, y1, x2, y2, t1, t2):

def clip(x1, y1, x2, y2):

def clip1(Draw):

def clip2(Scale, Draw):

def iclip(x1, y1, x2, y2):

def iclip1(Draw):

def iclip2(Scale, Draw):


高级特效函数

def GetVersion():     # 获取tcaxLib.pyd和tcaxPy.pyc模块的版本信息

def GetHelp():    # 获取帮助信息

def Pause():    # 暂停脚本执行

def GetWorkingDir():    # 获取当前脚本的工作路径

def abspath(filename):    # 通过相对路径获取绝对路径

def MakePath(FolderIndex = 0, ImageIndex = 0, MainFolder = 'src', SubFolder = 'list', ImageName = 'img', ImageType = '.png', PathType = 'pi'):

def tcaxLog(info):    # 把信息写入到log文件当中

def Progress(i, j, file_id = 1, file_num = 1):    # 进度显示, 用于tcaxPy_User函数

def Sum(LIS, I, diff = 0):       # 高级加法函数 在数列LIS里 从第一项累加到第I项

def AdvInt(a):       # 高级取整函数 AdvancedIntegrate

def DeFmtTime(TIME):       # 重新数字化已被格式化的时间 TIME = '0:00:00.00'

def FmtTime(t):       # 格式化时间

def PixPt():       # 返回一个像素点 PixelPoint

def MovPxl():       # 移动单位个像素 MovePixel

def RandCir(a, b, r):       # 随机圆分布函数 RandomCircle1

def RandCir2(a, b, r1, r2):      # 随机环分布函数 RandomCircle2

def RandCir3(a, b, r1, r2, theta1, theta2):      # 带缺口的随机环分布函数 RandomCircle3

def Cir(n, a, b, r):       # 圆函数

def RandomGauss(l, h, g):

def RandomDouble(l, h):

def RandGauss(l, h):

def RandRGB():       # 返回一个随机的RGB值 RandomRGB

def RandA():       # 返回一个随机的Alpha值 RandomAlpha

def RandImg(n, IMG_WD, IMG_HT):       # 随机图形 RandomImage

def DevImg(IMG, DEVX, DEVY):       # 图形偏移 DeviateIamge

def RevImgX(IMG):       # 图形按照x轴对换 ReverseIamgeX

def RevImgY(IMG):       # 图形按照y轴对换 ReverseIamgeY

def DivClr(COLOR1, COLOR2, n):       # 拆分颜色 DivideColor

def MovToPos(x1, y1, x2, y2, t1, t2):       # 把一个点的移动分解成一系列点的出现、消失 MoveToPos

def RectClip(InitPosX, InitPosY, WD, HT, AN = 7, DENS = 1.0, SIZE = 1):       # 用点或方格的形式切割文字

def CirClip(a, b, r, d):      # 将字体以圆形形式切割

def RandClip(Scale, n, IMG_WD, IMG_HT):     # 任意形状切割

def Jump(P_START, P_END, P_TOP, T):         # 跳跃特效函数






Rank: 5Rank: 5

发表于 2011-12-3 17:24:21 |显示全部楼层
看完貌似懂了,但是我能记住吗。。。

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2011-12-3 19:17:19 |显示全部楼层
ひまり 发表于 2011-12-3 17:24
看完貌似懂了,但是我能记住吗。。。

不怎么需要记的...

好多都是和ASS特效代码同名的...

另外一些, 记不住可以回来查..

p.s. TCAX Beta3 SP1 升级包中有tcaxPy.py (本模块的源代码), 可以作为参考.


Rank: 4

发表于 2012-7-1 22:46:43 |显示全部楼层
这……几乎没看懂……

Rank: 4

发表于 2012-7-9 13:21:16 |显示全部楼层
跳跃函数特效怎么用啊?是不是就是让一个东西随着歌词进度一路跳过去?

Rank: 5Rank: 5

发表于 2013-11-2 12:53:38 |显示全部楼层
窝来悄悄问下这里各参数的意思...
def RandCir3(a, b, r1, r2, theta1, theta2):

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

发表于 2013-11-2 14:05:24 |显示全部楼层
oloroso 发表于 2013-11-2 12:53
窝来悄悄问下这里各参数的意思...
def RandCir3(a, b, r1, r2, theta1, theta2):

扇形環吧 我也沒用過 估計milk在11eye效果裡用的那個
a,b 估計是圓心座標 r1 內圓半徑 也可能是外圓的 試試才知道
r2 外圓半徑 theta1 估計是出發環出發時角度 theta2 環結束時角度

Rank: 5Rank: 5

发表于 2013-11-2 21:48:56 |显示全部楼层
saiyaku 发表于 2013-11-2 14:05
扇形環吧 我也沒用過 估計milk在11eye效果裡用的那個
a,b 估計是圓心座標 r1 內圓半徑 也可能是外圓的  ...

恩恩阿里嘎多

Rank: 1

发表于 2014-5-8 11:18:14 |显示全部楼层
我了个神呀!好复杂

Rank: 1

发表于 2014-8-19 14:22:19 |显示全部楼层
0 0 好

Rank: 4

发表于 2016-12-22 23:08:16 |显示全部楼层
def t(code) 推荐使用这个animation  这两个有哪里不同呀

Rank: 4

发表于 2021-7-12 12:26:19 |显示全部楼层
本帖最后由 Seekladoom 于 2021-7-12 12:26 编辑

上面这些代码原来在TCAX的tcaxPy.py这个脚本文件里面啊,看了下这里面总算是明白t和animation代码的写法了。。。_(:з」∠)_

tcaxPy.png

Rank: 4

发表于 2021-7-14 14:09:56 |显示全部楼层
本帖最后由 Seekladoom 于 2021-7-14 14:15 编辑

追加粗体标签函数的说明

def b(a):                   # 粗体标签,a只能填0或1,表示粗体的关闭和打开

补充修改了def b的tcaxPy.py脚本,如果想给TCAX添加粗体标签请下载这个脚本并替换TCAX路径下的原tcaxPy.py脚本:
修改了def b的tcaxPy.py脚本.rar (7.96 KB, 下载次数: 1700)

修改前:
  1. def b():
  2.     return '\\b'
复制代码
修改后:
  1. def b(a):
  2.     return '\\b{0}'.format(int(a))
复制代码
这个其实是照着def p标签依葫芦画瓢改的,因为在用TCAX给字幕文件添加粗体标签\b1时发现写了以后还是不能跑,然后打开tcaxPy.py以后才发现了def b没写全。。。_(:з」∠)_

Rank: 4

发表于 2021-7-21 03:12:00 |显示全部楼层
本帖最后由 Seekladoom 于 2021-7-21 04:03 编辑

原来tcaxPy.pyc文件的源码在这里(图中有tcc关键字的地方即为TCAX读取tcc文件的实现代码):
https://github.com/milkyjing/TCA ... CAX/tcax/tcaxPy/d.c d.c截图.png


https://github.com/milkyjing/TCA ... AX/tcax/tcaxPy/py.c
这段2.png


https://github.com/milkyjing/TCA ... AX/tcax/tcaxPy/py.h
这段.png


鄙人目前水平有限,如果可以的话未来还是希望能够让TCAX的特效字幕制作流程简化到只需要ass和py文件就能用TCAX生成ASS和TCAS特效字幕了。。。_(:з」∠)_


Rank: 4

发表于 2021-8-17 01:14:44 |显示全部楼层
本帖最后由 Seekladoom 于 2021-8-17 01:37 编辑

val_BegTime对应的底层代码在tcax.exe的py.c(第475、538行)、py.h、syl.c、syl.h、tcax.c、tcax.h这六个文件中。

主要是在py.c、syl.c、tcax.c这三个文件中,比如py.c中的这段:
  1. pLine->begTime1D = (int *)malloc(pLine->lines * sizeof(int));
复制代码


Rank: 4

发表于 2021-8-17 01:40:03 |显示全部楼层
本帖最后由 Seekladoom 于 2022-1-29 01:14 编辑

def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):

对应的源码在tcax.c这个源码文件中:

  1. pReturnedBuf = tcaxpy_script_func_main(pTcaxPy, iLine, iText, nTexts, start, end, timeDiff, time, x, y, advance, text);
  2.                     if (!pReturnedBuf) {
  3.                         fclose(assfp);
  4.                         libtcas_write_header(&tcasFile, &tcasHeader, 0);
  5.                         libtcas_close_file(&tcasFile);
  6.                         printf("Fatal Error: failed to execute the tcaxPy_Main() function in the %i(th) user tcax py script.\n", i + 1);
  7.                         return -1;
  8.                     }
  9.                     if ((int)pReturnedBuf[0] > 0) {
  10.                         tcax_write_ass_string_to_file(assfp, (const wchar_t *)pReturnedBuf[1], (int)pReturnedBuf[0]);
  11.                         free(pReturnedBuf[1]);
  12.                     }
  13.                     if ((int)pReturnedBuf[2] > 0) {
  14.                         tcax_write_tcas_buffer_to_file(&tcasFile, &tcasHeader, (const tcas_unit *)pReturnedBuf[3], (int)pReturnedBuf[2]);
  15.                         free(pReturnedBuf[3]);
  16.                     }
  17.                     free(pReturnedBuf);
  18.                     SetConsoleCursorPosition(hStdout, coord);
  19.                     printf("Executing script %i of %i, progress: %.2f%%\n", i + 1, pAttributes->py_file_count, 100 * (index - offset) / (double)total);
  20.                     //printf("Progress: %.2f%c\n", 100 * (i + (index - offset) / (double)total) / pAttributes->py_file_count, '%');
  21.                 }
  22.                 index ++;
复制代码

单行重点标注:
  1. pReturnedBuf = tcaxpy_script_func_main(pTcaxPy, iLine, iText, nTexts, start, end, timeDiff, time, x, y, advance, text);
复制代码

追加补充:
TCAX源码的tcaxPy文件夹中的py.c文件的第437行也能找到def tcaxPy_Main相关信息,在py.c搜main即可
Main.png

Rank: 4

发表于 2021-8-23 14:27:57 |显示全部楼层
tcaxPy.py脚本中的__tcax_data[31][i][j],这里是31,对应的就是:
val_Text             = 31        # 第i句卡拉OK歌词的第j个字符

其他的以此类推

Rank: 4

发表于 2021-9-7 17:58:08 |显示全部楼层
本帖最后由 Seekladoom 于 2021-9-8 10:56 编辑
  1. def MakePath(FolderIndex = 0, ImageIndex = 0, MainFolder = 'src', SubFolder = 'list', ImageName = 'img', ImageType = '.png', PathType = 'pi'):
  2.     if PathType == 'pi':
  3.         img_path = '%s\%s%d\%s%04d%s' % (MainFolder, SubFolder, FolderIndex, ImageName, ImageIndex, ImageType)
  4.     elif PathType == 'sys':
  5.         img_path = '%s\%s%d\%s (%d)%s' % (MainFolder, SubFolder, FolderIndex, ImageName, ImageIndex, ImageType)
  6.     else:
  7.         img_path = '%s\%s%d\%s%04d%s' % (MainFolder, SubFolder, FolderIndex, ImageName, ImageIndex, ImageType)
  8.     return img_path
复制代码
MakePath函数在py特效脚本中没有ass_main行的情况下,也能直接生成带有挂图标签(\1img)的ass字幕行。PathType = 'pi'的pi全写应该是picture,代表图片路径,实际作用相当于相对路径

Rank: 4

发表于 2022-2-11 21:27:12 |显示全部楼层
本帖最后由 Seekladoom 于 2022-2-11 22:29 编辑

RectClip函数仅在six大的如下帖子中用过:
ext_m003[Last Updated:2013/2/23]

但1.2.0版本的TCAX删除了该函数,故从1.1.9版本的TCAX中找出来并在此记录下来,方便后人:
  1. def RectClip(InitPosX, InitPosY, WD, HT, AN = 7, DENS = 1.0, SIZE = 1):       # 用点或方格的形式切割文字
  2.     RCLIP = []
  3.     for i in range(AdvInt(DENS * WD)):
  4.         for j in range(AdvInt(DENS * HT)):
  5.             RCLIP.append(clip(InitPosX + AdvInt(i / DENS), InitPosY + AdvInt(j / DENS), InitPosX + AdvInt(i / DENS) + SIZE, InitPosY + AdvInt(j / DENS) + SIZE))
  6.     return RCLIP
复制代码



您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-3-29 17:48

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH