[ASS特效教程入门系列] 二. ASS Mask特效的制作 - 相关教程 - TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua - Powered by Discuz!

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

 找回密码
 加入社区
查看: 7065|回复: 22

[ASS特效教程入门系列] 二. ASS Mask特效的制作 [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2011-11-1 17:59:17 |显示全部楼层
说明

本系列教程旨在更好的引导大家使用TCAX制作一些特效, 有空我会逐渐补上我所了解的一些特效的制作.
为加深大家对教程代码的理解, 附上了可以直接执行的完整工程, 建议下载并实际操作一下.
  1. from tcaxPy import *

  2. def tcaxPy_Init():              # 主要作用是初始化一个字体
  3.     global _Fs                  # 字体大小
  4.     global _Font                # 我们将要创建的字体
  5.     _Fs = GetVal(val_FontSize)  # 获取字体大小
  6.     fontFileName = GetVal(val_FontFileName)     # 获取字体文件名
  7.     faceID = GetVal(val_FaceID)                 # 获取字体Face序号
  8.     spacing = GetVal(val_Spacing)               # 获取文字间隔
  9.     spaceScale = GetVal(val_SpaceScale)         # 获取空格缩放比率
  10.     color = MakeRGB(255, 255, 255)              # 字体颜色
  11.     bord = 0                    # 字体边框厚度
  12.     isOutline = False           # 只有边框
  13.     _Font = InitFont(fontFileName, faceID, _Fs, spacing, spaceScale, color, bord, isOutline)        # 创建字体

  14. def tcaxPy_Fin():
  15.     FinFont(_Font)   # 销毁字体 释放内存

  16. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):

  17.     ASS_BUF  = []        # 保存ASS特效
  18.     TCAS_BUF = []        # 保存TCAS特效

  19.     ##### 主要特效编写操作 #####

  20.     # ASS Mask特效固定代码框架 开始
  21.     dx = _x - int(_a / 2 + 0.5)
  22.     dy = _y - int(_Fs / 2 + 0.5)
  23.     outline = TextOutlineDraw(_Font, _txt, dx, dy)      # 获取该文字的ASS Draw绘图命令字符串
  24.     ass_main(ASS_BUF, SubL(_start, _end), move(_x - 50, _y, _x, _y, 0, 5 * (_end - _start)) + clip(7, outline), _txt)       # clip(7, outline) 即为ASS Mask
  25.     # ASS Mask特效固定代码框架 结束

  26.     ##### 将结果返回给tcax进行处理 #####

  27.     return (ASS_BUF, TCAS_BUF)
复制代码
后记

在理解了上述代码的基础上, 可以进一步学习具体的使用方法.
X大用Mask做的特效还是比较多的, 下面这个就是其中之一, 我移植到TCAX上来的...
一个具体例子 http://www.tcax.org/forum.php?mod=viewthread&tid=100


p.s. 如有疑问, 请直接跟帖...


------------------ 2012-01-19 14:31 ---------------------

如果TCC文件的spacing设置不是0, 则, 关于dx的计算需要进行如下修改
  1. dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)
复制代码

test_text_mask.zip

3.31 KB, 下载次数: 1178

Moderator

youkaze

Rank: 5Rank: 5

发表于 2011-11-1 18:06:51 |显示全部楼层
顶起 下载试试

Rank: 4

发表于 2012-1-14 10:16:34 |显示全部楼层
强烈支持,谢谢分享...

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-1-14 12:59:40 |显示全部楼层
殷六侠 发表于 2012-1-14 10:16
强烈支持,谢谢分享...


说实话, 我怀疑这个账号为BOT...

Rank: 5Rank: 5

发表于 2012-2-12 22:00:53 |显示全部楼层
本帖最后由 six 于 2012-2-12 22:09 编辑

报告M大,问题多多~~
    首先,关于MASK,简单理解就是按文字形态进行clip,然后移动文字来形成的一种动态效果?
    针对示例的py文件,tcc的边框设定是棕色,运行后为什么会经常有的字的经常也有一部分变成棕色(字体本是白色);
    bord = 0
    isOutline = False    #只有边框
    您给的Py脚本里,在tcaxPy_Init()里是这样写的,将False修改为True,或者修改bord的数值,重新运行后感觉不到效果上的差别;
    将tcc文件里的bord值修改后,效果会有明显差别,白色主上的棕色部分变大了,这大概是clip和预设的边框不一致所致?
但是比如我将tcc和py里的边框都设为5,不管isOutline = False / True,运行的效果都是白色字体上有部分的棕色效果,这种现象……(spacing已为0).
    还有那个color = MakeRGB(255, 255, 255) 有什么作用,修改数值看不出来影响了哪里、

    暂时好像就这么多了,入行不久,请多指教~

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-13 00:19:43 |显示全部楼层
six 发表于 2012-2-12 22:00
报告M大,问题多多~~
    首先,关于MASK,简单理解就是按文字形态进行clip,然后移动文字来形成的一种动态 ...
首先,关于MASK,简单理解就是按文字形态进行clip,然后移动文字来形成的一种动态效果?

基本上是这样的. 不过在ASS里通常不好移动mask, 所以一般移动的是被mask的物体.
针对示例的py文件,tcc的边框设定是棕色,运行后为什么会经常有的字的经常也有一部分变成棕色(字体本是白色)

你好像还没太理解那代码的效果, 如果不加mask, 你将看到一个带有棕色边框的文字在移动, 但加了mask, 你就只能看到mask区域中的文字, 因为文字是移动的, 所以在mask区域内, 可能既有边框也有主体 (结果就是你所看到的, "文字"内部-->也即mask区域, 有棕色出现.
bord = 0
    isOutline = False    #只有边框
    您给的Py脚本里,在tcaxPy_Init()里是这样写的,将False修改为True,或者修改bord的数值,重新运行后感觉不到效果上的差别;

确实不会有差别...那些设置对做像素字特效才有影响... (mask暂时没加那功能)
将tcc文件里的bord值修改后,效果会有明显差别,白色主上的棕色部分变大了,这大概是clip和预设的边框不一致所致?

bord的值不会影响mask(也即你能看到的区域), 但会影响被mask的物体(也即_txt-->文字), 关于最终效果, 前面也提到了.
但是比如我将tcc和py里的边框都设为5,不管isOutline = False / True,运行的效果都是白色字体上有部分的棕色效果,这种现象……(spacing已为0).

前面都有提到了..
还有那个color = MakeRGB(255, 255, 255) 有什么作用,修改数值看不出来影响了哪里

对mask没影响, 做像素字时才有用...
暂时好像就这么多了,入行不久,请多指教~

加油...

Rank: 5Rank: 5

发表于 2012-2-13 09:26:33 |显示全部楼层
milkyjing 发表于 2012-2-13 00:19
基本上是这样的. 不过在ASS里通常不好移动mask, 所以一般移动的是被mask的物体.

你好像还没太理解那代 ...

关于白色字体上的棕色,移动中的我能理解,我指的是一行的效果完全运行之后,还能在MAKS区域看到零零散散的棕色,有点儿像您最近群发的血迹那个特效的简化版(当然没那么高端洋气~)

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-13 15:48:19 |显示全部楼层
six 发表于 2012-2-13 09:26
关于白色字体上的棕色,移动中的我能理解,我指的是一行的效果完全运行之后,还能在MAKS区域看到零零散散 ...

贴张图吧……

Rank: 5Rank: 5

发表于 2012-2-14 09:41:02 |显示全部楼层

1

1

2

2


图补上了~

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-14 09:45:30 |显示全部楼层
six 发表于 2012-2-14 09:41
图补上了~

你是换过字体的吧?

感觉可能的原因是那个定位问题..

Rank: 5Rank: 5

发表于 2012-2-14 09:50:27 |显示全部楼层
本帖最后由 six 于 2012-2-14 09:51 编辑
milkyjing 发表于 2012-2-14 09:45
你是换过字体的吧?

感觉可能的原因是那个定位问题..


换了啊,那个字体包里好像没有。

改字体会有影响?大小边框啥的都没动。

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-14 10:09:14 |显示全部楼层
six 发表于 2012-2-14 09:50
换了啊,那个字体包里好像没有。

改字体会有影响?大小边框啥的都没动。 ...

因为这个定位问题(Positioning Issue)太过神奇了, 问题本身的存在是多方面的 (所以尝试修复过多次也一直没好方法), 但对于一部分字体, 这个问题会消失....

最切合实际的办法是手工调整定位 (增加修正参数), 或者通过一些别的手段绕过...

不过, 通常制作Mask特效, 我们不会拿文字去mask, 一般是 图形 (圆, 方形)等, 就不会有上述这种情况出现了(上面那情况是非直接可控的-->需要手工修正, 但利用图形, 就可以确实得填满整个mask)....

嘛, 表达的不是很清楚... (过于理论了), 要在实践中去体会的...

p.s. 可以和四月君交流下心得...

Rank: 5Rank: 5

发表于 2012-2-14 10:12:45 |显示全部楼层
milkyjing 发表于 2012-2-14 10:09
因为这个定位问题(Positioning Issue)太过神奇了, 问题本身的存在是多方面的 (所以尝试修复过多次也一直 ...

哦了,没事了,其实是种实际出来的伪立体的效果也挺好看的~

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-14 10:15:16 |显示全部楼层
你把字体改回 DFMincho-UB.ttc, 或DFMincho-UB_0.ttc 试试?

这个字体, 字体包里应该有的...

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-2-14 10:17:34 |显示全部楼层
six 发表于 2012-2-14 10:12
哦了,没事了,其实是种实际出来的伪立体的效果也挺好看的~

其实可以制作更真实的立体效果的...

目前理论知识及工具都具备了, 打算回校后弄几个例子..

Rank: 5Rank: 5

发表于 2012-3-3 02:14:17 |显示全部楼层
也就是1.19里已经不存在9楼的那种问题了?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-3-3 11:34:29 |显示全部楼层
six 发表于 2012-3-3 02:14
也就是1.19里已经不存在9楼的那种问题了?


9楼是定位问题, 该问题依然存在, 目前只有下面这个蹩脚的解决方法 http://www.tcax.org/forum.php?mod=viewthread&tid=274

119修复的是字体大小问题, 详情可见 http://www.tcax.org/forum.php?mod=viewthread&tid=279


以下为定位问题测试用例

100 with AGENCYR.TTF

100 with AGENCYR.TTF


118 with AGENCYR.TTF

118 with AGENCYR.TTF


119 with AGENCYR.TTF

119 with AGENCYR.TTF


100 with CONSTAN.TTF

100 with CONSTAN.TTF


118 with CONSTAN.TTF

118 with CONSTAN.TTF


119 with

119 with


font_size_issue_test_case.rar

147.42 KB, 下载次数: 1033

测试用例

Rank: 6Rank: 6

发表于 2016-1-26 10:04:17 |显示全部楼层
论坛里有clip的使用教程吗?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2016-2-12 22:33:25 |显示全部楼层
アクマ 发表于 2016-1-26 10:04
论坛里有clip的使用教程吗?

木有,你寫一個

正式会员

御坂、凛

Rank: 4

发表于 2016-2-14 09:23:38 |显示全部楼层
アクマ 发表于 2016-1-26 10:04
论坛里有clip的使用教程吗?

python的话看到这个,不知道是不是你想要的

↑↑原文链接↑↑

附上Aegisub标签说明
矩形蒙板 Clip(rectangle)
\clip (<x1>, <y1>, <x2>, <y2>) 【只有矩形内的内容被显示】
*默认为矩形,以 (x1, y1), (x2, y2) 分别为对角线端点坐标。
e.g. \clip (0, 0, 704, 245)

[扩]●矩形蒙板 Clip(rectangle)
\iclip (<x1>, <y1>, <x2>, <y2>) 【只有矩形内的内容不被显示】
*默认为矩形,以(x1, y1), (x2, y2) 分别为对角线端点坐标。
*iclip的影响效果是整行、无视代码放置位置的。
e.g. \iclip (0, 0, 704, 245)

●图形蒙板 Clip (vector drawing)
\clip (<drawing commands>)
\clip (<scale>, <drawing commands>)
[扩]\iclip(<drawing commands>)
[扩]\iclip(<scale>, <drawing commands>)
*iclip的影响效果是整行、无视代码放置位置的。
*代码使用方法、效果与Clip (rectangle) 一致,请结合Drawing tags自己探索。
e.g. \clip (1, m 50 0 b 100 0 100 100 50 100 b 0 100 0 0 50 0)
【绘图1:1,显示圆内字幕】

您需要登录后才可以回帖 登录 | 加入社区

GitHub|TCAX 主页

GMT+8, 2018-8-16 14:06

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH