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

 找回密码
 新人加入
查看: 3111|回复: 5
打印 上一主题 下一主题

[完整特效] [SAI]044_mekakucityactorsOP [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2014-4-14 22:32:24 |只看该作者 |倒序浏览
預覽:http://pan.baidu.com/s/1hqqY9CC#dir/path=%2FSaiyakuFX_Preview
  1. from tcaxPy import *
  2. from util.cairo import *
  3. from util.gdiFont import *


  4. def tcaxPy_Init():

  5.     global _Fs

  6.     global _FD                  # 一帧的持续时间, 约40毫秒

  7.     global _Spacing         # 字体间距

  8.     global Font                 # 首要字体

  9.     global GdiFont
  10.     global _TextWidth                # 文字宽度
  11.     global _TextHeight                # 文字高度
  12.     global _TextLength
  13.     global _TextAdvDiff
  14.     global _ResolutionX
  15.     global _OffsetX
  16.     _TextHeight   = GetVal(val_TextHeight)
  17.     _TextWidth    = GetVal(val_TextWidth)
  18.     _TextLength   = GetVal(val_TextLength)
  19.     _TextAdvDiff  = GetVal(val_TextAdvanceDiff)
  20.     _ResolutionX  = GetVal(val_ResolutionX)
  21.     _OffsetX      = GetVal(val_OffsetX)

  22.     _Fs = GetVal(val_FontSize)

  23.     _FD = 1000 / GetVal(val_FXFPS)

  24.     _FontFileName = GetVal(val_FontFileName)

  25.     _FaceID = GetVal(val_FaceID)

  26.     _Spacing = GetVal(val_Spacing)

  27.     Font = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), MakeRGB(255, 255, 255), 0, False)

  28.     GdiFont = gfInitFont(GetVal(val_FontFaceName), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0, False)   #GDIfont
  29.    
  30.     # cairo

  31.     global ctx

  32.     fx_width = GetVal(val_ResolutionX)

  33.     fx_height = GetVal(val_ResolutionY)

  34.     surface = ImageSurface(FORMAT_ARGB32, fx_width, fx_height)

  35.     ctx = Context(surface)


  36. def tcaxPy_Fin():
  37.     FinFont(Font)
  38.     gfFinFont(GdiFont)   #GDIfont

  39. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):

  40.     ASS_BUF  = []                # 保存ASS特效
  41.     TCAS_BUF = []                # 保存TCAS特效



  42.     global COLOR
  43.     global COLOR_PRE

  44.     if _j==0:
  45.         COLOR = ["1BE61A","CBC826","C90075","CC7114","181AC0","17E3BD","1274C8","A25AC9"][randint(0,7)]
  46.         COLOR_PRE = COLOR
  47.     else:
  48.         while COLOR==COLOR_PRE:
  49.             COLOR = ["1BE61A","CBC826","C90075","CC7114","181AC0","17E3BD","1274C8","A25AC9"][randint(0,7)]
  50.         COLOR_PRE = COLOR

  51.     if _i > -1:

  52.         dx = _X - int(_A / 2 + 0.5)
  53.         dy = _Y - int(_Fs / 2 + 0.5)

  54.         T_EFT = 30
  55.         frames = int((T_EFT+2)*10 / _FD + 0.5)
  56.         rand = randint(3,6)
  57.         outline2 = gfGetOutline(GdiFont, _TXT, dx,dy)
  58.         for i in range(frames):

  59.             ts = _BT+_SK+5-T_EFT + i * _FD / 10

  60.             te = _BT+_SK+5-T_EFT + (i + 1) * _FD / 10

  61.             frame_pct = i / frames

  62.             outline = gfGetOutline(GdiFont, _TXT, 0, 0)

  63.             AssDraw(ctx, outline)

  64.             path_trans(ctx, paint_filter, (dx, dx, rand, _Fs, frame_pct))

  65.             text = ToAssDraw(ctx)

  66.             EFT = an(7) + pos(dx,dy)+color1(COLOR)+shad(0) + p(4)

  67.             ass_main(ASS_BUF, SubL(ts, te,20), EFT+blur(1.5)+alpha(100), text)

  68.             ass_main(ASS_BUF, SubL(te, _ET+_j*5,1), EFT+alpha(180)+blur(1.5), text)
  69.             ass_main(ASS_BUF, SubL(te, _ET+_j*5,20), EFT+alpha(230)+blur(5)+clip(4, outline2), text)

  70.         outline = gfGetOutline(GdiFont, _TXT, 0, 0)

  71.         ass_main(ASS_BUF, SubL(_BT+_j*5, _ET+_j*5,2),an(7)+ pos(dx,dy)+fad(0,150)+shad(1.5)+p(4), outline)

  72.     return (ASS_BUF,None)


  73. def paint_filter(x, y, param):

  74.     char_left, line_left, line_width, line_height, frame_pct = param

  75.     char_x = ceil(x + char_left * 8 - line_left * 8)

  76.     max_diff_x = cos(y / line_height * pi / 10 - frame_pct * pi * 5) * 20 * 8

  77.     max_diff_y = cos(char_x / line_width * pi / 10 - frame_pct * pi * 5) * 20 * 8

  78.     new_x = char_x - floor(max_diff_y * frame_pct)

  79.     new_y = y + floor(max_diff_y * frame_pct)

  80.     return new_x, new_y
复制代码
1

查看全部评分

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2014-4-15 21:08:49 |只看该作者
脚本比预想的简单好多啊

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2014-4-15 21:30:56 |只看该作者
milkyjing 发表于 2014-4-15 21:08
脚本比预想的简单好多啊

看見OP開頭的扭曲和噴漆 突發奇想用outline矢量變形做塗色

Super Moderator

{\clip\t(\clip)}∀.I.R.nesSub

Rank: 6Rank: 6

地板
发表于 2014-4-16 13:54:31 |只看该作者
本帖最后由 BurySakura 于 2014-4-16 14:06 编辑

矢量操作不用通过Cairo的。
我个人只是觉得再绕个Cairo有点多此一举。
于是我还没发现Cairo除了渐变、图片像素化文字以外有什么用(死。
呃,对的,可以矢量操作后像素化,嗯,这个想法不错(拖。
可惜外挂用不到,逐帧已经离我很远了(望天。
  1.             _ele = SYL_FON_VEC.split()
  2.             _mark = 0

  3.             for _i,_c in enumerate(_ele):
  4.                 if not _c in ['m','n','l','b','s','p','c']:
  5.                     if _mark == 0:
  6.                         x = int(_c)
  7.                         _mark = 1
  8.                     else:
  9.                         y   = int(_c)
  10.                         x_w = 23<6
  11.                         y_i = round((x+x_w)/4)
  12.                         _ele[_i] = str(y-y_i)
  13.                         _mark = 0

  14.             SYL_FON_VEC = ' '.join(_ele)
复制代码

Rank: 5Rank: 5

5#
发表于 2014-4-16 23:13:41 |只看该作者
这个涂鸦效果咱很喜欢~~~
但是脚本只能勉强看看.....

Rank: 4

6#
发表于 2014-4-23 15:11:34 |只看该作者
本帖最后由 Hintay 于 2014-4-23 15:17 编辑

不好意思,已经解决了,是true打错了
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-25 07:11

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH