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

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

常用自定义函数AutoTags及其变种的介绍 [复制链接]

Rank: 4

跳转到指定楼层
楼主
发表于 2016-2-8 10:53:37 |显示全部楼层 |倒序浏览
AutoTags函数用于在持续时间段内循环两个(组)特效标签,如blur数值来回变化,造成闪烁效果。在很多脚本中都很常见。想要使用这个函数,首先需要先在code行声明该函数
  1. function AutoTags(Intervalo,Dato1,Dato2)            local RESULTADO=""     local SUERTE = 0     local CONTADOR = 0     local ARREGLO = 0                           local count = math.ceil(line.duration/Intervalo)                         ARREGLO = {Dato1,Dato2}                            for i = 1, count do               CONTADOR = i                            if Dato1 and Dato2 then                     if  CONTADOR%2 ==0 then                                    SUERTE = ARREGLO[1]                                            else                                    SUERTE = ARREGLO[2]                            end                    end                     RESULTADO = RESULTADO .."\\t(" ..(i-1)*Intervalo.. "," ..i*Intervalo.. ",\\" ..SUERTE..")"..""                      end                 return RESULTADO                                     end
复制代码

0.png
再在template中调用
原始形式的AutoTags函数用法:
AutoTags(变化用时,"标签1","标签2")(图2)

1.png


生成的效果如图3

2.png
图 3

可观察到,在整个字的持续时间内,生成了blur2->blur0->blur2的往复变化
如果要使用两组标签间的往复变化,注意应额外使用一个\,如AutoTags(500,"blur2\\fs50","blur0\\fs30").
原始形式的AutoTags介绍到这里。
下面介绍几种由不同需求产生的变种AutoTags
变种1
  1. function AutoTags1(Intervalo,Dato1,Dato2,Pause)  local RESULTADO=""  local SUERTE = 0  local CONTADOR = 0  local ARREGLO = 0  local count = math.ceil(line.duration/(Intervalo+Pause))  ARREGLO = {Dato1,Dato2}  for i = 1, count do          CONTADOR = i          if Dato1 and Dato2 then                  if  CONTADOR%2 ==0 then                  SUERTE = ARREGLO[1]                  else                  SUERTE = ARREGLO[2]                  end          end          RESULTADO = RESULTADO .."\\t(" ..(i-1)*(Intervalo+Pause).. "," ..i*Intervalo+Pause*(i-1).. ",\\" ..SUERTE..")"..""  end  return RESULTADO  end
复制代码

4.png 用于实现带有暂停时间的往复变化效果
多出的第四个参数Pause为暂停时间(ms)
AutoTags1(变化用时,"标签1","标签2",暂停时间)
变种2
  1. function AutoTags2(Intervalo,Dato1,Dato2,Delay)            local RESULTADO=""     local SUERTE = 0     local CONTADOR = 0      local ARREGLO = Layer                            local count = math.ceil(line.duration/Intervalo)                                         ARREGLO = {Dato1,Dato2}                                          for i = 1, count do               CONTADOR = i                                            if Dato1 and Dato2 then                                             if  CONTADOR%2 ==0 then                                                                    SUERTE = ARREGLO[1]                                            else                                                                    SUERTE = ARREGLO[2]                                            end                            end                                                 RESULTADO = RESULTADO .."\\t(" ..(i-1)*Intervalo+Delay.. "," ..i*Intervalo+Delay.. ",\\" ..SUERTE.. ")"..""                                  end                              return RESULTADO                                             end
复制代码
用于实现带有延迟(相对于行开始时间延后)的往复变化效果
5.png 例如,需要从行开始1s后才需要变化效果
AutoTags2(500,"标签1","标签2",1000)
变种3
  1. function AutoTags3(Intervalo1,Intervalo2,Dato1,Dato2)  local RESULTADO=""                 local SUERTE = 0                 local CONTADOR = 0                 local ARREGLO = 0                               local count = 2*math.ceil(line.duration/(Intervalo1+Intervalo2))            local d=math.ceil((Intervalo2-Intervalo1)/count)  local t={}  ARREGLO = {Dato1,Dato2}                                                      for i = 1, count do                                   CONTADOR = i  t[1]=0  t[i+1]=t[i]+Intervalo1+(i-1)*d  if Dato1 and Dato2 then            if  CONTADOR%2 ==0 then                                                                                        SUERTE = ARREGLO[1]            else                                                                                        SUERTE = ARREGLO[2]                                                        end            end                                                             RESULTADO = RESULTADO .."\\t(" ..t[i].. "," ..t[i+1].. ",\\" ..SUERTE..")"..""                                              end                                          return RESULTADO                                                         end
复制代码
等差数列型AutoTags(变化用时递增或递减)
6.png
递减效果类似炸弹定时器,越来越急促
递增效果则表示变化速度越来越缓慢
AutoTags3(第一次变化用时,最终变化用时,"标签1","标签2")
第一次变化用时>最终变化用时,为递减
最终变化用时>第一次变化用时,为递增

ASS文件放在附件了
AutoTags.zip (2.11 KB, 下载次数: 2257)



暂时就想到这么几种,等比数列,两组时间交替变化也是不错的思路,欢迎大家补充
新年第一帖,祝大家新春快乐


5

查看全部评分

Rank: 4

沙发
发表于 2016-8-6 20:07:27 |显示全部楼层
菌泠 发表于 2016-7-27 23:33
我特效目前卡一个地方 随机数再每次k的地方都会重新随机一次 我想让随机数获取后使用多次 发现貌似楼主的函 ...

需要理解code、template及修饰语的概念
在code行定义随机数
如果是code once
则整个自动化执行过程中产生一次随机
code line
则针对每一行产生一次随机
code syl
针对每个音节(也就是每个k)产生一次随机

Rank: 4

板凳
发表于 2016-9-4 10:48:58 |显示全部楼层
菌泠 发表于 2016-9-1 18:00
大触居然会回我啊 你这意思我懂了  在template syl里调用code line的随机数 就可以达到一 ...

这种东西手册都有介绍,这部分早就汉化过了,可以收藏一下方便以后自己查阅。自学什么的,其实大部分人都是自学过来的吧.........http://aegi.vmoe.info/docs/3.2/A ... e_lines_and_blocks/

Rank: 4

地板
发表于 2016-9-24 17:02:16 |显示全部楼层
菌泠 发表于 2016-9-24 15:55
对了 还问一个困扰我很久的问题 一行代码中 org只能指定一次 那么 我记得有一部动漫op 中二病也要谈恋爱  ...

这种?     {\move(100,100,800,100)\t(\frz-1800)\an5}滚

当然有可能an5给出的中心位置不是严格的文字中心,有些字体会出现偏心旋转

Rank: 4

5#
发表于 2016-9-26 19:47:31 |显示全部楼层
菌泠 发表于 2016-9-26 09:49
http://www.bilibili.com/video/av4523806/index_1.html 这个 好像又不是这个 1分钟后面的直线旋转移动居 ...

和我上面给的没有区别........圆心本来就在字上,不用手动调整
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-5 12:46

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH