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

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

[已解决] 关于时间的设置问题,以文中py脚本为例子。 [复制链接]

Rank: 4

跳转到指定楼层
楼主
发表于 2011-8-8 17:32:04 |只看该作者 |正序浏览
好不容易,终于明白书写格式和一些特效书写了。
以下为在py脚本中的特效。

from tcaxPy import *

def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
      ASS_BUF = []
      TCS_BUF = []

      global _B
      _B = GetVal(val_FontSize)
      _1x = _x               
      _1y = _y            



      #存在效果
      BT = _start + _elapk
      ET =  _end
      MOVE= move(_1x + 447, _y, _x, _y, 0, 500)
      EFT = be(1) + blur(5) + bord(1) + color1('FFFFFF') + animation2(0, 500, 1.2, fry(720))
      ass_main(ASS_BUF, SubL(BT, ET), MOVE + EFT, _txt)

         
      return (ASS_BUF, TCS_BUF)
出来的效果,还行。但就是有时候,时间结束时,最后一个字还没旋转移动到我想要的位置。
问题:如何设置开始时间和结束时间?让每行字幕最后一个字都能正确移动到自己设定位置?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

7#
发表于 2011-8-8 22:14:21 |只看该作者
dmcnero 发表于 2011-8-8 21:31
from tcaxPy import *

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

大概sai的意思是:

#存在效果
      T = 500
      if(_end - _start - _elapk) * 10 < T:
           T = (_end - _start - _elapk) * 10
       BT = _start + _elapk
       ET =  _end
       MOVE= move(_x + 447, _y, _x, _y, 0, T)
       EFT = be(1) + blur(5) + bord(1) + color1('FFFFFF') + t2(0, T, 1.2, fry(720))
       ass_main(ASS_BUF, SubL(BT, ET, T), MOVE + EFT, _txt)

这样的吧....

修改的只有时间 (T) 而已...

p.s. 如果你把1.2去掉, 就可以使用t1了... (1.2表示加速度, 一般情况下用不着的...)

Rank: 4

6#
发表于 2011-8-8 21:31:16 |只看该作者
saiyaku 发表于 2011-8-8 20:16
如果你是复制粘贴的话 缩进是不对的

from tcaxPy import *

def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
      ASS_BUF = []
      TCS_BUF = []

      global _B
      _B = GetVal(val_FontSize)
      
      
               



      
      #存在效果
      T = 500
      if(_end - _start - _elapk) * 10 < T:
           T = (_end - _start - _elapk) * 10
           BT = _start + _elapk
           ET =  _end
           MOVE= move(_x + 447, _y, _x, _y, 0, T)
           EFT = be(1) + blur(5) + bord(1) + color1('FFFFFF') + t2(0, T, 1.2, fry(720))
           ass_main(ASS_BUF, SubL(BT, ET, T), MOVE + EFT, _txt)
      
      return (ASS_BUF, TCS_BUF)
应该没错吧?但是字幕只移动闪现了一下……我也不清楚是什么问题。

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

5#
发表于 2011-8-8 20:16:47 |只看该作者
dmcnero 发表于 2011-8-8 19:38
saiyaku的这种方法,报错了……没成功。(估计我又那儿没弄对……等下继续捣鼓一下)
milk ...

如果你是复制粘贴的话 缩进是不对的

Rank: 4

地板
发表于 2011-8-8 19:38:07 |只看该作者
saiyaku 发表于 2011-8-8 18:27
第一个 不明白你那个 _1x _1y 定着有什么用
move的代码 是加时间段的 (这个你要怪milk tag弄得这么麻烦。 ...

saiyaku的这种方法,报错了……没成功。(估计我又那儿没弄对……等下继续捣鼓一下)
milk的方法成功了,虽然有些小瑕疵。等下再慢慢修改下……
总之,真的很感谢两位的帮助。谢谢了~

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2011-8-8 18:40:05 |只看该作者
造成这问题的原因是全部文字的K时间之和通常是要等于_end - _start的(SYL文件时间做准确的情况下), 也就造成最后几个文字表现时间可能不够用, 比如, 你最后一个字的K时间只有20, 而你的展示要花50, 所以无法到位...

明白了原因, 解法就简单了...

通常的做法是, 对一句特效进行提前和延后, 提前进入, 延后退出 (而不是做到完全准确), 通常最好是提前10~20显示你要表现的那个文字, 否则观众可能跟不上...

也就是说 ts = _start - 50, 花40个时间去进行入场表现, 到 _start - 40的时候, 这个文字就已经完全静止下来, 准备他的卡拉OK特效了.
对结束也是这样, te = _end + 50...

具体情况还得具体分析...

-----------------------------------------

p.s. sai 居然比我先回了...进来的时候还是0 reply的说

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2011-8-8 18:27:25 |只看该作者
第一个 不明白你那个 _1x _1y 定着有什么用
move的代码 是加时间段的 (这个你要怪milk tag弄得这么麻烦。。。我写tag都是定默认值none 随便加不加的
一般用mov() 去掉个e 就是指时间轴范围里移动
animation 的问题 另外一贴说了

其实你的代码 不是看的很明白 大概考虑一下
先定个变量T 赋值500
T=500
500的地方改成 T
然后写个 判断
if (_end - _start - _elapk)*10 < T:
    T = (_end - _start - _elapk)*10
应该就可以了
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-11-22 07:03

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH