首页 > 其他分享 >【Aegisub】卡拉OK模板执行器学习

【Aegisub】卡拉OK模板执行器学习

时间:2025-01-23 16:32:43浏览次数:1  
标签:执行器 修饰语 code OK 变量 template Aegisub 音节 模板

目录


什么是卡拉OK模板执行器

  • 就是这个东西

image

卡拉OK模板执行流程

  1. 找到卡拉OK模板执行器。
  2. 获取打好K值的行。
  3. 编写一个K值替换模板:
    1. 在开头插入新的一行作为模板行。
    2. 将步骤1中的新行的样式改为与K值的行一样。
    3. 声明template行和code行:
      • template行和code行要把注释(Comment)左边的方框打上√
      • 在特效栏,第一个被空格分隔的单词决定了该行是template行还是code行,是打好时间的karaoke行,还是设置好样式(被应用模板后)的karaoke行抑或其他的东西。
      • 如果在特效栏填入的第一个单词是template,这行就是template行。
      • 如果在特效栏填入的第一个单词是code,这行就是code行。
      • 如果在特效栏看到 fx,这行就是karaoke行被应用模板后生成的行,执行自动化模板时,这些行首先会被删除。
      • 如果在特效栏看到Karaoke,karaoke 或者是空白的,这行就是打好时间的karaoke行。
      • 如果特效栏含有其它的东西,这行就是未声明类型,不会被自动化模板执行器处理。
  4. 应用卡拉OK模板。

概念解析

template行

  • 模板行是字幕文件中以特殊方式标记的行,通常以“注释”的形式出现,并且在特效栏中以template开头。
  • 模板行有几种类型,区分的方式为在template后的不同模版修饰语。
  • 模板行中的主文本被称作“模板内容”,执行模板行将会使被模板修饰语匹配的其他行拥有同样的模板内容。
  • template行作用于与template行样式相同的行。

code行

  • code行是一种特殊的template行,在特效兰中以code开头。
  • code行中只应该含有Lua代码,并且无法独立作用生成新的行。
  • code行有两种用途:
    • 定义或更新变量,为变量在template行中的使用做准备。
    • 定义函数,为函数再template行中的使用做准备。
      • ex: 如果你需要一个随机数,但是需要在template行中两次用到同一个随机数,就可以采用code line来生成这个随机数,再在template行里使用。

code区

  • code区是template行中使用lua代码的一个区块。
  • code区要求是一个单独的Lua表达式。
  • code区的插入方式是使用一对半角感叹号(!),两个感叹号中间的区域即code区。

{\t($start,!syl.start_time+20!,\bord0)}

  • 在code区中可以使用内联变量。它们在code区执行前就已经被赋值,所以对于Lua解释器来说,它们就是常量。
  • 想要在code区进行简单的逻辑判断需要使用 and 和 or。

{\k!syl.duration > 100 and "f" or ""!$kdur}

  • 以上例子的意思为当音节的持续时间(syl.duration)大于100ms时,表达式syl.duration > 100为真,code区返回“f”作为结果,否则整个and表达式为false。右边的参数or表达式会被执行但是返回空。
  • 在Lua中, and 的优先级高于 or ,这意味着 and 表达式会先被评估。如果用小括号分组表示优先级,就像这样: ((syl.duration > 100) and "f") or ""。

模板修饰语

  • 模板修饰语是写在template行和code行后的单词。
  • 修饰语不是在所有情况下都兼容,不是对所有的template行和code行都生效。
  • 书写方式为在template或code后面添加空格后再添加修饰语。

声明类修饰语

  • 在没有声明类的修饰语情况下,template行默认使用syl修饰语。
  • 在没有声明类的修饰语情况下,codel行默认使用once修饰语。

once

  • 这个声明类的修饰语只对code行生效。

  • 写了该修饰语的code行在一次卡拉ok执行器执行的过程中只运行一次,优先于其他code行和tempplate行,执行顺序按照声明顺序。

  • 一般用来声明模板中的函数。

  • ex:这个例子声明了一个新的函数,它用来控制输出行的 层次(Layer) 信息。

image

line [name]

  • 这个声明类的修饰语对template行和code行都生效。

  • 参数name为可选参数,可自定义但是不能与现有修饰语相同。

  • 两个有相同name的模板行在应用时会被拼接到一起。

  • code行不能写name。

  • 无名称模板不能含有行前(pre-line)内容。

  • ex:这个例子中code行对每个输入行运行一次,它开启/关闭一个特效群(fxgroup),依靠输入行的说话人信息(line.actor)进行判断。

image

  • ex:这个例子中模板行声明了一个无名称的行类模板,效果是在音节的持续时间内边框粗度由默认值变成0。
  • 未执行模板前

image

  • 执行模板后

image

  • 可以发现执行模板后生成的fx行的边框粗度从10变成了0。

pre-line [name]

  • 这个类型的修饰语只对行类模板有效。

  • 参数name为可选参数,可自定义但是不能与现有修饰语相同。

  • 两个有相同name的模板会被一起应用。

  • 无名称模板如果只有 pre-line 修饰语,那么模板执行后输入行会被保留,同时生成的新行前加入了模板行的内容。

  • 有名称的 pre-line 模板行会按顺序把模板内容叠加。最后合成的一个模板再进行应用,所以这些模板内容是在解析模板时进行的,而不是执行时。

  • ex:这个模板行声明了一个无名称的行类模板,会给每个匹配到的行添加{\3c&H0000FF&\bord10}标签。

  • 未执行模板前

image

  • 执行模板后

image

  • 可以发现执行模板后生成的fx行拥有了template pre-line行中的特效内容。

  • ex:这个例子中声明了一个名字为jumper的行类模板,配合行前(pre-line)模板,能产生“跳跃”的特效。

  • 未执行模板前

image

  • 执行模板后

image

syl

  • 音节类模板。

  • 对code行和template行都有效。

  • ex:这行声明了一个syl类模板,它的作用是拆分音节后保持音节字符原来的位置。

  • 执行模板前

image

  • 执行模板后

image

furi

  • 假名标注类模板。

  • 编写方法为标准假名标注格式。(具体格式见本文后续标准假名标注格式的写法章节)

  • 对code行和template行都有效。

  • 执行之后只有假名标注。

  • 执行模板前

image

  • 执行模板后

image

syl furi

  • 同时使用syl和furi修饰语会生成两个不同的行,一个由syl生成另一个由furi生成。

  • 只有这一种多类修饰语。

  • 只有使用这个才会同时生成歌词行和注音行。

  • 执行模板前

image

  • 执行模板后

image

其他修饰语

all

  • 将模板应用到所有样式而不只是与模板行样式相同的行。

  • 对code行和template行都有效。

  • 要写在声明类修饰语的后面。

  • 执行模板前

image

  • 执行模板后

image

char

  • 将模板应用于每个字符而不是每个音节。

  • 会改变模板的应用顺序。

  • 例子不写了,看看官方手册的理解一下。

image

fx name

  • 使模板只应用于含有内联特效(inline-fx)的音节。(内联特效具体格式见本文后续卡拉OK内联特效章节)
  • name是必填参数。
  • name跟关键字和修饰语不要重复。

fxgroup name

  • 声明这个模板属于一个有名称的特效组。
  • name是必填参数。
  • name跟关键字和修饰语不要重复。

multi

  • 使模板对每个高亮应用一次,多应用于假名标注类字幕。(具体使用方法见本文后续标准假名标注格式的写法章节)
  • 高亮标记为#号。
  • 其中“涙”有三个音节,那么我们用两个#号来占位后两个音节,这就是创建了两个高亮。

{\k26}涙{\k33}#{\k24}#{\k36}の{\k48}薫{\k26}#{\k22}り{\k29}が{\k18}す{\k38}る

  • ex:这个效果是一种简单的 “边框扩张”,但是在唱到 涙 和 薫 时,会产生多次这个效果。如果没有 multi 修饰语的话,一个汉字只会产生一次效果。
  • 执行模板前

image

  • 执行模板后

image

  • 以下是没有 multi 修饰语的效果:

image

keeptags

  • 使原始的标签在应用完模板后得到保留。

  • 这个修饰语在char或者multi下没有效果。

  • ex: 比如我有一行K轴,其中一个字是红色,我想要在模板执行结束后不覆盖这个红色字体,就要用keeptags。

  • 这行template的效果是音节 “沿X轴翻转”,并在高亮的时间内翻转回去。

  • 执行模板前

image

  • 执行模板后

image

noblank

  • 该模板不会对认为是“空”的音节起作用。
  • 认为是“空”的几种情况(去掉标签后):
    • 剩下的是ASCII的空格;
    • 剩下的是全角空格;
    • 真正是空的 特殊情况;
    • 音节的持续时间是0 (\k0)。

notext

  • 说明原文本在应用模板后不会在输出行中被显示。

  • 一般用于清除文本的同时输出图形。

  • 不能用于code行。

  • ex: 定义一个剑尖朝下的剑形状,使用move标签使剑下落到音节上,使用notext让执行之后的行没有文字只有图形。

  • 执行模板前

image

  • 执行模板后

image

repeat n, loop n

  • 模板会按照给定数值多次执行,需要给定数字。
  • 循环次数必须是正整数,不能是变量或者算式。
  • repeat 和 loop 一样。
  • 注意 loop 修饰的行模板和 loop 修饰的 音节/假名标记(syl/furi)模板执行顺序不同。
  • ex:loop 修饰语用于创建4个音节的副本。这四个副本每个都沿随机方向移动,在X/Y方向上最大范围30像素,带有淡出。
  • 执行模板前

image

  • 执行模板后

image

内联变量

  • 以上例子中$和$后面的就叫内联变量。

如何使用内联变量

  • 所有的内联变量头部都是一个$符。
  • 内联变量只在template行起作用,code行只能写lua代码,但是可以在code区使用。

{\pos($x,$y)\t($start,$end,\bord0)}

  • 以上例子中的$x$y$start$end就是内联变量。

  • 当一个模板被应用时,内联变量会被替换为对应的值,

  • 其中$x$y就会被音节的坐标x,y替代,$start$end就会被音节的开始时间和结束时间替代。

  • 内联变量的大小写影响。

变量类型

  • 内联变量同时适用“line”和“syllable”两种模式。“line”模式时,变量为被处理行的信息,“syl”模式时,则为被处理的音节的信息。
  • 内联变量中也有很多变量能够自动适应,它们既能变成line模式,也能变成syl模式,这取决于它们的template修饰语。 自适应变量只有在pre-line中,会自动为行变量,其它地方将自动为音节变量。
  • 记忆方法:行变量开头是小写l,音节变量开头是小写s。

行(Line)变量

变量名称 变量含义
layer 行所在层数
lstart, lend 行开始时间、行结束时间(ms)
ldur, lmid 行持续时间、行中点时间(=0.5 * (开始时间 + 结束时间))(ms)
style 行样式名称
actor 行说话人名称
margin_l, margin_r 有效左边距和右边距
margin_v, margin_t,margin_b 有效垂直边距、顶部边距、底部边距( 垂直边距和顶部边距含义相同)
syln 行内音节的个数
li 行数(起始数量为1)
lleft, lcenter, lright 行的左边缘、水平中心、右边缘距离
ltop, lmiddle, lbottom 行的上边缘、垂直中心、下边缘距离
lx, ly 对\pos代码使用的x,y坐标
lwidth, lheight 行的宽度和高度(以像素为单位)

音节(Syllable)变量

变量名称 变量含义
sstart, send, smid 音节(相对于行)的开始时间、结束时间、中点时间,适合配合\t和\move使用
sdur, skdur 音节的持续时间,前者以毫秒为单位,后者以厘秒为单位
si 该行的第几个音节
sleft, scenter, sright 音节的绝对的左边缘、水平中心和右边缘距离,从屏幕左边缘开始计算, 配合\pos和\move
sbottom, smiddle, stop 音节的绝对的下边缘、垂直中心和上边缘距离,从屏幕左边缘开始计算, 配合\pos和\move, 可根据假名定位进行调整
sx, sy 音节在默认对齐方式下的绝对位置(x,y),配合\pos和\move
swidth, sheight 音节的宽度和高度(以像素为单位)这两个变量会被取整,所以也许和位置变量不完全吻合

自适应(Automatic)变量

变量名称 变量含义
start, end, mid 行或音节的开始时间、结束时间、中点时间,行是绝对时间,音节是相对行的时间(通用,自动进行判断)
dur, kdur 行或音节的持续时间,前者以1ms为单位1,后者以10ms为单位1
i 行数或音节数
left, center, right 行或音节的绝对的左边缘、水平中心和右边缘距离, 从屏幕左边缘开始计算
top, middle, bottom 行或音节的绝对的上边缘、垂直中心和下边缘距离,从屏幕左边缘开始计算
x, y 行或音节的默认对齐方式下的坐标(x,y)
width, height 行或音节的默认对齐方式下的坐标(x,y)行或音节的宽度和高度,这两个变量会被取整,所以也许和位置变量不完全吻合

标准假名标注格式的写法

详细写法点我查看Aegisub官方手册

  • 首先我们先按照音节拆分这一行的内容,汉字先不按照音节划分,正常K轴如下。
  • ex:涙(なみだ)の薫(かお)りがする

{\k83}涙{\k36}の{\k74}薫{\k22}り{\k29}が{\k18}す{\k38}る

  • 然后将汉字或其他需要注音的音节也打上K,并将汉字打到读音的第一个音节,其他音节用#号占位。

{\k26}涙{\k33}#{\k24}#{\k36}の{\k48}薫{\k26}#{\k22}り{\k29}が{\k18}す{\k38}る

  • 之后填写汉字的读音,在汉字或#号的后面添加|<再写假名注音,如果有需要就添加!分隔符用来留空。
  • 用|<之后假名会按汉字的位置居中,用|则不居中。

{\k26}涙|<な{\k33}#|<み{\k24}#|<だ{\k36}の{\k48}薫|<か{\k26}#|<お{\k22}り{\k29}が{\k18}す{\k38}る

卡拉OK内联特效

详细写法点我查看Aegisub官方手册

  • inline-fx即内联特效是用来给打过的K轴的其中一部分分配不同的特效来使用的。

  • inline-fx标记本身并不会有任何影响,只有当应用可以识别它的卡拉ok特效脚本时才会应用于打了k的轴。

  • 内联标签的写法为\-name

  • 首先我们先按照音节拆分这一行的内容,正常K轴如下。

  • ex:涙の薫りがする

{\k83}涙{\k36}の{\k74}薫{\k22}り{\k29}が{\k18}す{\k38}る

  • 现在我想给の后面到り前的位置加上名为paint的特效,给り及后面直到结束加上名为cloud的特效,那么这行K轴为:

{\k83}涙{\k36-paint}の{\k74}薫{\k22-cloud}り{\k29}が{\k18}す{\k38}る

音节 内联特效
paint
paint
cloud
cloud
cloud
cloud
  • 现在我们已经给K行加上内联特效了,那么在template行里用fx修饰语来执行。

image

  • 其中template syl行对所有音节生效;
  • template syl fx paint对拥有paint内联特效的音节生效,同时叠加生效syl行中的内容;
  • template syl fx cloud对拥有cloud内联特效的音节生效,同时叠加生效syl行中的内容。

标签:执行器,修饰语,code,OK,变量,template,Aegisub,音节,模板
From: https://www.cnblogs.com/lzb1234/p/18672225

相关文章

  • (一)一文读懂transformers库中常见组件PreTrainedModel,PretrainedConfig,AutoTokenizer
    文章目录一、训练管理大师:`Trainer`和`TrainingArguments``TrainingArguments`:训练的“魔法配方”`Trainer`:训练的“超级厨师”二、数据整理小能手:`DataCollatorWithPadding`三、因果语言模型的输出管家:`CausalLMOutputWithPast`四、模型加载与处理的智能助手:`AutoPro......
  • Cookies,Session,Storage 封装方法,包含过期时间
    importCookiesfrom'js-cookie'importrouterfrom'@/router'constTokenKey='token'exportfunctiongetToken(){returnCookies.get(TokenKey)??''}exportfunctionsetToken(token:string){returnCoo......
  • ASP.NET Core 中基于 Cookie 的身份鉴权实现步骤
    在ASP.NETCore应用中,基于Cookie的身份鉴权是一种常见的身份验证方式,特别适用于传统的Web应用程序。Cookie能够在用户的浏览器中存储身份验证数据,从而在用户访问应用的不同页面时保持登录状态。一、配置Cookie身份验证首先,在Startup.cs或Program.cs文件中配置Cook......
  • 解密大厂技术团队如何实战OKR!
    0你的问题,我知道!OKR规划分两阶段:高层业务负责人针对整条业务线做业务规划中层TeamLeader针对专业团队做团队规划做团队规划,了解第二阶段就够?No,中层TL同样要了解第一阶段。你只有理解业务规划背后逻辑,才能做出匹配的团队规划。这也是为啥很多公司,当你到P7+,就有机会......
  • Postman测试接口报错401,token,jwt
    postman中请求报错401(token,jwt)1.报错1.1报错1在访问需要登录才能访问的接口时,即使已经登录了,也依然报错据我学习心得,是因为没有添加token请求头用户登录成功后,系统会自动下发JWT令牌,然后在后续的每次请求中,浏览器都需要在请求头header中携带到服务端,请求头的名称为Au......
  • 消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)
    ApachePulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系统的实时数据处理和异步通信。Pulsar的架构设计结合了消息队......
  • 【CES 2025】Rokid携三款AR产品亮相CES
    随着增强现实(AR)技术的迅猛发展,智能眼镜正逐渐成为连接虚拟与现实世界的桥梁。在2025年国际消费类电子产品展览会(CES)上,中国领先的智能眼镜厂商Rokid展示了其最新的三款AR产品——RokidGlasses、RokidARLite和RokidARStudio,彰显了公司在AR领域的深厚积累和技术实力。本文将......
  • GoWVP 全栈开发日记[5]:使用 react-hook-form 完成表单
    GoWVP全栈开发日记[5]:使用react-hook-form完成表单服务端源代码https://github.com/gowvp/gb28181前端源代码https://github.com/gowvp/gb28181_web介绍GoWVP(GolangWebVideoPlatfrom)是一个Go语言实现的,基于GB28181-2022标准实现的网络视频平台,负责实......
  • P11269 【MX-S5-T3】IMAWANOKIWA (Construction ver.)
    P11269【MX-S5-T3】IMAWANOKIWA(Constructionver.)题目翻译:对一个初始长度为\(n\)的序列\(a\)进行操作,每次操作可以任选两个相邻的数\(a_j,a_{j+1}\)将这两个数删去,在加上\(popc(a_j+a_{j+1})\)\(popc(x)\),表示\(x\)在二进制下\(1\)的个数而我们要求出一个操......
  • Facebook广告零支出无消耗:可能原因与解决方法
    Facebook广告开启投放之后预算消耗一动不动,到底是什么原因?又有哪些解决方法?及时排查并解决,助力提升广告效果和转化!一、Facebook广告无支出的可能原因1.出价过低和同属于Meta的Instagram广告竞标因素类似,Facebook广告的竞争因素也是这三点:Advertiser bid出价、Ad quality......