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

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

[ASS特效教程入门系列] 三. 曲线轨迹的简单应用及逐帧特效 [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2011-11-1 20:49:46 |显示全部楼层 |倒序浏览
说明

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

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

  3.     ASS_BUF  = []        # 保存ASS特效
  4.     TCAS_BUF = []        # 保存TCAS特效

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

  6.     ts = _start + _elapk - 20       # 效果开始时间
  7.     _Fs = GetVal(val_FontSize)      # 字体大小
  8.     EFT1 = alpha1(HexToDec('AA')) + alpha3(HexToDec('AA')) + color1('FFFFFF') + \
  9.             bord(5) + blur(5) + t(0, 100, bord(3) + blur(3)) + fad(0, 200)
  10.     EFT2 = alpha1(HexToDec('AA')) + alpha3(HexToDec('00')) + color1('FFFFFF') + color3('FFFFFF') + \
  11.             bord(3) + blur(3) + t(0, 100, bord(1) + blur(1) + alpha3(HexToDec('44'))) + fad(0, 200)
  12.     num = 60    # 曲线上点的个数
  13.     xs = _x + randint(-100, 100)    # 开始点
  14.     ys = _y + randint(-60, 20)
  15.     xc1 = xs + randint(-50, 50)     # 控制点1
  16.     yc1 = ys + randint(-50, 50)
  17.     xc2 = xc1 + randint(-40, 40)    # 控制点2
  18.     yc2 = yc1 + randint(-40, 40)
  19.     xe = _x     # 结束点
  20.     ye = _y
  21.     points = Bezier3(num, xs, ys, xe, ye, xc1, yc1, xc2, yc2)   # 3阶贝塞尔曲线, 控制点的生成是重点以及难点
  22.     for i in range(num):
  23.         POS = pos(points[i][0], points[i][1])   # 获取曲线上点坐标
  24.         EFT = POS + EFT1 + color3('5A3AFF')
  25.         ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
  26.         EFT = POS + EFT2
  27.         ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())

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

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

在理解了上述代码的基础上, 可以进一步学习具体的使用方法.
saiyaku写了不少具体效果, 可以对着预览视频, 找到相应的脚本.

视频 http://www.tcax.org/forum.php?mod=viewthread&tid=44
代码 http://www.tcax.org/forum.php?mo ... typeid&typeid=3


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


test_bezier.zip

3.26 KB, 下载次数: 5581

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2012-5-17 12:49:15 |显示全部楼层
usfsaf 发表于 2012-5-17 11:22
看不懂,支持,写字幕特效简直是疯狂的自虐行为...


  那你写还是不写 233

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2013-2-1 21:33:05 |显示全部楼层
爱雪音MiKu 发表于 2013-2-1 17:11
啊呜。。那个。。问一下。。控制点可以生成很多个吗0.0?【如果就2个控制点貌似不够用0.0】 ...

常用的是2階, 3階貝塞爾曲線 (分別有1個控制點和2個控制點), 多了曲線形狀反而不好弄.

還有一個n階貝塞爾曲線函數. 中間控制點是隨機生成的, 不是很推薦使用.

如果想進階, 可以考慮UCBS, 參考 http://www.tcax.org/forum.php?mod=viewthread&tid=465

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

地板
发表于 2013-2-1 22:22:40 |显示全部楼层
爱雪音MiKu 发表于 2013-2-1 22:10
嘎哦。。0.0是么。。对了。。乃们大大不是可以用貝塞爾曲線绘制图形么0.0?。。。难道就是用UCBS?。。如 ...

ASS繪圖用的是3階貝塞爾...
貝塞爾曲線與UCBS是兩種不同的曲線...

我猜測, 你應該是以為只有兩個控制點畫不出圖形? 實際上你用過ASSDraw就知道了...

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

5#
发表于 2013-2-1 23:09:55 |显示全部楼层
爱雪音MiKu 发表于 2013-2-1 22:44
呜咕。。。V。。可是2个控制点画的图形会很少吧0.0。。。ASSDraw如果要画一个雪花也需要创建很多个点然后 ...

花點功夫能畫出很多神奇的東西.

http://www.tcax.org/forum.php?mod=viewthread&tid=450

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

6#
发表于 2013-2-2 21:07:37 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 21:03
呜咕。。。。还在的说。。命名也对的

你要看錯誤提示, (已經是不同的提示了.)

如果你的py腳本裡面沒有定義tcaxPy_Init函數, 那麼tcc中 <tcaxpy init> 要相應設置成false

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

7#
发表于 2013-2-2 21:18:55 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 21:16
呜咕。。新的问题0.0。。。貌似代码又错了(T.T)


第38行, pos是個函數, 不是一個數組, pos[...] 用法是錯誤的, 應該改成 pos()...

p.s. 編輯腳本, 建議使用Notepad2, 或IDLE等工具, 新手不建議使用記事本- -
p.s.2. 磨刀不誤砍柴工...看看Python的基本語法是有益的.

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

8#
发表于 2013-2-2 21:31:26 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 21:27
啊呜。。这样也不对呢(T.T)


pos函數接收兩個參數, x, y, 你給了3個參數了..

話說, 這麼問答效率有點低啊... 雖然我們歡迎多提問題, 多交流. 不過, LZ可以嘗試自己讀下出錯提示.

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

9#
发表于 2013-2-2 21:38:44 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 21:36
呜咕。。这样级可以了。。但是第二条曲线没有生成出来0.0。。。。不是把两条线的位置都给了吗。。为什么 ...
  1.               POS = POS1 + POS2   # 获取曲线上点坐标
  2.               EFT = POS + EFT1 + color3('5A3AFF')
  3.               ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
  4.               EFT = POS + EFT2
  5.               ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
复制代码
POS = POS1 + POS2 這行代碼達不到你的預期, 你可以說下你通過這行代碼想要達成什麼樣的效果?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

10#
发表于 2013-2-2 21:47:38 |显示全部楼层
嘛, 既然代碼已經能夠執行了, LZ就隨便玩玩唄... 多摸索, 收穫大...
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-2 23:37

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH