op200 发表于 2025-3-16 01:28:12

字幕特效脚本 [组合式API+完全可逆+纯Aegisub脚本]

Tag-Replace_for_Aegisub 项目地址 在这里下载

之前发过一遍这个脚本,为什么重发一个帖子捏?因为我发现这个脚本似乎能实现的功能比我想象中的还要多(?

首先声明一下,我没用过其他任何脚本,包括 karaok template 这种 Aegisub 自带的脚本,我也不打算用(毕竟用别人写的东西有学习成本,遇到bug还修不了),我也完全不了解字幕特效相关的圈子,从来没看过这方面的帖子、文章、教程,所以我可能不了解一些功能,这篇帖子只说说这个脚本有哪些功能


1.

首先这个脚本是一个 Aegisub 的 lua 脚本,所以不用脱离 Aegisub 使用,这两天我看到 Q群、tg、论坛 里都有人提到其他的脱离 Aegisub 的特效生成器,我个人来看我是不想我的字幕制作流程脱离 Aegisub 的,所以 Aegisub lua 脚本算是一定的优势(?


2.

这个脚本的生成是完全可逆的,也就是说,按下生成的快捷键可以生成特效,按下清理的快捷键就能直接还原

前两天我水群时看到有群u问 karaok template 的特效字幕如何还原,这时候我才知道原来 karaok template 是不可逆的,或者它有可逆的方法(?

所以 tag-replace 的可逆性也可以算是优势(?


3.

优化后的API

增删:


原本 Aegisub 的 API 的某些操作很是不顺手,例如插入和删除,所以 tag-replace 封装了一层 API,用户无需调 Aegisub 的 API,大大减少了出 bug 的概率


tag-replace 的插入使用的是缓存机制,用户把想插入的行放入缓存变量,然后启动释放缓存的模式,行就会自动插入

删除操作在 tag-replace 里是被禁止的,用户无需考虑删除哪些行,因为所有的被执行行都会被注释,二次执行会被删除

就这样,tag-replace 实现了完全可逆

速度:


为了优化速度,我套了十几层 for / if,全部用的数组没有用字典,不过有些复杂效果还是需要执行好几秒(再优化速度,我自己都读不懂源码了,好吧,我已经读不懂很多片段了,可能是我写的时候水平太菜了吧,虽然现在也菜),所以还提供了仅执行选中行的功能,以供临时处理

组合式API:

不用像 karaok template 那样把模板行堆到一起,用户可以随便把模板行放在任意位置,可读性++


4.

缺点也是有的

例如复杂效果还是得手搓 lua —— 先抓到行的对象,然后搓 lua,这也是为啥加了插入功能,就是给用户手搓的(

说好听点就是足够自由,可以完全自己搓(


(后续有空写的话,会优化这方面内容)

最抽象的缺点是,因为这个脚本是我学习编程半年时随手搓的产物,当时根本不知道啥是异常处理,不懂异常处理思想,导致这个脚本如果报错了鬼都看不懂是啥原因,只能祈祷自己别打错语法(ass 不能换行,所以 if else 嵌套会看4人

模式运行顺序(模式的生命周期?这样说听起来高级点 x)也挺乱的,虽然写这个脚本的时候我完全记得顺序,但现在已经不记得了(
好在当时我写的顺序就是使用时需要的顺序



5.

其实常见的功能还是有的

例如 渐变、追踪

渐变的话,可以看下我前两天写的这个字幕的效果
链接(这个字幕文件里也用了追踪)



追踪的话,就是先用 mocha 之类的软件生成追踪数据,然后把数据丢到变量里

支持常见的位置和变换追踪(见别人的脚本实现过),和不常见的蒙版追踪(没见过其他脚本实现过,不过实现这个功能其实很简单)

你甚至可以用蒙版追踪做矢量动画(x


6.

一些奇奇怪怪的功能

之前我几乎不做双语字幕,遇到双语字幕的话,我也是先合并成一行,然后打完轴,再拆成两行

但拆开后再想逐句调轴就麻烦了,而如果放同一行然后用\r管理样式又显得不那么优美

就在刚才我想到个奇怪的做法



像这样居然就解决了(?

利用了 tag-replace 的完全可逆性,牢大再也不用担心我的双语时肘(




吐槽:

有意思的是,我刚开始有特效需求的时候,我看了眼 karaok template 的文档,发现这玩意居然是按样式名处理对应行的,且强制处理同样式名的行

当时也是我刚刚接触 HTML/CSS 的时候,想着为啥它没有 CSS 这样的类选择器,然后我就想着我能不能实现类选择器,且做到比karaok template 代码更少、速度更快

实现了基础功能后,还真代码量更少( karaok template 28 KB,当时 tag replace 20KB),然而现在这坨屎山已经被我堆到 50KB 了(

每次遇到 bug 去翻源码 debug 的时候,我都是先骂当时自己怎么写出来这么蠢的玩意——逆天嵌套+0可读性,然后读着读着又不禁赞叹当时自己怎么想得出来这么逆天的数据结构,放现在都难以一时间想出来的逆天解决方案

MingY 发表于 2025-3-17 10:37:48

(不要总想着搞个大新闻
你所说的功能内置脚本都能实现(除了追踪),而最重要的音节模板我却没看见

op200 发表于 2025-3-17 14:46:33

MingY 发表于 2025-3-17 10:37
(不要总想着搞个大新闻
你所说的功能内置脚本都能实现(除了追踪),而最重要的音节模板我却没看见 ...

(因为我不用所以我没加

不知道你说的音节模板是不是这个,这个功能我在最早的版本里就加了,从来没用过



MingY 发表于 2025-3-17 15:08:51

op200 发表于 2025-3-17 14:46
(因为我不用所以我没加

不知道你说的音节模板是不是这个,这个功能我在最早的版本里就加了,从来没用过 ...

是,可以按音节分成多行吗?
不过我怀疑有多少人会尝试,对了解卡拉OK模板的人来说没必要,语法差太多了,文档写得也不算清晰(x

op200 发表于 2025-3-17 17:37:42

MingY 发表于 2025-3-17 15:08
是,可以按音节分成多行吗?
不过我怀疑有多少人会尝试,对了解卡拉OK模板的人来说没必要,语法差太多了 ...

有按{}位置切割的mode,还有个函数能完全自定义切割,好像是按出现顺序切割成一个 str[] 变量,标记了各个成员是{}还是text


不过我从来没用过这个功能,不知道好不好用(

没用过 karaok template,只看过两眼文档,当时看到有 $kdur 之类的关键字,我就模仿着加了上去,然后就再也没看过文档了(

我写的那个文档一直想重写但一直没重写,毕竟没人用这个脚本,我自己用的时候当字典查的(


页: [1]
查看完整版本: 字幕特效脚本 [组合式API+完全可逆+纯Aegisub脚本]