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

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

[已解决] 麻烦大人们帮我看看这个代码哪里有问题好么 [复制链接]

Rank: 4

跳转到指定楼层
楼主
发表于 2013-5-20 21:51:12 |只看该作者 |倒序浏览
本帖最后由 yyxxlc 于 2013-5-21 00:07 编辑

在刚刚学ass的时候在网上看到一个大人很早前发的一个教大家做基础字幕的视频。以前不知道TCAX的时候一直觉得他做的特效好特别,所以一直想模仿做一个出来,但是直接用ass一个一个的写实在是太难了.....(当然可能是我レベル太低了)  最近开始慢慢学tcax脚本之后 今天试着做了一个 虽然生成出来了但是感觉没有原版的这么行云流水的,总觉得哪里怪怪的....希望大大们给我指点一下....

这是那位大人做的原视频地址:http://v.youku.com/v_show/id_XMTk1NjUxMDMy.html   (从07:25 开始的前两句效果)

我写的(.py文件)
  1. ################################################################################
  2. ### description:
  3. ### rotation fry(90) to fry(0), with fade in


  4. from tcaxPy import *


  5. def tcaxPy_Init():
  6.     global _FD                              # frame duration, in millisecond
  7.     global _Blur
  8.     global _Fs
  9.     _FD = 1000 / GetVal(val_FXFPS)
  10.     _Blur = GetVal(val_Blur)
  11.     _Fs = GetVal(val_FontSize)


  12. def tcaxPy_Fin():
  13.     pass


  14. time_gap = 1    # you can change this value to 0, or 2 or any other number
  15. time_fac = 1    # you can change this value to 0, or 2 or any other number

  16. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  17.     ASS_BUF  = []        # used for saving ASS FX lines
  18.     TCAS_BUF = []        # used for saving TCAS FX raw data

  19.     duration = 10 * _FD  
  20.     ts = _start + _elapk + _k                 # start time, in semi-second
  21.     te = _end - (_n - _j - 1) * time_fac * _FD / 10 + time_gap * _FD / 10       # end time, in semi-second
  22.     EFT = pos(_x, _y)                                                            # ASS events
  23.     if _Blur > 0:
  24.         EFT += blur(_Blur)
  25.     ass_main(ASS_BUF, SubL(ts, te, 5), EFT, _txt)                               # store the effect

  26.     ts = _start + _elapk
  27.     te = _start + _elapk + _k
  28.     MOVE = move(_x ,_y + _Fs + 6, _x , _y , 0 ,duration)
  29.     eft1 = frx(-180) +t(0, duration / 3,1.2,frx(0))
  30.     eft2 = fsc(150,150) + t( duration / 3,_start + _elapk + _k, 0.6, fsc(100,100))
  31.   
  32.     EFT = MOVE + eft1 + eft2
  33.     if _Blur > 0:
  34.         EFT += blur(_Blur)
  35.     ass_main(ASS_BUF, SubL(ts, te), EFT, _txt)

  36.     return (ASS_BUF, TCAS_BUF)
复制代码
(感觉至少有两个问题:1、我觉得我设置的字幕第一下翻上来的速度已经够快了,但是总觉得那位大神做的那个刷的一下更快更流畅更漂亮些,几乎看不出有翻过来的感觉,这是为什么 2、字体翻上来之后从扩大150%回到100%,我觉得理论上应该当缩小会100%就回到正常的(_x,_y)的位置上,但是生成的ass的效果,在缩回100%之后,明显有一下停顿,然后好像有往后移了一点,是我时间哪里设的不正确吗,但是我检查了都是前一个效果结束后一个开始这样的啊....)

3、还有一个:为什么第一句完全没效果,从第二句才开始的...

当然也有可能是我哪里压根想错了...也希望大大们可以狠狠的指出来,我一定会重新研究的!

Rank: 4

沙发
发表于 2013-5-20 22:58:36 |只看该作者
視頻中每個字是繞著字的下端旋轉的,這樣的話就不需要用到move了,你可以直接org(_x,_y+_Fs/2)把中心點設在字的下端,然後再t(frx)旋轉。還有t(t1,t2)是相對于這個字的起始時間的,差不多就是t的效果是從ts+t1到ts+t2的。

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2013-5-20 23:11:41 |只看该作者
主要问题应该在于an的设置上, TCAX的默认Style, an使用的是5 (因为通常情况下, 这种定位方式的效果最常用), 该Style与TCC中
指定的字幕放置方式是不同概念. 看了下原视频, 他使用的是an2, 所以你需要对应的修改.

如果要换定位方式, 对于an2,  _x, _y  可以换成
dx = _x
dy = _y - int(_Fs / 2 + 0.5)


"第一句完全没效果"是指第35行代码, 不产生效果么? 这种情况下, 你可以使用
调试机制,
在35行附近加上
print(ts)
print(te)
Pause()

(执行脚本的时候, 就会暂停, 按回车继续, 看看是不是时间设置出了问题...

Rank: 4

地板
发表于 2013-5-20 23:13:39 |只看该作者
四味线 发表于 2013-5-20 22:58
視頻中每個字是繞著字的下端旋轉的,這樣的話就不需要用到move了,你可以直接org(_x,_y+_Fs/2)把中心點設在 ...

谢谢你四味线大人!因为字幕刚刚才开始学 ass方面的基础并不是很牢固,org虽然知道有这么一个函数但是一直不知道它具体可以干什么,谢谢您指出来..我会再多花时间研究的!

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

5#
发表于 2013-5-20 23:15:23 |只看该作者
yyxxlc 发表于 2013-5-20 23:13
谢谢你四味线大人!因为字幕刚刚才开始学 ass方面的基础并不是很牢固,org虽然知道有这么一个函数但是一直 ...


我都忘了... 还可以用org...

Rank: 4

6#
发表于 2013-5-20 23:30:52 |只看该作者
milkyjing 发表于 2013-5-20 23:11
主要问题应该在于an的设置上, TCAX的默认Style, an使用的是5 (因为通常情况下, 这种定位方式的效果最常用), ...

看内置脚本代码的时候的确看到有些脚本把an给改了,但是当时没有太关心,原来这个这么重要呀!

第一句没有效果 并不是35行那巴拉巴拉的问题。我的意思是在生成ass之后发现 歌词的第一句话直接就全部出来了(就像完全没设效果的那样子)完全没有我设置的这种一个字一个字跳出来的效果 这种效果是从第二句话开始的。。。。其实以前在生成tcax内置效果的时候也有这样的问题...不知道是本来就是这样还是我哪里设置不对呢??

Rank: 4

7#
发表于 2013-5-20 23:38:05 |只看该作者
  1.     eft1 = frx(-180) +t(0, duration / 3,1.2,frx(0))
  2.     eft2 = fsc(150,150) + t( duration / 3,_start + _elapk + _k, 0.6, fsc(100,100))
复制代码
tcax的t()不是直接加代码么?
如果这样用的话不该是t1() t2()么?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

8#
发表于 2013-5-20 23:40:04 |只看该作者
yyxxlc 发表于 2013-5-20 23:30
看内置脚本代码的时候的确看到有些脚本把an给改了,但是当时没有太关心,原来这个这么重要呀!

第一句没 ...

应该是时间计算的问题吧...

修改TCC, 只生成第一句, 用我前面提到的方法, 看看数值是否正确... 如果没问题, 打开生成的ASS, 检查下时间

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

9#
发表于 2013-5-20 23:41:07 |只看该作者
lilight 发表于 2013-5-20 23:38
tcax的t()不是直接加代码么?
如果这样用的话不该是t1() t2()么?


现在的t()可以接受3种形式参数了, t(code), t(t1, t2, code), t(t1, t2, a, code)

t1, t2, 是遗留产物... (Legacy Code)

Rank: 4

10#
发表于 2013-5-20 23:43:33 |只看该作者
milkyjing 发表于 2013-5-20 23:41
现在的t()可以接受3种形式参数了, t(code), t(t1, t2, code), t(t1, t2, a, code)

t1, t2, 是遗留产物.. ...

一直在用t1,t2 。。

Rank: 4

11#
发表于 2023-3-19 06:42:44 |只看该作者
长见识了。谢谢!
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-20 08:21

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH