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

 找回密码
 新人加入
查看: 7156|回复: 13

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

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-24 21:37:13 |显示全部楼层
说明, 如果要直接执行本脚本, 请升级TCAX到最新版 (1.1.8), 附件为完整工程
说明2, 本特效用到的一些效果会陆续写成教程...
其一, TCAS fade流
  1. from tcaxPy import *
  2. from util.magick import *
  3. from pixLibs.ImageStone import *

  4. def tcaxPy_Init():
  5.     global _Fs
  6.     global _FD          # 一帧的持续时间, 约40毫秒
  7.     global _Spacing     # 字体间距
  8.     global Font         # 首要字体
  9.     global FontOut      # 字体边框
  10.     global FontOut2     # 字体边框2
  11.     global COLORS       # 边框二颜色
  12.     global IMG_tex      # 主要纹理
  13.     _Fs = GetVal(val_FontSize)
  14.     _FD = 1000 / GetVal(val_FXFPS)
  15.     _FontFileName = GetVal(val_FontFileName)
  16.     _FaceID = GetVal(val_FaceID)
  17.     _Spacing = GetVal(val_Spacing)
  18.     Font = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  19.     FontOut = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), 0xFFFFFF, 3, 1)
  20.     FontOut2 = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), 0xFFFFFF, 2, 0)
  21.     COLORS = ['000000', '00BB00', 'FF0000', '00AA00', '0000FF', 'FFFF00', 'FF0000', '00FFFF', 'FFFFFF']
  22.     IMG_tex = Image('images\\blood.jpg')

  23. def tcaxPy_Fin():
  24.     FinFont(Font)
  25.     FinFont(FontOut)
  26.     FinFont(FontOut2)

  27. # 用户修订版的tcaxPy_Main函数, 保留原始tcaxPy_Main风格是为了减少额外记忆量, 实际上该函数形式可以非常多样化
  28. def tcaxPy_Main_Fake(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  29.     ASS_BUF  = []        # 保存ASS特效
  30.     TCAS_BUF = []        # 保存TCAS特效
  31.     ##### 主要特效编写操作 ####
  32. #    if _i == 3:
  33. #        _x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[_i] - GetVal(val_OffsetX) + GetVal(val_TextAdvanceDiff)[_i][_j]
  34.     dx = _x - int((_a + _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.     IMG = Image(IMG_tex)
  39.     xoff = randint(0, IMG.columns() - PIX[1][0])
  40.     yoff = (randint(0, 54), randint(90, IMG.rows() - PIX[1][1]))[randint(0, 1)]
  41.     IMG.crop(Geometry(PIX[1][0], PIX[1][1], xoff, yoff))
  42.     PIX_tex = pmgToPix(IMG)
  43.     PIX_t = PixTexture(PIX, PIX_tex)
  44.     # 边框主体
  45.     PIX = TextPix(FontOut, _txt)
  46.     PIX = PixColorRGB(PIX, DecRGB(COLORS[_i]))
  47.     PIX = PixColorMul(PIX, 1, 1, 1, 0.8)
  48.     PIX_o = PixBlur(PIX, 6)
  49.     # 边框
  50.     PIX = TextPix(FontOut2, _txt)
  51.     PIX = PixColorRGB(PIX, DecRGB('0000BB'))
  52.     PIX_b = PixBlur(PIX, 2)
  53.     # 混合
  54.     PIX = CombinePixs(PIX_o, PIX_b)
  55.     PIX = CombinePixs(PIX, PIX_t)
  56.     PIX0 = PIX

  57. #     一些时间的计算
  58.     T0 = 10 * _start - 10 * _FD + 2 * _j * _FD
  59.     T1 = T0 + 4 * _FD
  60.     T2 = 10 * _end + 5 * _FD - 2 * (_n - _j - 1) * _FD
  61.     T3 = T2 + _FD * 6
  62.     TS = 10 * _start - 40 * _FD
  63.     TK = 10 * (_start + _elapk)
  64.     TE = 10 * _end + 10 * _FD

  65.     # 第一句效果
  66.     if _i == 0:
  67.         IMG = Image(IMG_tex)
  68.         IMG.type(ImageType.GrayscaleType)
  69.         IMG.filterType(FilterTypes.CubicFilter)
  70.         IMG.resize('!{0}x{1}'.format(PIX0[1][0], PIX0[1][1]))
  71.         PIX = pmgToPix(IMG)
  72.         PIX = PixColorMul(PIX, 2, 1, 1, 1)
  73.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  74.         PIX = r2a(PIX)
  75.         mask0 = invertA(PIX)
  76.         num = int(10 * _k / _FD + 0.5) + 10
  77.         for i in range(num):
  78.             mask = addA(mask0, 255 * i / num)
  79.             PIX = PixMask(PIX0, mask)
  80.             tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)

  81.         tcas_main(TCAS_BUF, PIX0, TK + num * _FD, TE, dx, dy, 0)

  82.         IMG = Image('images\\blurred_noise.jpg')
  83.         xoff = randint(0, IMG.columns() - PIX0[1][0])
  84.         yoff = randint(0, IMG.rows() - PIX0[1][1])
  85.         IMG.crop(Geometry(PIX0[1][0], PIX0[1][1], xoff, yoff))
  86.         PIX = pmgToPix(IMG)
  87.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  88.         PIX = r2a(PIX)
  89.         mask0 = invertA(PIX)
  90.         num = 40
  91.         for i in range(num):
  92.             mask = addA(mask0, 255 * (num - 2 * i) / num)
  93.             PIX = PixMask(PIX0, mask)
  94.             tcas_main(TCAS_BUF, PIX, TE + i * _FD, TE + (i + 1) * _FD, dx, dy, 0)

  95.     # 第二句效果
  96.     elif _i == 1:
  97.         IMG = Image('images\\blurred_noise.jpg')
  98.         xoff = randint(0, IMG.columns() - PIX0[1][0])
  99.         yoff = randint(0, IMG.rows() - PIX0[1][1])
  100.         IMG.crop(Geometry(PIX0[1][0], PIX0[1][1], xoff, yoff))
  101.         PIX = pmgToPix(IMG)
  102.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  103.         PIX = r2a(PIX)
  104.         mask0 = invertA(PIX)
  105.         num = 40
  106.         for i in range(num):
  107.             mask = addA(mask0, 255 * (2 * i - num) / num)
  108.             PIX = PixMask(PIX0, mask)
  109.             tcas_main(TCAS_BUF, PIX, TS + i * _FD, TS + (i + 1) * _FD, dx, dy, 0)

  110.         tcas_main(TCAS_BUF, PIX0, TS + num * _FD, TK, dx, dy, 0)
  111.         
  112.         PIX = PixBlur(PIX_t, 9)    # 8, 11
  113.         tcas_keyframe(TCAS_BUF, PIX0, PIX, TK, TK + 10 * _k + 4 * _FD, dx, dy, 2, 0)
  114.         tcas_keyframe(TCAS_BUF, PIX, PixColorMul(PIX, 1, 1, 1, 0), TK + 10 * _k + 4 * _FD, T3, dx, dy, 1, 0)

  115.     # 第三句效果
  116.     elif _i == 2:
  117.         IMG = Image(IMG_tex)
  118.         IMG.type(ImageType.GrayscaleType)
  119.         IMG.filterType(FilterTypes.CubicFilter)
  120.         IMG.resize('!{0}x{1}'.format(PIX0[1][0], PIX0[1][1]))
  121.         PIX = pmgToPix(IMG)
  122.         PIX = PixColorMul(PIX, 4, 1, 1, 1)
  123.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  124.         PIX = r2a(PIX)
  125.         mask0 = invertA(PIX)
  126.         num = int(10 * _k / _FD + 0.5) + 10
  127.         for i in range(num):
  128.             mask = addA(mask0, 255 * i / num)
  129.             PIX = PixMask(PIX0, mask)
  130.             tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)

  131.         tcas_main(TCAS_BUF, PIX0, TK + num * _FD, T2, dx, dy, 0)

  132.         IMG = Image('images\\noise.jpg')
  133.         xoff = randint(0, IMG.columns() - PIX0[1][0])
  134.         yoff = randint(0, IMG.rows() - PIX0[1][1])
  135.         IMG.crop(Geometry(PIX0[1][0], PIX0[1][1], xoff, yoff))
  136.         PIX = pmgToPix(IMG)
  137.         PIX = PixColorMul(PIX, 3, 1, 1, 1)
  138.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  139.         PIX = r2a(PIX)
  140.         mask0 = invertA(PIX)
  141.         num = 40
  142.         for i in range(num):
  143.             mask = addA(mask0, 255 * (num - 2 * i) / num)
  144.             PIX = PixMask(PIX0, mask)
  145.             tcas_main(TCAS_BUF, PIX, T2 + i * _FD, T2 + (i + 1) * _FD, dx, dy, 0)

  146.     # 第四五句效果
  147.     elif _i == 3 or _i == 4:
  148.         IMG = Image('images\\radial.jpg')
  149.         IMG.filterType(FilterTypes.CubicFilter)
  150.         IMG.resize('!{0}x{1}'.format(PIX0[1][0], PIX0[1][1]))
  151.         PIX = pmgToPix(IMG)
  152.         PIX = PixColorMul(PIX, 2, 1, 1, 1)
  153.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  154.         PIX = r2a(PIX)
  155.         if _i == 3:
  156.             mask0 = PIX
  157.         else:
  158.             mask0 = invertA(PIX)
  159.         num = int(10 * _k / _FD + 0.5) + 4
  160.         for i in range(num):
  161.             mask = addA(mask0, 255 * (2 * i - num) / num)
  162.             PIX = PixMask(PIX0, mask)
  163.             tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)

  164.         tcas_main(TCAS_BUF, PIX0, TK + num * _FD, T2, dx, dy, 0)

  165.         num = 10
  166.         for i in range(num):
  167.             mask = addA(mask0, 255 * (num - 2 * i) / num)
  168.             PIX = PixMask(PIX0, mask)
  169.             tcas_main(TCAS_BUF, PIX, T2 + i * _FD, T2 + (i + 1) * _FD, dx, dy, 0)

  170.     # 第六句效果
  171.     elif _i == 5:
  172.         ### 增加到 BIG_PIX 当中, BIG_PIX保存在param的第一个元素处, 关于BIG_PIX用法, 请看专门教程
  173.         BigPixAdd(param[0], PIX0, dx, dy, 0)

  174.         tcas_main(TCAS_BUF, PIX0, 10 * _start, TK, dx, dy, 0)

  175.         PIX2 = CombinePixs(PIX_o, PIX_b)
  176.         num = int(10 * _k / _FD + 0.5) + 10
  177.         for i in range(num):
  178.             IMG = Image(IMG_tex)
  179.             IMG.rotate(360 * 1.5 * i / num)
  180.             PIX = pmgToPix(IMG)
  181.             PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  182.             PIX = PixMask(PIX, PIX_t)
  183.             PIX = PixStrip(PIX)
  184.             PIX = CombinePixs(PIX2, PIX)        # crash on '合' if without PixStrip, need a bug-fix, fixed in the latest tcaxLib.pyd, but PixStrip is still preferred due to performance issue
  185.             tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)

  186.         tcas_main(TCAS_BUF, PIX, TK + num * _FD, T2, dx, dy, 0)

  187.         PIX3 = PIX
  188.         num = 6
  189.         for i in range(num):
  190.             IMG = pmgToImage(PIX3)
  191.             IMG.motionBlur(0, 6 * i, 90)
  192.             PIX = PixPos(pmgToPix(IMG), PIX3[0][0], PIX3[0][1])
  193.             PIX = PixColorMul(PIX, 1, 1, 1, 0.5 + 0.5 * (num - i) / num)
  194.             tcas_main(TCAS_BUF, PIX, T2 + i * _FD, T2 + (i + 1) * _FD, dx, dy, 0)

  195.     # 第七句效果
  196.     elif _i == 6:
  197.         num = 6
  198.         for i in range(num):
  199.             IMG = pmgToImage(PIX0)
  200.             IMG.channel(ChannelType.MatteChannel)
  201.             IMG.motionBlur(0, 6 * (num - i), -90)
  202.             PIX = PixPos(pmgToPix(IMG), PIX0[0][0], PIX0[0][1])
  203.             PIX = PixColorMul(PIX, 1, 1, 1, 0.6 + 0.4 * i / num)
  204.             tcas_main(TCAS_BUF, PIX, T0 + i * _FD, T0 + (i + 1) * _FD, dx, dy, 0)
  205.         TM0 = T0 + num * _FD
  206.         TM1 = TM0 + 6 * _FD
  207.         tcas_keyframe(TCAS_BUF, PIX, PIX0, TM0, TM1, dx, dy, 1, 0)
  208.         tcas_main(TCAS_BUF, PIX0, TM1, TK, dx, dy, 0)

  209.         num = int(10 * _k / _FD + 0.5) + 4
  210.         for i in range(num):
  211.             fa = i
  212.             if fa > num // 2:
  213.                 fa = num - i
  214.             if randint(0, 2) == 0:
  215.                 PIX = pstEffect(PIX0, 22, 1 + 1.2 * fa)
  216.             else:
  217.                 PIX = pstEffect(PIX0, 25, 1 + 1.2 * fa)
  218.             tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)

  219.         tcas_main(TCAS_BUF, PIX0, TK + num * _FD, T2, dx, dy, 0)

  220.         tcas_keyframe(TCAS_BUF, PIX0, PixColorMul(PixBlur(PIX, 12), 1, 1, 1, 0.4), T2, T3, dx, dy, 1, 0)

  221.     # 第八句效果
  222.     elif _i == 7:
  223.         if _k < 200:
  224.             num = int(10 * _k / _FD + 0.5) + 1
  225.             for i in range(num):
  226.                 faX = i / num
  227.                 if faX < 2 / 3:
  228.                     fa = 0.8 + 0.6 * faX
  229.                 else:
  230.                     fa = 1.6 - 0.6 * faX
  231.                 PIX = PixResizeF(PIX0, PIX0[1][0] * fa, 0)
  232.                 PIX = BilinearFilter(PIX, dx, dy)
  233.                 PIX = PixColorMul(PIX, 1, 1, 1, 0.6 + 0.4 * i / num)
  234.                 tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  235.             tcas_main(TCAS_BUF, PIX0, TK + num * _FD, T2, dx, dy, 0)
  236.             PIX = PIX0
  237.         else:    # {\K205}だ
  238.             PIX2 = CombinePixs(PIX_o, PIX_b)
  239.             num = int(10 * _k / _FD + 0.5) - 2
  240.             for i in range(num):
  241.                 IMG = Image(IMG_tex)
  242.                 IMG.rotate(360 * 1.5 * i / num)
  243.                 PIX = pmgToPix(IMG)
  244.                 PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  245.                 PIX = PixMask(PIX, PIX_t)
  246.                 PIX = PixStrip(PIX)
  247.                 PIX3 = CombinePixs(PIX2, PIX)
  248.                 fa = 1 + 0.4 * (num - i) / num
  249.                 PIX = PixResizeF(PIX3, PIX3[1][0] * fa, 0)
  250.                 PIX = BilinearFilter(PIX, dx, dy)
  251.                 PIX = PixColorMul(PIX, 1, 1, 1, 0.6 + 0.4 * i / num)
  252.                 tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  253.             tcas_main(TCAS_BUF, PIX, TK + num * _FD, T2, dx, dy, 0)

  254.         tcas_keyframe(TCAS_BUF, PIX, PixPosShift(PixColorMul(PIX, 0, 0, 0, 0), 0, 50), T2, T3, dx, dy, 2, 0)

  255.     # 第九句效果
  256.     elif _i == 8:
  257.         ### 增加到 BIG_PIX 当中, BIG_PIX保存在param的第一个元素处, 关于BIG_PIX用法, 请看专门教程
  258.         BigPixAdd(param[0], PIX0, dx, dy, 0)

  259.         tcas_main(TCAS_BUF, PIX0, 10 * _start, TK, dx, dy, 0)

  260. #        IMG = Image('400x60', 'black')
  261. #        IMG.backgroundColor('black')
  262. #        IMG.fillColor('white')
  263. #        IMG.draw(DrawableRectangle(0, 28, 400, 32))
  264. #        IMG.wave(2, 100)
  265. #        IMG.randomThreshold('40%x60%')
  266. #        IMG.blur(0, 4)
  267. #        IMG.write('stroke.jpg')
  268.         IMG = Image('images\\stroke.jpg')
  269.         IMG.filterType(FilterTypes.CubicFilter)
  270.         IMG.resize('!{0}x{1}'.format(PIX0[1][0], PIX0[1][1]))
  271.         PIX_black = BlankPix(PIX0[1][0], PIX0[1][1], MakeRGBA(0, 0, 0, 255))
  272.         num = int(10 * _k / _FD + 0.5)
  273.         for i in range(num):
  274.             img = Image(IMG)
  275.             img.crop(Geometry(int(PIX0[1][0] * (i + 1) / num + 0.5) + 1, PIX0[1][1], 0, 0))
  276.             PIX = pmgToPix(img)
  277.             PIX = CombinePixs(PIX_black, PIX)
  278.             PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  279.             PIX = r2a(PIX)
  280.             mask = invertA(PIX)
  281.             PIX = PixMask(PIX0, mask)
  282.             tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)

  283.         tcas_main(TCAS_BUF, PIX, TK + num * _FD, 10 * _end, dx, dy, 0)
  284.         PIX2 = PIX

  285.         IMG.blur(0, 8)
  286.         PIX = pmgToPix(IMG)
  287.         PIX = PixColorMul(PIX, 2, 1, 1, 1)
  288.         PIX = PixPos(PIX, PIX0[0][0], PIX0[0][1])
  289.         PIX = r2a(PIX)
  290.         mask0 = invertA(PIX)
  291.         num = 30
  292.         for i in range(num):
  293.             mask = addA(mask0, 255 * (num - 2 * i) / num)
  294.             PIX = PixMask(PIX2, mask)
  295.             tcas_main(TCAS_BUF, PIX, 10 * _end + i * _FD, 10 * _end + (i + 1) * _FD, dx, dy, 0)

  296. #     将结果返回给tcax进行处理 #####
  297.     return (ASS_BUF, TCAS_BUF)

  298. def tcaxPy_User():
  299.     file_name = GetVal(val_OutFile) + '.tcas'
  300.     fx_width = GetVal(val_ResolutionX)
  301.     fx_height = GetVal(val_ResolutionY)
  302.     fx_fps = GetVal(val_FXFPS)
  303.     TCAS_FILE = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  304.     # basic metrics
  305.     fontSize   = GetVal(val_FontSize)
  306.     marginX    = GetVal(val_OffsetX)
  307.     marginY    = GetVal(val_OffsetY)
  308.     spacing    = GetVal(val_Spacing)
  309.     lineNum    = GetVal(val_nLines)
  310.     textNum    = GetVal(val_nTexts)
  311.     start      = GetVal(val_BegTime)
  312.     end        = GetVal(val_EndTime)
  313.     kar        = GetVal(val_KarTime)
  314.     elapKar    = GetVal(val_KarTimeDiff)
  315.     text       = GetVal(val_Text)
  316.     textLength = GetVal(val_TextLength)
  317.     advance    = GetVal(val_TextAdvance)
  318.     advDiff    = GetVal(val_TextAdvanceDiff)
  319.     # main loop
  320.     for i in range(lineNum):
  321.         initPosX = marginX    #(fx_width - textLength[i]) / 2 + marginX        # if marginX = 0, then it's just on the middle
  322.         initPosY = marginY
  323.         BIG_PIX = InitBigPix()
  324.         for j in range(textNum[i]):
  325.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  326.                 continue
  327.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  328.             posY = initPosY + fontSize / 2
  329.             param = [BIG_PIX]
  330.             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)
  331.             if len(TCAS_BUF) != 0:
  332.                 WriteTcasFile(TCAS_FILE, TCAS_BUF)
  333.             Progress(i, j)
  334.         if i == 5:
  335.             num = 20
  336.             PIX1 = ConvertBigPix(BIG_PIX)
  337.             TCAS_BUF = []
  338.             tcas_main(TCAS_BUF, PIX1, start[i] * 10 - num * _FD, start[i] * 10, 0, 0, 1)
  339.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  340.             mask = PIX1
  341.             PIX = CombinePixs(ImagePix('images\\flare3.png'), switchRB(ImagePix('images\\flare1.png')))
  342.             #SavePix('f.png', PIX)
  343.             PIX = PixStrip(PIX)
  344.             PIX2 = PixResize(PIX, PIX1[1][0], PIX1[1][1])
  345.             for l in range(num):
  346.                 TCAS_BUF = []
  347.                 PIX = PixPos(PIX2, PIX1[0][0] + PIX1[1][0] * (l - num / 2) / num, PIX1[0][1])
  348.                 PIX = PixMask(PIX, mask)
  349.                 tcas_main(TCAS_BUF, PIX, start[i] * 10 - num * _FD + l * _FD, start[i] * 10 - num * _FD + (l + 1) * _FD, 0, 0, 1)
  350.                 WriteTcasFile(TCAS_FILE, TCAS_BUF)
  351.                 #progress(l + 1, num)
  352.         elif i == 8:
  353.             num = 40
  354.             PIX1 = ConvertBigPix(BIG_PIX)
  355.             IMG = Image(Geometry(PIX1[1][1], PIX1[1][0]), 'transparent')
  356.             IMG.read('gradient:black-white')
  357.             IMG.rotate(90)
  358.             IMG.type(ImageType.GrayscaleType)
  359.             IMG2 = Image(IMG)
  360.             IMG.randomThreshold('0x100%')
  361.             IMG.type(ImageType.GrayscaleType)
  362.             PIX = pmgToPix(IMG2)
  363.             PIX = r2a(PIX)
  364.             mask = invertA(PIX)
  365.             PIX = PixMask(pmgToPix(IMG), mask)
  366.             #SavePix('gradient_noise.png', PIX)
  367.             PIX = PixPos(PIX, PIX1[0][0], PIX1[0][1])
  368.             mask0 = r2a(PIX)
  369.             for l in range(num):
  370.                 TCAS_BUF = []
  371.                 mask = addA(mask0, 255 * (2 * l - num) / num)
  372.                 PIX = PixMask(PIX1, mask)
  373.                 tcas_main(TCAS_BUF, PIX, start[i] * 10 - num * _FD + l * _FD, start[i] * 10 - num * _FD + (l + 1) * _FD, 0, 0, 1)
  374.                 if len(TCAS_BUF) > 0:
  375.                     WriteTcasFile(TCAS_FILE, TCAS_BUF)
  376.                 #progress(l + 1, num)
  377.     FinTcasFile(TCAS_FILE)


  378. def r2a(PIX):
  379.     buf = []
  380.     width = PIX[1][0]
  381.     height = PIX[1][1]
  382.     for h in range(height):
  383.         for w in range(width):
  384.             index = 4 * (h * width + w)
  385. #            if PIX[2][index] != PIX[2][index + 1] or PIX[2][index] != PIX[2][index + 2]:
  386. #                print('note1')
  387. #            if PIX[2][index + 3] != 255:
  388. #                print('note2')
  389.             buf.append(0)
  390.             buf.append(0)
  391.             buf.append(0)
  392.             buf.append(PIX[2][index + 0])
  393.     return (PIX[0], PIX[1], tuple(buf))

  394. def invertA(PIX):
  395.     buf = list(PIX[2])
  396.     width = PIX[1][0]
  397.     height = PIX[1][1]
  398.     for h in range(height):
  399.         for w in range(width):
  400.             index = 4 * (h * width + w) + 3
  401.             buf[index] = 255 - buf[index]
  402.     return (PIX[0], PIX[1], tuple(buf))

  403. def addA(PIX, step):
  404.     buf = list(PIX[2])
  405.     width = PIX[1][0]
  406.     height = PIX[1][1]
  407.     for h in range(height):
  408.         for w in range(width):
  409.             index = 4 * (h * width + w) + 3
  410.             buf[index] += int(step + 0.5)
  411.             if buf[index] < 0:
  412.                 buf[index] = 0
  413.             if buf[index] > 255:
  414.                 buf[index] = 255
  415.     return (PIX[0], PIX[1], tuple(buf))

  416. def switchRB(PIX):
  417.     buf = list(PIX[2])
  418.     width = PIX[1][0]
  419.     height = PIX[1][1]
  420.     for h in range(height):
  421.         for w in range(width):
  422.             index = 4 * (h * width + w)
  423.             temp = buf[index]
  424.             buf[index] = buf[index + 2]
  425.             buf[index + 2] = temp
  426.     return (PIX[0], PIX[1], tuple(buf))
复制代码

Another_OP.rar

115.95 KB, 下载次数: 3213

完整工程

2

查看全部评分

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-24 21:40:15 |显示全部楼层
补上预览, http://www.tcax.org/forum.php?mod=viewthread&tid=43

文件名: [J]034_Another_OP.mkv 与 [J]034_Another_OP_(with_cn).mp4

正式会员

妖木

Rank: 4

发表于 2012-2-24 22:03:01 |显示全部楼层

Rank: 1

发表于 2013-8-6 22:21:07 |显示全部楼层
不錯的字幕。。

Rank: 4

发表于 2013-10-14 00:49:16 |显示全部楼层
这个视频让我半夜心慌慌啊

Rank: 4

发表于 2013-10-14 20:35:36 |显示全部楼层
亦步未城 发表于 2013-10-14 00:49
这个视频让我半夜心慌慌啊

这个视频我每天必看~  不看睡不着的那种233

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2013-10-14 22:42:43 |显示全部楼层
yyxxlc 发表于 2013-10-14 20:35
这个视频我每天必看~  不看睡不着的那种233

这么给力

Rank: 4

发表于 2013-10-15 08:01:00 |显示全部楼层
yyxxlc 发表于 2013-10-14 20:35
这个视频我每天必看~  不看睡不着的那种233

Rank: 4

发表于 2013-10-15 20:58:53 |显示全部楼层
亦步未城 发表于 2013-10-15 08:01

乃不觉得这个字幕做的很精致么! 我第一次看就觉得太强了啊 奶大的这个字幕和滑头鬼的那个 完全不像是后期做的字幕 就像是动画制作组本来就在OP上嵌着的似得 仔细看的话 开头的时候ANOTHER那个 A中间的那一横是最后画的 这边做的字幕组的组字的最后一笔也是最后同一时间画上去的  最后一句一笔消失也是这样  诚然这个OP挺恐怖的(因为动画就比较血腥啦) 但是重点是做的太棒了有木有!(滚来滚去)

Rank: 4

发表于 2013-10-15 21:09:27 |显示全部楼层
本帖最后由 yyxxlc 于 2013-10-15 21:38 编辑
milkyjing 发表于 2013-10-14 22:42
这么给力


奶大 死にたい~あぁあぁあぁ~ 我今天玩脱了 手一抖不小心把整理了3天的pixstone的资料给删掉了啊   我查了好久的字典记每个滤镜的名字! 好容易吧008.exe里面的滤镜效果和pixstone里函数的对应了 还记录了PS里的位置 还截了好多图 结果被我一秒钟不到就删掉了! 我连抢救都来不及(太没天理了) T_T  说起来都是眼泪啊 dsajdsadsadaskjdals(脸滚键盘没劲儿了)

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2013-10-15 22:37:43 |显示全部楼层
yyxxlc 发表于 2013-10-15 21:09
奶大 死にたい~あぁあぁあぁ~ 我今天玩脱了 手一抖不小心把整理了3天的pixstone的资料给删掉了啊{:onio ...


资料习惯性备份.. 这样的教训我也遇到过...

顺便说下BeyondCompare很好用..

Rank: 4

发表于 2013-10-15 23:02:01 |显示全部楼层
本帖最后由 yyxxlc 于 2013-10-15 23:04 编辑
milkyjing 发表于 2013-10-15 22:37
资料习惯性备份.. 这样的教训我也遇到过...

顺便说下BeyondCompare很好用.. ...


我已经完全焉掉了 一想到要重新写一遍就各种想毁灭世界 pixstone你好 pixstone再见! 奶大晚安

Rank: 4

发表于 2013-11-1 16:29:09 |显示全部楼层
This Script its does not work... ;/
The problem described in this topic:
http://www.tcax.org/forum.php?mo ... amp;extra=#pid12346

Rank: 4

发表于 2019-1-6 12:10:00 |显示全部楼层
Parse之后为何没有生成ass
360截图20190106120724473.jpg

Rank: 4

发表于 2020-3-9 15:13:41 |显示全部楼层
本帖最后由 Seekladoom 于 2020-3-9 15:14 编辑

前来顶奶大一发,这个py脚本配合下面这个字体合集使用效果相当好啊!

解密恐怖诅咒杀意风格字体合集
https://www.foundertype.com/heji_i/425481.html
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-3-28 19:39

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH