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

 找回密码
 新人加入
查看: 10202|回复: 24

[完整特效] [J]038_Accel_World_OP2特效脚本 (附完整工程) [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-8-11 13:43:27 |显示全部楼层
完整工程下载(注意, 请直接用浏览器下载):
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0
  1. from tcaxPy import *
  2. from util.gdiFont import *
  3. from util.tcCurve import *
  4. from util.magick import *
  5. from pixLibs.ImageStone import *

  6. def tcaxPy_Init():
  7.     global _Fs
  8.     global _FD          # 一帧的持续时间, 约40毫秒
  9.     global Font         # 首要字体
  10.     global FontOut      # 字体边框
  11.     global FontShad      # 加粗字体
  12.     global GdiFontThin
  13.     _Fs = GetVal(val_FontSize)
  14.     _FD = 1000 / GetVal(val_FXFPS)
  15.     _FontFileName = GetVal(val_FontFileName)
  16.     _FaceID = GetVal(val_FaceID)
  17.     Font = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), MakeRGB(0, 0, 0), 0, False)
  18.     FontOut = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), MakeRGB(0, 0, 0), 2, True)
  19.     FontShad = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), MakeRGB(0, 0, 0), 4, False)
  20.     GdiFontThin = gfInitFont(GetVal(val_FontFaceName), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), -3.5, False)
  21.     # 辅助变量
  22.     global g_flags
  23.     g_flags = [0, 0]

  24. def tcaxPy_Fin():
  25.     FinFont(Font)
  26.     FinFont(FontOut)
  27.     FinFont(FontShad)
  28.     gfFinFont(GdiFontThin)
  29.     #sys.exit()      # 自动关闭执行窗口 auto close the window

  30. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  31.     ASS_BUF  = []        # 保存ASS特效
  32.     TCAS_BUF = []        # 保存TCAS特效
  33.     ##### 主要特效编写操作 ####
  34.     dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  35.     dy = _y - int(_Fs / 2 + 0.5)    # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  36.     # 文字主体
  37.     PIX = TextPix(Font, _txt)
  38.     PIX_t0 = PixColorRGB(PIX, DecRGB('FFFFFF'))     # 未增加内部填充
  39.     PIX = PixFromPoints(gfGetPoints(GdiFontThin, _txt))
  40.     PIX = PixColorRGB(PIX, DecRGB('000000'))
  41.     PIX_thin = PixBlur(PIX, 4)      # 内部填充
  42.     PIX_t = CombinePixs(PIX_t0, PIX_thin)    # 增加了内部填充的主体
  43.     # 边框
  44.     PIX = TextPix(FontOut, _txt)
  45.     PIX = PixColorRGB(PIX, DecRGB('00CC00'))
  46.     PIX_o = PixBlur(PIX, 6)
  47.     # 底色
  48.     PIX = TextPix(FontShad, _txt)
  49.     PIX = PixColorRGB(PIX, DecRGB('880088'))
  50.     PIX_s = PixBlur(PIX, 8)
  51.     # 混合
  52.     PIX = CombinePixs(PIX_s, PIX_o)
  53.     PIX_0 = CombinePixs(PIX, PIX_t0)
  54.     PIX_1 = CombinePixs(PIX, PIX_t)
  55.     # part1
  56.     if _i < 4:
  57.         # 一些时间的计算
  58.         T0 = 10 * _start - 12 * _FD + 2 * _j * _FD
  59.         T1 = T0 + 4 * _FD
  60.         T2 = 10 * _end + 4 * _FD - 2 * (_n - _j - 1) * _FD
  61.         T3 = T2 + 8 * _FD
  62.         # IN 入场方式
  63.         if 0 == g_flags[0]:
  64.             P = ((dx + 300, dy), (dx + 240, dy - 40), (dx + 60, dy - 40), (dx, dy))
  65.             g_flags[0] = 1
  66.         else:
  67.             P = ((dx + 300, dy), (dx + 240, dy + 40), (dx + 60, dy + 40), (dx, dy))
  68.             g_flags[0] = 0
  69.         num = 10
  70.         for i in range(num):
  71.             x, y, a = CubicBezier(P[0], P[1], P[2], P[3], i / num)
  72.             ts0 = T0 + i * _FD
  73.             te0 = ts0 + _FD
  74.             PIX = PixColorMul(PIX_1, 1, 1, 1, (i + 1) / num)
  75.             tcas_main(TCAS_BUF, PIX, ts0, te0, x, y, 0)
  76.         # MAIN 存在方式 part1
  77.         ts1 = te0
  78.         te1 = 10 * (_start + _elapk)
  79.         tcas_main(TCAS_BUF, PIX_1, ts1, te1, dx, dy, 0)
  80.         # EFT 表现方式
  81.         if _k > 100:
  82.             _k = 100
  83.         num = int(10 * _k / _FD + 0.5)
  84.         for i in range(num):
  85.             ts = te1 + _FD * i
  86.             te = ts + _FD
  87.             PIX = pstBlur(PIX_1, 2, (i + 1) * 4)
  88.             PIX = PixResizeF(PIX, PIX[1][0] + 12 * (i + 1), 0)   # * (1 + 0.08 * (i + 1))
  89.             PIX = BilinearFilter(PIX, dx, dy)
  90.             tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  91.         if _i == 3:
  92.             # MAIN 存在方式 part2
  93.             ts2 = te
  94.             te2 = T2 + 2 * (_n - _j - 1) * _FD + randint(-(_n - _j - 1), 1) * _FD
  95.             tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  96.             # OUT 出场方式
  97.             num = 8
  98.             for i in range(num):
  99.                 ts3 = te2 + i * _FD
  100.                 te3 = ts3 + _FD
  101.                 PIX = PixBlur(PIX_1, (i + 1) * 6)
  102.                 PIX = PixResize(PIX, PIX_1[1][0], PIX[1][1] * (1 + i / num))
  103.                 PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / num)
  104.                 tcas_main(TCAS_BUF, PIX, ts3, te3, dx, dy, 0)
  105.             # EXT 附加方式
  106.             if _j == _n - 2:
  107.                 num = 69
  108.                 for i in range(num):
  109.                     ts4 = 10 * (_start + _elapk) + i * _FD
  110.                     te4 = ts4 + _FD
  111.                     img_path = MakePath(2, i + 1, 'images', 'list', 'img', '.png', 'sys')
  112.                     PIX = ImagePix(abspath(img_path))
  113.                     if i > num - 5:
  114.                         PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / 5)
  115.                     tcas_main(TCAS_BUF, PIX, ts4, te4, _x - PIX[1][0] / 2, _y - PIX[1][1] / 2, 2)
  116.         else:
  117.             # MAIN 存在方式 part2
  118.             ts2 = te
  119.             te2 = T2
  120.             tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  121.             # OUT 出场方式
  122.             if 0 == g_flags[1]:
  123.                 P = ((dx, dy), (dx - 60, dy + 40), (dx - 240, dy + 40), (dx - 300, dy))
  124.                 g_flags[1] = 1
  125.             else:
  126.                 P = ((dx, dy), (dx - 60, dy - 40), (dx - 240, dy - 40), (dx - 300, dy))
  127.                 g_flags[1] = 0
  128.             num = 10
  129.             for i in range(num):
  130.                 x, y, a = CubicBezier(P[0], P[1], P[2], P[3], i / num)
  131.                 ts3 = te2 + i * _FD
  132.                 te3 = ts3 + _FD
  133.                 PIX = PixColorMul(PIX_1, 1, 1, 1, (num - i) / num)
  134.                 tcas_main(TCAS_BUF, PIX, ts3, te3, x, y, 0)
  135.     # part2
  136.     elif _i < 8:
  137.         # 一些时间的计算
  138.         T0 = 10 * _start - 8 * _FD
  139.         T1 = T0 + 8 * _FD
  140.         T2 = 10 * _end
  141.         T3 = T2 + 8 * _FD
  142.         # IN 入场方式
  143.         ts0 = T0
  144.         te0 = ts0 + 8 * _FD
  145.         tcas_keyframe(TCAS_BUF, PixColorMul(PIX_1, 1, 1, 1, 0), PIX_1, ts0, te0, dx, dy, 1, 1)
  146.         # MAIN 存在方式 part1
  147.         ts1 = te0
  148.         te1 = 10 * (_start + _elapk)
  149.         tcas_main(TCAS_BUF, PIX_1, ts1, te1, dx, dy, 0)
  150.         # EFT 表现方式
  151.         num = int(10 * _k / _FD + 0.5)
  152.         for i in range(num):
  153.             ts = te1 + _FD * i
  154.             te = ts + _FD
  155.             if i % 2 == 0:
  156.                 PIX = pstBlur(PIX_1, 2, 24 + 1.2 * (i + 1))
  157.                 PIX = PixResizeF(PIX, PIX[1][0] * (1.3 + 0.3 * (i + 1) / num), 0)
  158.                 PIX = BilinearFilter(PIX, dx, dy)
  159.             else:
  160.                 PIX = PIX_1
  161.             tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  162.         # MAIN 存在方式 part2
  163.         ts2 = te
  164.         te2 = T2
  165.         tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  166.         # OUT 出场方式
  167.         ts3 = T2
  168.         te3 = ts3 + 6 * _FD
  169.         tcas_keyframe(TCAS_BUF, PIX_1, PixColorMul(PIX_1, 1, 1, 1, 0), ts3, te3, dx, dy, 1, 0)
  170.     # part3
  171.     elif _i < 12:
  172.         # 一些时间的计算
  173.         T0 = 10 * _start - 8 * _FD + 1 * _j * _FD
  174.         T1 = T0 + 4 * _FD
  175.         T2 = 10 * _end + 4 * _FD - 1 * (_n - _j - 1) * _FD
  176.         T3 = T2 + 8 * _FD
  177.         # IN 入场方式
  178.         if 0 == g_flags[0]:
  179.             P = ((dx, dy + 100), (dx, dy))
  180.             g_flags[0] = 1
  181.         else:
  182.             P = ((dx, dy - 100), (dx, dy))
  183.             g_flags[0] = 0
  184.         num = 6
  185.         for i in range(num):
  186.             x, y, a = LinearBezier(P[0], P[1], i / num)
  187.             ts0 = T0 + i * _FD
  188.             te0 = ts0 + _FD
  189.             PIX = PixColorMul(PIX_1, 1, 1, 1, (i + 1) / num)
  190.             tcas_main(TCAS_BUF, PIX, ts0, te0, x, y, 0)
  191.         # MAIN 存在方式 part1
  192.         ts1 = te0
  193.         te1 = 10 * (_start + _elapk)
  194.         tcas_main(TCAS_BUF, PIX_1, ts1, te1, dx, dy, 0)
  195.         # EFT 表现方式
  196.         num = int(10 * _k / _FD + 0.5)
  197.         for i in range(num):
  198.             ts = te1 + _FD * i
  199.             te = ts + _FD
  200.             if i % 2 == 0:
  201.                 PIX = pstBlur(PIX_1, 2, 24 + 1.2 * (i + 1))
  202.                 PIX = PixResizeF(PIX, PIX[1][0] * (1.3 + 0.3 * (i + 1) / num), 0)
  203.                 PIX = BilinearFilter(PIX, dx, dy)
  204.             else:
  205.                 PIX = PIX_1
  206.             tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  207.         if _i == 11:
  208.             # MAIN 存在方式 part2
  209.             ts2 = te
  210.             te2 = T2 - 1 * (_n - _j - 1) * _FD + randint(-(_n - _j - 1), 1) * _FD
  211.             tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  212.             # OUT 出场方式
  213.             num = 8
  214.             for i in range(num):
  215.                 ts3 = te2 + i * _FD
  216.                 te3 = ts3 + _FD
  217.                 PIX = PixBlur(PIX_1, (i + 1) * 6)
  218.                 PIX = PixResize(PIX, PIX_1[1][0], PIX[1][1] * (1 + i / num))
  219.                 PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / num)
  220.                 tcas_main(TCAS_BUF, PIX, ts3, te3, dx, dy, 0)
  221.         else:
  222.             # MAIN 存在方式 part2
  223.             ts2 = te
  224.             te2 = T2
  225.             tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  226.             # OUT 出场方式
  227.             if 0 == g_flags[1]:
  228.                 P = ((dx, dy), (dx, dy - 100))
  229.                 g_flags[1] = 1
  230.             else:
  231.                 P = ((dx, dy), (dx, dy + 100))
  232.                 g_flags[1] = 0
  233.             num = 6
  234.             for i in range(num):
  235.                 x, y, a = LinearBezier(P[0], P[1], i / num)
  236.                 ts3 = te2 + i * _FD
  237.                 te3 = ts3 + _FD
  238.                 PIX = PixColorMul(PIX_1, 1, 1, 1, (num - i) / num)
  239.                 tcas_main(TCAS_BUF, PIX, ts3, te3, x, y, 0)
  240.     # part4
  241.     elif _i < 16:
  242.         # 一些时间的计算
  243.         T0 = 10 * _start - 10 * _FD
  244.         T1 = T0 + 4 * _FD
  245.         T2 = 10 * _end
  246.         T3 = T2 + 8 * _FD
  247.         # IN 入场方式
  248.         IMG = Image(abspath(r'images\radial.jpg'))
  249.         IMG.filterType(FilterTypes.CubicFilter)
  250.         IMG.resize('!{0}x{1}'.format(PIX_1[1][0], PIX_1[1][1]))
  251.         PIX = pmgToPix(IMG)
  252.         PIX = PixColorMul(PIX, 2, 1, 1, 1)
  253.         PIX = PixPos(PIX, PIX_1[0][0], PIX_1[0][1])
  254.         PIX = PixR2A(PIX)
  255.         if _i % 2 == 0:
  256.             mask0 = PixInvertA(PIX)
  257.         else:
  258.             mask0 = PIX
  259.         num = 10
  260.         for i in range(num):
  261.             mask = PixAddA(mask0, 255 * (2 * i - num) / num)
  262.             PIX = PixMask(PIX_1, mask)
  263.             ts0 = T0 + i * _FD
  264.             te0 = ts0 + _FD
  265.             tcas_main(TCAS_BUF, PIX, ts0, te0, dx, dy, 0)
  266.         # MAIN 存在方式 part1
  267.         ts1 = te0
  268.         te1 = 10 * (_start + _elapk)
  269.         tcas_main(TCAS_BUF, PIX_1, ts1, te1, dx, dy, 0)
  270.         # EFT 表现方式
  271.         if _k > 100:
  272.             _k = 100
  273.         num = int(10 * _k / _FD + 0.5)
  274.         for i in range(num):
  275.             ts = te1 + _FD * i
  276.             te = ts + _FD
  277.             PIX = pstBlur(PIX_1, 2, (i + 1) * 4)
  278.             PIX = PixResizeF(PIX, PIX[1][0] + 12 * (i + 1), 0)   # * (1 + 0.08 * (i + 1))
  279.             PIX = BilinearFilter(PIX, dx, dy)
  280.             tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  281.         # MAIN 存在方式 part2
  282.         ts2 = te
  283.         te2 = T2
  284.         tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  285.         # OUT 出场方式
  286.         num = 10
  287.         for i in range(num):
  288.             mask = PixAddA(mask0, 255 * (num - 2 * i) / num)
  289.             PIX = PixMask(PIX_1, mask)
  290.             ts3 = te2 + i * _FD
  291.             te3 = ts3 + _FD
  292.             tcas_main(TCAS_BUF, PIX, ts3, te3, dx, dy, 0)
  293.         if _i == 13 and _j == _n - 1:
  294.             # EXT 附加方式
  295.             num = 34
  296.             for i in range(num):
  297.                 ts4 = 10 * (_start + _elapk) + i * _FD
  298.                 te4 = ts4 + _FD
  299.                 img_path = MakePath(2, 2 * i + 1, 'images', 'list', 'img', '.png', 'sys')
  300.                 PIX = ImagePix(abspath(img_path))
  301.                 if i > num - 5:
  302.                     PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / 5)
  303.                 tcas_main(TCAS_BUF, PIX, ts4, te4, _x - PIX[1][0] / 2, _y - PIX[1][1] / 2, 2)
  304.     # part5
  305.     elif _i < 20:
  306.         # 一些时间的计算
  307.         T0 = 10 * _start - 8 * _FD + 1 * _j * _FD
  308.         T1 = T0 + 4 * _FD
  309.         T2 = 10 * _end + 4 * _FD - 1 * (_n - _j - 1) * _FD
  310.         T3 = T2 + 8 * _FD
  311.         # IN 入场方式
  312.         xv = [w for w in range(6, PIX_1[1][0], 6)]
  313.         yv = [h for h in range(6, PIX_1[1][1], 6)]
  314.         PIX_list = PixSubClips(PIX_1, xv, yv)
  315.         P = []
  316.         pix_num = len(PIX_list)
  317.         for i in range(pix_num):
  318.             center = _n / 2 - 0.5      # center index of 5 texts is 2, center index of 6 is 2.5
  319.             yf = i // (len(xv) + 1)
  320.             if _j < center:
  321.                 xf = len(xv) - i % (len(xv) + 1)
  322.                 pt0 = (dx + (40 + 2 * xf) * (_j - center) / center, dy + 50 + 2 * yf)
  323.             else:
  324.                 xf = i % (len(xv) + 1)
  325.                 pt0 = (dx + (40 + 2 * xf) * (_j - center) / center, dy + 50 + 2 * yf)
  326.             pt1 = (dx, dy)
  327.             P.append((pt0, pt1))
  328.         num = 8
  329.         for i in range(num):
  330.             for j in range(pix_num):
  331.                 x, y, a = LinearBezier(P[j][0], P[j][1], i / num)
  332.                 ts0 = T0 + i * _FD
  333.                 te0 = ts0 + _FD
  334.                 PIX = PixBlur(PixColorMul(PIX_list[j], 1, 1, 1, (i + 1) / num), num - i)
  335.                 tcas_main(TCAS_BUF, PIX, ts0, te0, x, y, 0)
  336.         # MAIN 存在方式 part1
  337.         ts1 = te0
  338.         te1 = 10 * (_start + _elapk)
  339.         tcas_main(TCAS_BUF, PIX_1, ts1, te1, dx, dy, 0)
  340.         # EFT 表现方式
  341.         num = int(10 * _k / _FD + 0.5)
  342.         for i in range(num):
  343.             ts = te1 + _FD * i
  344.             te = ts + _FD
  345.             if i % 2 == 0:
  346.                 PIX = pstBlur(PIX_1, 2, 24 + 1.2 * (i + 1))
  347.                 PIX = PixResizeF(PIX, PIX[1][0] * (1.3 + 0.2 * (i + 1) / num), 0)
  348.                 PIX = BilinearFilter(PIX, dx, dy)
  349.             else:
  350.                 PIX = PIX_1
  351.             tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  352.         num += 8
  353.         for i in range(num):
  354.             ts = te1 - 3 * _FD + _FD * i
  355.             te = ts + _FD
  356.             img_path = MakePath(3, 4 * i + 1, 'images', 'list', 'img', '.png', 'sys')
  357.             PIX = ImagePix(abspath(img_path))
  358.             if i > num - 5:
  359.                 PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / 5)
  360.             tcas_main(TCAS_BUF, PIX, ts, te, _x - PIX[1][0] / 2 + randint(-1, 1), _y - PIX[1][1] / 2 + randint(-1, 1), 2)
  361.         # MAIN 存在方式 part2
  362.         ts2 = te1
  363.         te2 = T2
  364.         tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  365.         # OUT 出场方式
  366.         P = []
  367.         pix_num = len(PIX_list)
  368.         for i in range(pix_num):
  369.             pt0 = (dx, dy)
  370.             pt1 = (dx + randint(-70, 70), dy + randint(-16, 16))
  371.             P.append((pt0, pt1))
  372.         num = 10
  373.         for i in range(num):
  374.             for j in range(pix_num):
  375.                 x, y, a = LinearBezier(P[j][0], P[j][1], i / num)
  376.                 ts3 = te2 + i * _FD
  377.                 te3 = ts3 + _FD
  378.                 PIX = PixBlur(PIX_list[j], 2 * (i + 1))
  379.                 if i > 1 and randint(0, 1) == 0:
  380.                     PIX = pstSoftGlow(PIX, 10, randint(160, 190), randint(140, 160))
  381.                 if i > num - 4:
  382.                     PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / 4)
  383.                 PIX = BilinearFilter(PIX, x, y)
  384.                 tcas_main(TCAS_BUF, PIX, ts3, te3, x, y, 0)
  385.     # part6
  386.     elif _i < 25:
  387.         # 一些时间的计算
  388.         T0 = 10 * _start - 12 * _FD + 2 * _j * _FD
  389.         T1 = T0 + 4 * _FD
  390.         T2 = 10 * _end + 4 * _FD - 2 * (_n - _j - 1) * _FD
  391.         T3 = T2 + 8 * _FD
  392.         # IN 入场方式
  393.         if 0 == g_flags[0]:
  394.             P = ((dx + 300, dy), (dx + 240, dy - 40), (dx + 60, dy - 40), (dx, dy))
  395.             g_flags[0] = 1
  396.         else:
  397.             P = ((dx + 300, dy), (dx + 240, dy + 40), (dx + 60, dy + 40), (dx, dy))
  398.             g_flags[0] = 0
  399.         num = 10
  400.         for i in range(num):
  401.             x, y, a = CubicBezier(P[0], P[1], P[2], P[3], i / num)
  402.             ts0 = T0 + i * _FD
  403.             te0 = ts0 + _FD
  404.             PIX = PixColorMul(PIX_1, 1, 1, 1, (i + 1) / num)
  405.             tcas_main(TCAS_BUF, PIX, ts0, te0, x, y, 0)
  406.         # MAIN 存在方式 part1
  407.         ts1 = te0
  408.         te1 = 10 * (_start + _elapk)
  409.         tcas_main(TCAS_BUF, PIX_1, ts1, te1, dx, dy, 0)
  410.         if _i == 24:
  411.         # EFT 表现方式
  412.             num = int(10 * _k / _FD + 0.5)
  413.             for i in range(num):
  414.                 ts = te1 + _FD * i
  415.                 te = ts + _FD
  416.                 if i % 2 == 0:
  417.                     PIX = pstBlur(PIX_1, 2, 24 + 1.2 * (i + 1))
  418.                     PIX = PixResizeF(PIX, PIX[1][0] * (1.3 + 0.3 * (i + 1) / num), 0)
  419.                     PIX = BilinearFilter(PIX, dx, dy)
  420.                 else:
  421.                     PIX = PIX_1
  422.                 tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  423.             # MAIN 存在方式 part2
  424.             ts2 = te
  425.             te2 = T2 + 2 * (_n - _j - 1) * _FD + randint(-(_n - _j - 1), 1) * _FD
  426.             tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  427.             # OUT 出场方式
  428.             num = 8
  429.             for i in range(num):
  430.                 ts3 = te2 + i * _FD
  431.                 te3 = ts3 + _FD
  432.                 PIX = PixBlur(PIX_1, (i + 1) * 6)
  433.                 PIX = PixResize(PIX, PIX_1[1][0], PIX[1][1] * (1 + i / num))
  434.                 PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / num)
  435.                 tcas_main(TCAS_BUF, PIX, ts3, te3, dx, dy, 0)
  436.             # EXT 附加方式
  437.             if _j == _n - 1:
  438.                 num = 69
  439.                 for i in range(num):
  440.                     ts4 = 10 * (_start + _elapk) + i * _FD
  441.                     te4 = ts4 + _FD
  442.                     img_path = MakePath(2, i + 1, 'images', 'list', 'img', '.png', 'sys')
  443.                     PIX = ImagePix(abspath(img_path))
  444.                     if i > num - 5:
  445.                         PIX = PixColorMul(PIX, 1, 1, 1, (num - i) / 5)
  446.                     tcas_main(TCAS_BUF, PIX, ts4, te4, _x - PIX[1][0] / 2, _y - PIX[1][1] / 2, 2)
  447.         else:
  448.         # EFT 表现方式
  449.             if _k > 100:
  450.                 _k = 100
  451.             num = int(10 * _k / _FD + 0.5)
  452.             for i in range(num):
  453.                 ts = te1 + _FD * i
  454.                 te = ts + _FD
  455.                 PIX = pstBlur(PIX_1, 2, (i + 1) * 4)
  456.                 PIX = PixResizeF(PIX, PIX[1][0] + 12 * (i + 1), 0)   # * (1 + 0.08 * (i + 1))
  457.                 PIX = BilinearFilter(PIX, dx, dy)
  458.                 tcas_main(TCAS_BUF, PIX, ts, te, dx, dy, 1)
  459.             # MAIN 存在方式 part2
  460.             ts2 = te
  461.             te2 = T2
  462.             tcas_main(TCAS_BUF, PIX_1, ts2, te2, dx, dy, 0)
  463.             # OUT 出场方式
  464.             if 0 == g_flags[1]:
  465.                 P = ((dx, dy), (dx - 60, dy + 40), (dx - 240, dy + 40), (dx - 300, dy))
  466.                 g_flags[1] = 1
  467.             else:
  468.                 P = ((dx, dy), (dx - 60, dy - 40), (dx - 240, dy - 40), (dx - 300, dy))
  469.                 g_flags[1] = 0
  470.             num = 10
  471.             for i in range(num):
  472.                 x, y, a = CubicBezier(P[0], P[1], P[2], P[3], i / num)
  473.                 ts3 = te2 + i * _FD
  474.                 te3 = ts3 + _FD
  475.                 PIX = PixColorMul(PIX_1, 1, 1, 1, (num - i) / num)
  476.                 tcas_main(TCAS_BUF, PIX, ts3, te3, x, y, 0)
  477.     ##### 将结果返回给tcax进行处理 #####
  478.     return (ASS_BUF, TCAS_BUF)


  479. # 辅助函数
  480. def PixSubClips(PIX, xv, yv):
  481.     PIX_list = []
  482.     xv = list(xv)
  483.     yv = list(yv)
  484.     xv.append(PIX[1][0])
  485.     yv.append(PIX[1][1])
  486.     xv.sort()
  487.     yv.sort()
  488.     xn = len(xv)
  489.     yn = len(yv)
  490.     y_off = 0
  491.     for j in range(yn):
  492.         x_off = 0
  493.         for i in range(xn):
  494.             PIX_sub_pos = (PIX[0][0] + x_off, PIX[0][1] + y_off)
  495.             PIX_sub_res = (xv[i] - x_off, yv[j] - y_off)
  496.             PIX_sub_rgba = []
  497.             for h in range(PIX_sub_res[1]):
  498.                 for w in range(PIX_sub_res[0]):
  499.                     idx = 4 * ((h + y_off) * PIX[1][0] + w + x_off)
  500.                     PIX_sub_rgba.append(PIX[2][idx])
  501.                     PIX_sub_rgba.append(PIX[2][idx + 1])
  502.                     PIX_sub_rgba.append(PIX[2][idx + 2])
  503.                     PIX_sub_rgba.append(PIX[2][idx + 3])
  504.             PIX_list.append((PIX_sub_pos, PIX_sub_res, tuple(PIX_sub_rgba)))
  505.             x_off = xv[i]
  506.         y_off = yv[j]
  507.     return PIX_list
复制代码
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _Fs
  4.     global _FD          # 一帧的持续时间, 约40毫秒
  5.     _Fs = GetVal(val_FontSize)
  6.     _FD = 1000 / GetVal(val_FXFPS)
  7.     # 图片序列
  8.     global PIX_list
  9.     PIX_list = []
  10.     num = 40
  11.     for i in range(1, num, 2):
  12.         img_path = MakePath(1, i, 'images', 'list', 'img', '.png', 'sys')
  13.         PIX = ImagePix(abspath(img_path))
  14.         PIX_list.append(PIX)

  15. def tcaxPy_Fin():
  16.     pass

  17. def tcaxPy_User():
  18.     file_name = GetVal(val_OutFile) + '.tcas'
  19.     fx_width = GetVal(val_ResolutionX)
  20.     fx_height = GetVal(val_ResolutionY)
  21.     fx_fps = GetVal(val_FXFPS)
  22.     TCAS_FILE = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  23.     # basic metrics
  24.     fontSize   = GetVal(val_FontSize)
  25.     marginX    = GetVal(val_OffsetX)
  26.     marginY    = GetVal(val_OffsetY)
  27.     spacing    = GetVal(val_Spacing)
  28.     lineNum    = GetVal(val_nLines)
  29.     textNum    = GetVal(val_nTexts)
  30.     start      = GetVal(val_BegTime)
  31.     end        = GetVal(val_EndTime)
  32.     kar        = GetVal(val_KarTime)
  33.     elapKar    = GetVal(val_KarTimeDiff)
  34.     text       = GetVal(val_Text)
  35.     textLength = GetVal(val_TextLength)
  36.     advance    = GetVal(val_TextAdvance)
  37.     advDiff    = GetVal(val_TextAdvanceDiff)
  38.     # main loop
  39.     for i in range(4, 8):
  40.         initPosX = marginX
  41.         initPosY = marginY
  42.         BIG_PIX = InitBigPix()
  43.         for j in range(textNum[i]):
  44.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  45.                 continue
  46.             Progress(i, j)
  47.         T0 = 10 * start[i] - 16 * _FD
  48.         num = len(PIX_list)
  49.         for ii in range(num):
  50.             ts3 = T0 + ii * _FD
  51.             te3 = ts3 + _FD
  52.             PIX = PIX_list[ii]
  53.             if ii > num - 5:
  54.                 PIX = PixColorMul(PIX, 1, 1, 1, (num - ii) / 5)
  55.             TCAS_BUF = []
  56.             x = int(marginX + fx_width / 2 - PIX[1][0] / 2 + 0.5)
  57.             y = int(marginY + _Fs / 2 - PIX[1][1] / 2 + 0.5) - 6
  58.             tcas_main(TCAS_BUF, PIX, ts3, te3, x, y, 2)
  59.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  60.             progress(ii + 1, num)
  61.     FinTcasFile(TCAS_FILE)
复制代码
2

查看全部评分

Rank: 4

发表于 2012-8-11 16:56:17 |显示全部楼层
好长……

Moderator

疯子

Rank: 5Rank: 5

发表于 2012-8-11 19:45:03 |显示全部楼层
越来越长

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-8-11 19:50:21 |显示全部楼层
youkaze 发表于 2012-8-11 16:56
好长……

分的部分比较多而已

Rank: 4

发表于 2012-8-11 20:16:40 |显示全部楼层
本帖最后由 兜兜里没糖 于 2012-8-11 20:18 编辑

眼花缭乱啊
这次怎么没预览了

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-8-11 20:20:19 |显示全部楼层
兜兜里没糖 发表于 2012-8-11 20:16
眼花缭乱啊
这次怎么没预览了

预览我发群邮了... 115现在不方便, 就没丢了, 等等看有没谁传Youku吧

Rank: 4

发表于 2012-8-12 12:34:34 |显示全部楼层
这么多的东东。。。

Rank: 4

发表于 2013-10-21 15:37:07 |显示全部楼层
完全看不懂。。怎么办?

Rank: 4

发表于 2014-5-18 21:07:42 |显示全部楼层
不是很懂 提示这个
failed to initialize the frame cache caused by access failure to the tcas file

Rank: 4

发表于 2014-11-1 19:52:07 |显示全部楼层
AW_op2.tcc这个不能成功解析。
下面两个能够成功解析,什么情况?麻烦大神指点。
AW_op2_illusion.tcc
AW_op2_cn.tcc

截图.jpg

Rank: 4

发表于 2014-11-9 17:09:11 |显示全部楼层
好东西赞一个

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2014-11-9 20:39:43 |显示全部楼层
oiuu 发表于 2014-11-1 19:52
AW_op2.tcc这个不能成功解析。
下面两个能够成功解析,什么情况?麻烦大神指点。
AW_op2_illusion.tcc

應該是和_k.ass有關吧..把這個文件發上來, 和你選用的字體一起

Rank: 4

发表于 2015-9-24 13:52:13 |显示全部楼层
好东西就是这么牛

Rank: 4

发表于 2015-10-4 04:42:39 |显示全部楼层
没有预览图不幸福

Rank: 1

发表于 2015-11-16 23:32:30 |显示全部楼层
新手路过

Rank: 4

发表于 2015-12-10 22:32:08 |显示全部楼层
新手学习,感谢分享~

Rank: 4

发表于 2016-3-21 21:15:08 |显示全部楼层
楼主辛苦了哈,在这里真的学到了好多东西

Rank: 4

发表于 2016-8-7 20:05:15 |显示全部楼层
辛苦啦

Rank: 4

发表于 2016-9-11 20:06:18 |显示全部楼层
辛苦

Rank: 4

发表于 2016-9-11 20:06:39 |显示全部楼层
辛苦了
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

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

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH