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

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

[完整特效] [kawori] newgame_edfx [复制链接]

Rank: 4

楼主
发表于 2021-12-19 02:27:51 |显示全部楼层
本帖最后由 Seekladoom 于 2021-12-21 23:26 编辑

【透镜文字效果】TCAX Karaoke Effect 056.rar (241.21 KB, 下载次数: 1142)
1080P适配版本,精简了下代码:
  1. from tcaxPy import *
  2. from util.cairo import *
  3. #请使用VSFilterMod以外的滤镜插件,如xy-vsfilter.dll预览字幕文件。
  4. #因为此滤镜预览TCAX的cairo模块生成的【矢量文字】时会导致字幕错位和字号大小的显示出问题。

  5. def tcaxPy_Init():
  6.     global frameDur
  7.     global fontSize
  8.     global userFont
  9.     fontSize = GetVal(val_FontSize)
  10.     frameDur = 1000 / GetVal(val_FXFPS)
  11.     userFont = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), fontSize, GetVal(val_Spacing), GetVal(val_SpaceScale), DecRGB(GetVal(val_1C)), 0, 0)
  12.     # cairo
  13.     global ctx
  14.     vdWidth  = GetVal(val_ResolutionX)
  15.     vdHeight = GetVal(val_ResolutionY)
  16.     surface = ImageSurface(FORMAT_ARGB32, vdWidth, vdHeight)
  17.     ctx = Context(surface)

  18. def tcaxPy_Fin():
  19.     FinFont(userFont)

  20. #控制透镜文字位置
  21. def lens_filter(x, y, param):
  22.     orgx, orgy, f, frames = param
  23.     px = x / 64
  24.     py = y / 64
  25.     rx = px - orgx
  26.     ry = py - orgy
  27.     rsq = rx ** 2 + ry ** 2
  28.     rx = rx * (1 + 0.00002 * (frames - 1 - f) / (frames - 1) * rsq)
  29.     ry = ry * (1 + 0.00005 * (frames - 1 - f) / (frames - 1) * rsq)
  30.     px = (rx + orgx) * 64
  31.     py = (ry + orgy) * 64
  32.     return (px, py)

  33. #控制文字形变程度
  34. def rand_filter(x, y, n):
  35.     rndx = randint(-n, n)
  36.     rndy = randint(-n, n)
  37.     return (x + rndx, y + rndy)#关键待改之处2:x、y
  38.    
  39. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _K, _X, _Y, _A, _TXT):
  40.     ASS_BUF  = []    # used for saving ASS FX lines
  41.    
  42.     #自定义坐标参数
  43.     ux = _X
  44.     dx = GetVal(val_ResolutionX) - GetVal(val_TextLength)[_i]
  45.     orgx = GetVal(val_OffsetX) + GetVal(val_TextLength)[_i] / 2
  46.     orgy = GetVal(val_OffsetY) + fontSize / 2
  47.      
  48.     #透镜转场效果:坐标计算
  49.     ux += dx / 2    #ux = ux + dx / 2
  50.     orgx += dx / 2  #orgx = orgx + dx / 2
  51.     udx = ux - int(_A / 2 + 0.5)
  52.     udy = _Y - int(fontSize / 2 + 0.5)
  53.    
  54.     #透镜转场效果:矢量文字绘图代码
  55.     outline = TextOutlineDraw(userFont, _TXT, udx, udy)
  56.     frames = 14
  57.     eft = an(7) + pos(5, _Y + 980) + blur(2)
  58.     for f in range(frames):
  59.         ts = _BT - (frames - f)  * frameDur / 10
  60.         te = ts + frameDur / 10
  61.         AssDraw(ctx, outline)
  62.         path_trans(ctx, lens_filter, (orgx, orgy, f, frames))
  63.         text = ToAssDraw(ctx)
  64.         ass_main(ASS_BUF, SubL(ts, te), eft + p(7), text)
  65.         
  66.     #普通文本
  67.     weft = an(7) + pos(ux - 20, _Y + 980) + blur(2)
  68.     ass_main(ASS_BUF, SubL(te, _BT + _SK), weft, _TXT)
  69.     ass_main(ASS_BUF, SubL(_BT + _SK + _K, _ET), weft, _TXT)
  70.    
  71.     #唱K文字绘图代码
  72.     frames = int(10 * _K / frameDur + 0.5)
  73.     n = 200
  74.     for f in range(frames):
  75.         ts = _BT + _SK + f * frameDur / 10
  76.         te = ts + frameDur / 10
  77.         AssDraw(ctx, outline)
  78.         path_trans(ctx, rand_filter, n)#关键待改之处1:长度【自适应问题】还没解决
  79.         text = ToAssDraw(ctx)
  80.         ass_main(ASS_BUF, SubL(ts, te), eft + p(7), text)

  81.     return (ASS_BUF, None)
复制代码

相关链接:
TCAX 时间计算及文字定位 (英文)
【具体位置可看键盘上的小键盘数字1-9的布局来强化记忆】
  1. 1.对齐方式 1,x = GetVal(val_OffsetX),y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
  2. 2.对齐方式 2,x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength) [line_index]) / 2, y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
  3. 3.对齐方式 3, x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
  4. 4.对齐方式 4, x = GetVal(val_OffsetX), y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
  5. 5.对齐方式 5, x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index]) / 2, y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
  6. 6.对齐方式 6, x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
  7. 7.对齐方式 7, x = GetVal(val_OffsetX), y = GetVal(val_OffsetY)
  8. 8.对齐方式 8, x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index]) / 2, y = GetVal(val_OffsetY)
  9. 9.对齐方式 9, x = GetVal( val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_OffsetY)
复制代码

Rank: 4

沙发
发表于 2021-12-21 02:29:06 |显示全部楼层
本帖最后由 Seekladoom 于 2021-12-21 23:34 编辑

补充:
如需使用Aegisub预览TCAX的cairo模块生成的ASS特效字幕,请在预览时避免使用VSFilterMod滤镜,因为此滤镜预览时会导致字幕错位和字号大小的显示出问题。
请更换为xy-vsfilter进行预览即可,压制的话依然使用VSFilterMod即可。

没想到会因为这个问题被卡了两天多。。。_(:з」∠)_

运行TCC文件所在的文件目录可以有中文但不宜过长,否则容易导致TCAX无法正常运行
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-3 14:28

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH