1.1 注册Aegisub插件
1. 基础知识
1.1 注册 Register
注: 本系列不包括lua基础, 您需要掌握基础的Aegisub模板编写能力以及掌握基础的Lua知识后进行学习
也就是, 您至少需要掌握Aegisub手册中的karaskel.lua条目下里的变量是如何使用的, 如line.actor
line.width
line.left
line.duration
等; 以及了解Lua的变量声明, 流程控制, 函数定义这些基础内容
1.1.1 注册
aegisub.register_macro(name, description, main_function[, checked_fucntion])
将这行代码敲在一个lua文件中, 放在 [aegisub\automation\autoload] 目录下就注册一个自动化插件.
1.1.2 参数解释
name
: 脚本名, 在aegisub的自动化显示的名称description
: 脚本简介, 将鼠标浮动在自动化上就会在左下角输出这个简介, 通常用来对脚本的用处进行简单的介绍.main_function
: 运行这个脚本后会调用的主函数, 手册上讲这个函数必须是一个宏处理函数(macro processing function), 这个下一节会进行解释.check_function
: 很少用到的一个可选参数, 你只可以在 kara-templater.lua 这个文件, 也就是卡拉ok模板执行器主体脚本中看到它使用了这个参数. 这个参数的作用是进行一个逻辑判断判断脚本是否运行: 当返回结果是false
时, 这个脚本将不会被执行.
1.1.3 注册拓展
#例1.1.3-1: kara-templater的注册模块
local tr = aegisub.gettext
script_name = tr"Karaoke Templater"
script_description = tr"Macro and export filter to apply karaoke effects using the template language"
script_author = "Niels Martin Hansen"
script_version = "2.1.7"
--------------------------------------------
--[[
<主函数体>
--]]
--------------------------------------------
aegisub.register_macro(tr"Apply karaoke template", tr"Applies karaoke effects from templates", macro_apply_templates, macro_can_template)
通常来说, 像例1.1.3-1一样的注册模块才是我们写的注册模块, 开头注明脚本信息, 结尾进行注册. 当然, kara-templater不是很具体, 我们再看另一个例:
#例1.1.3-2: strip-tags的主体模块
local tr = aegisub.gettext
script_name = tr("Strip tags")
script_description = tr("Remove all override tags from selected lines")
script_author = "Thomas Goyne"
script_version = "1.0.0"
--[[ 主函数体
function strip_tags(subs, sel)
for _, i in ipairs(sel) do
local line = subs[i]
line.text = line.text:gsub("{[^}]+}", "")
subs[i] = line
end
aegisub.set_undo_point(tr"strip tags")
end
--]]
aegisub.register_macro(script_name, script_description, strip_tags)
例1.1.3-2-[strip-tags.lua]同样是aegisub内置的一个脚本, 我把主函数体注释起来的, 和例1.3.1是同样的结构.
1.1.3.1 strip_tags注册模块参数解释
aegisub.gettext
aegisub.gettext
是aegisub内置的一个翻译api函数, 虽然一般我们写脚本也会加上这个, 但是这个函数是没用的, 因为它只会调用aegisub内置词典中的词进行本地化翻译, 属于可写可不写的参数.
#例1.1.3-3: aegisub.gettext的输出
aegisub.gettext("Strip tags")
--> Strip tags - 删除特效标签
aegisub.gettext("Remove all override tags from selected lines")
--> 从所选行中移除所有特效标签
aegisub.gettext("Delete tags")
--> Delete tags
如例1.1.3-3, 前面两个字符串是aegisub内置的脚本所以内置了词典会输出中文翻译, 而后面的"Delete tags"不属于里面的内容所以只会输出原来的值.
脚本信息
script_name
: 脚本名script_description
: 脚本简介script_author
: 脚本作者script_version
: 脚本当前版本
这4个脚本信息写在lua文件的最开头, 方便后来检查和修改. 当然, 这4个就是最简单的变量声明而已, 没有别的其它特殊含义, 如果想要添加比如脚本日期script_date
什么的也都可以.
注册函数
回到了最开头的aegisub.register_macro()
函数, 从上例中可以看出, 可以使用script_name
和script_description
进行脚本名和简介的调用(例1.1.3-2), 也可以像kara-templater一样直接使用字符串输入(例1.3-1).
1.1.3.2 在Aegisub中调用aegisub api
template line, !_G.aegisub.gettext("Strip tags")!
在Aegisub中使用函数需要添加上全局变量_G
才能调用.
1.1.4 script_name拓展
#例1.1.4-1: 通过文件树路径方式调用多个函数#1
script_name = "Save lines"
aegisub.register_macro(script_name.."/save", script_description, save_lines)
aegisub.register_macro(script_name.."/load", script_description, load_lines)
我们可以向script_name
后面和类似文件路径一样添加斜杠, 这样调用自动化的时候就会有子选项出现. 因为是变量连接字符串, 所以我们需要字符串连接符 ..
进行连接, 例1.1.4-1等同于例1.1.4-2:
#例1.1.4-2: 通过文件树路径方式调用多个函数#2
aegisub.register_macro("Save lines/save", script_description, save_lines)
aegisub.register_macro("Save lines/load", script_description, load_lines)
1.5 思考
- 在Aegisub中使用
aegisub.gettext()
函数, 查看"Karaoke Templater"和"Apply karaoke template"会输出什么. - 虽然现在还无法输出效果, 但是我们已经能在Aegisub的自动化注册一个脚本了, 尝试一下. (在autoload目录下新建一个lua文件, 进行注册, 查看是否能够在Aegisub中找到您注册的这个脚本.)见例1.1.3-2-[strip-tags.lua], 这就是一个完整的脚本.