TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua
标题:
[kawori] newgame_edfx
[打印本页]
作者:
面麻
时间:
2016-8-19 11:35:33
标题:
[kawori] newgame_edfx
lens_distortion 效果,是上次
模拟透镜畸变效果
的后续。它们之间的区别是实现方法不同,上回是用粒子,这个是用矢量绘图代码。由于粒子方法会导致变化时字呈现栅格状,即使填充好也会产生锯齿(雾),所以更推荐矢量绘图的方法。
这个矢量绘图代码的框架是 milkyjing 大哥写的,请参考
放大镜效果
。其中 ImageSurface() Context() 是 util.cairo 模块的函数。AssDraw() path_trans() surface_clear() 则在 util/cairo/CairoAssist.py 中。总之,只需要 from util.cairo import* 即可。
片源、工程、成品字幕、预览见
http://pan.baidu.com/s/1pL2E63x
密码: th7p
from tcaxPy import *
from util.cairo import *
def tcaxPy_Init():
global frameDur
global fontSize
global userFont
fontSize = GetVal(val_FontSize)
frameDur = 1000 / GetVal(val_FXFPS)
userFont = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), fontSize, GetVal(val_Spacing), GetVal(val_SpaceScale), DecRGB(GetVal(val_1C)), 0, 0)
# cairo
global ctx
vdWidth = GetVal(val_ResolutionX)
vdHeight = GetVal(val_ResolutionY)
surface = ImageSurface(FORMAT_ARGB32, vdWidth, vdHeight)
ctx = Context(surface)
def tcaxPy_Fin():
FinFont(userFont)
def lens_filter(x, y, param):
orgx, orgy, f, frames = param
px = x / 64
py = y / 64
rx = px - orgx
ry = py - orgy
rsq = rx ** 2 + ry ** 2
rx = rx * (1 + 0.00002 * (frames - 1 - f) / (frames - 1) * rsq)
ry = ry * (1 + 0.00005 * (frames - 1 - f) / (frames - 1) * rsq)
px = (rx + orgx) * 64
py = (ry + orgy) * 64
return (px, py)
def rand_filter(x, y, n):
rndx = randint(-n, n)
rndy = randint(-n, n)
return (x + rndx, y + rndy)
def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
ASS_BUF = [] # used for saving ASS FX lines
ux = _x
dx = (GetVal(val_ResolutionX) - GetVal(val_TextLength)[_i] * 2 - GetVal(val_OffsetX) * 2) + GetVal(val_TextLength)[_i]
orgx = GetVal(val_OffsetX) + GetVal(val_TextLength)[_i] / 2
orgy = GetVal(val_OffsetY) + fontSize / 2
if 17 <= _i <= 19:
ux += dx / 2
orgx += dx / 2
elif _i % 2:
ux += dx
orgx += dx
udx = ux - int(_a / 2 + 0.5)
udy = _y - int(fontSize / 2 + 0.5)
outline = TextOutlineDraw(userFont, _txt, udx, udy)
frames = 14
eft = an(7) + pos(0, 0) + blur(2)
for f in range(frames):
ts = _start - (frames - f) * frameDur / 10
te = ts + frameDur / 10
AssDraw(ctx, outline)
path_trans(ctx, lens_filter, (orgx, orgy, f, frames))
text = ToAssDraw(ctx)
ass_main(ASS_BUF, SubL(ts, te), eft, '{\p7} ' + text + ' {\p0}')
weft = pos(ux, _y) + blur(2)
ass_main(ASS_BUF, SubL(te, _start + _elapk), weft, _txt)
ass_main(ASS_BUF, SubL(_start + _elapk + _k, _end), weft, _txt)
surface_clear(ctx)
frames = int(10 * _k / frameDur + 0.5)
if 9 <= _i <= 16 or (_i == 8 and _j == _n - 1):
n = 200
else:
n = 100
for f in range(frames):
ts = _start + _elapk + f * frameDur / 10
te = ts + frameDur / 10
AssDraw(ctx, outline)
path_trans(ctx, rand_filter, n)
text = ToAssDraw(ctx)
ass_main(ASS_BUF, SubL(ts, te), eft, '{\p7} ' + text + ' {\p0}')
return (ASS_BUF, None)
复制代码
作者:
15757905197
时间:
2016-8-30 15:17:18
作者:
ABC不是菜
时间:
2016-9-11 20:45:46
辛苦了
作者:
cookiez
时间:
2017-12-31 00:08:32
非常感谢!
作者:
CMD
时间:
2018-1-30 14:16:46
谢谢楼主分享
作者:
weiyangacm
时间:
2018-7-3 23:14:04
厉害,学习了
作者:
Seekladoom
时间:
2021-12-19 02:27:51
本帖最后由 Seekladoom 于 2021-12-21 23:26 编辑
【透镜文字效果】TCAX Karaoke Effect 056.rar
(241.21 KB, 下载次数: 2188)
2021-12-21 23:26:45 上传
下载次数: 2188
1080P适配版本,精简了下代码:
from tcaxPy import *
from util.cairo import *
#请使用VSFilterMod以外的滤镜插件,如xy-vsfilter.dll预览字幕文件。
#因为此滤镜预览TCAX的cairo模块生成的【矢量文字】时会导致字幕错位和字号大小的显示出问题。
def tcaxPy_Init():
global frameDur
global fontSize
global userFont
fontSize = GetVal(val_FontSize)
frameDur = 1000 / GetVal(val_FXFPS)
userFont = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), fontSize, GetVal(val_Spacing), GetVal(val_SpaceScale), DecRGB(GetVal(val_1C)), 0, 0)
# cairo
global ctx
vdWidth = GetVal(val_ResolutionX)
vdHeight = GetVal(val_ResolutionY)
surface = ImageSurface(FORMAT_ARGB32, vdWidth, vdHeight)
ctx = Context(surface)
def tcaxPy_Fin():
FinFont(userFont)
#控制透镜文字位置
def lens_filter(x, y, param):
orgx, orgy, f, frames = param
px = x / 64
py = y / 64
rx = px - orgx
ry = py - orgy
rsq = rx ** 2 + ry ** 2
rx = rx * (1 + 0.00002 * (frames - 1 - f) / (frames - 1) * rsq)
ry = ry * (1 + 0.00005 * (frames - 1 - f) / (frames - 1) * rsq)
px = (rx + orgx) * 64
py = (ry + orgy) * 64
return (px, py)
#控制文字形变程度
def rand_filter(x, y, n):
rndx = randint(-n, n)
rndy = randint(-n, n)
return (x + rndx, y + rndy)#关键待改之处2:x、y
def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _K, _X, _Y, _A, _TXT):
ASS_BUF = [] # used for saving ASS FX lines
#自定义坐标参数
ux = _X
dx = GetVal(val_ResolutionX) - GetVal(val_TextLength)[_i]
orgx = GetVal(val_OffsetX) + GetVal(val_TextLength)[_i] / 2
orgy = GetVal(val_OffsetY) + fontSize / 2
#透镜转场效果:坐标计算
ux += dx / 2 #ux = ux + dx / 2
orgx += dx / 2 #orgx = orgx + dx / 2
udx = ux - int(_A / 2 + 0.5)
udy = _Y - int(fontSize / 2 + 0.5)
#透镜转场效果:矢量文字绘图代码
outline = TextOutlineDraw(userFont, _TXT, udx, udy)
frames = 14
eft = an(7) + pos(5, _Y + 980) + blur(2)
for f in range(frames):
ts = _BT - (frames - f) * frameDur / 10
te = ts + frameDur / 10
AssDraw(ctx, outline)
path_trans(ctx, lens_filter, (orgx, orgy, f, frames))
text = ToAssDraw(ctx)
ass_main(ASS_BUF, SubL(ts, te), eft + p(7), text)
#普通文本
weft = an(7) + pos(ux - 20, _Y + 980) + blur(2)
ass_main(ASS_BUF, SubL(te, _BT + _SK), weft, _TXT)
ass_main(ASS_BUF, SubL(_BT + _SK + _K, _ET), weft, _TXT)
#唱K文字绘图代码
frames = int(10 * _K / frameDur + 0.5)
n = 200
for f in range(frames):
ts = _BT + _SK + f * frameDur / 10
te = ts + frameDur / 10
AssDraw(ctx, outline)
path_trans(ctx, rand_filter, n)#关键待改之处1:长度【自适应问题】还没解决
text = ToAssDraw(ctx)
ass_main(ASS_BUF, SubL(ts, te), eft + p(7), text)
return (ASS_BUF, None)
复制代码
相关链接:
TCAX 时间计算及文字定位 (英文)
【具体位置可看键盘上的小键盘数字1-9的布局来强化记忆】
1.对齐方式 1,x = GetVal(val_OffsetX),y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
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, x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
4.对齐方式 4, x = GetVal(val_OffsetX), y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
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, x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
7.对齐方式 7, x = GetVal(val_OffsetX), y = GetVal(val_OffsetY)
8.对齐方式 8, x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index]) / 2, y = GetVal(val_OffsetY)
9.对齐方式 9, x = GetVal( val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_OffsetY)
复制代码
附件:
【透镜文字效果】TCAX Karaoke Effect 056.rar
(2021-12-21 23:26:45, 241.21 KB) / 下载次数 2188
http://tcax.org/forum.php?mod=attachment&aid=MjgzNXwxOWNjZmUxOXwxNzMyMjUyNTY4fDB8MA%3D%3D
作者:
Seekladoom
时间:
2021-12-21 02:29:06
本帖最后由 Seekladoom 于 2021-12-21 23:34 编辑
补充:
如需使用Aegisub预览TCAX的cairo模块生成的ASS特效字幕,请在
预览时
避免使用VSFilterMod滤镜,因为此滤镜预览时会导致字幕错位和字号大小的显示出问题。
请更换为xy-vsfilter进行预览即可,
压制
的话依然使用VSFilterMod即可。
没想到会因为这个问题被卡了两天多。。。_(:з」∠)_
运行TCC文件所在的文件目录
可以有中文但不宜过长
,否则
容易导致
TCAX
无法正常运行
。
欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/)
Powered by Discuz! X2