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

news/2025/3/10 15:10:35/文章来源:https://www.cnblogs.com/lzb1234/p/18672225

目录
  • 什么是卡拉OK模板执行器
  • 卡拉OK模板执行流程
  • 概念解析
    • template行
    • code行
    • code区
    • 模板修饰语
      • 声明类修饰语
        • once
        • line [name]
        • pre-line [name]
        • syl
        • furi
        • syl furi
      • 其他修饰语
        • all
        • char
        • fx name
        • fxgroup name
        • multi
        • keeptags
        • noblank
        • notext
        • repeat n, loop n
    • 内联变量
      • 如何使用内联变量
      • 变量类型
        • 行(Line)变量
        • 音节(Syllable)变量
        • 自适应(Automatic)变量
  • 标准假名标注格式的写法
  • 卡拉OK内联特效


什么是卡拉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区使用。

  • 以上例子中的$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行中的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比特c语言-数组和函数实践:扫雷

目录游戏分析和设计游戏功能说明游戏界面分析和设计数据结构分析文件结构设计游戏设计思路游戏代码实现游戏扩展 游戏分析和设计 游戏功能说明使用控制台实现经典扫雷游戏 游戏可以通过菜单实现是否退出游戏 扫雷棋盘默认为9*9格子 默认随机布置10个雷 可以进行排查雷如果位置不…

ANSYS计算完成后提示:# Error:Result file is incomplete or corrupt. It cannot be read.

问题: ANSYS模态分析计算完成后出现: Error:Result file is incomplete or corrupt. It cannot be read.解决办法: 将安装目录下的:C:\Program Files\ANSYS Inc\v242\Win64\mechanical\v242\commonfiles\Language\en-us\fx0.msb 文件 拷贝到上一级目录:C:\Program Files\…

vue3 输入框中能获取焦点,但是输入不了内容

原因:表单中的ref与model参数是一个,这两个参数应该不同。相同的话,输入不进去内容

让万物「听说」:AI 对话式智能硬件方案和发展洞察

本文整理自声网 SDK 新业务探索组技术负责人,IoT 行业专家 @吴方方 1 月 18 日在 RTE 开发者社区「Voice Agent +硬件分享会」上的分享。本次主要介绍了 AI 对话式智能硬件的发展历程,新一波 AI 浪潮所带来的创新机遇、技术挑战以及未来的展望。在语音交互浪潮的推动下,AIoT…

第一讲C++

第一题Long Loong For a positive integer X, the Dragon String of level X is a string of length (X+3) formed by one L, X occurrences of o, one n, and one g arranged in this order. You are given a positive integer N. Print the Dragon String of level N. Note …

蓝牙芯片HS6621CG-C丰富IO口资源集成红外编码语音采集功能超高性能已移植NFC例程支持语音蓝牙遥控智能门锁智能家居等应用

2.4Ghz的soc蓝牙5.1芯片HS6621CC语音遥控/智能门锁M4F内核兼容NORDIC的2.4G私有协议超低功耗,丰富IO口资源集成红外编码语音采集功能超高性能已移植NFC例程支持语音蓝牙遥控智能门锁智能家居等应用 简介:HS6621CxC 是一种功耗优化的真正的片上系统(SOC)解决方案,既适用于蓝牙…

Leetcode 287. 寻找重复数

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2]输出: 2 示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。 只…

性价比PHY6252国产高性能蓝牙芯片支持BLE5.2内置M0内核512KB flash

简介PHY6252是一款支持BLE 5.2功能的系统级芯片(SoC),集成了低功耗的高性能多模射频收发机,搭载32位高性能低功耗处理器,提供64K retention SRAM、可选512/256K Flash、96KB ROM以及256bit efuse,支持基于BLE的安全架构、应用和OTA在线升级。此外,芯片串行外设IO和集成的…

Python代码将大量遥感数据的值缩放指定倍数的方法

本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像文件的方法~本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存…

PHY6235超低功耗透传蓝牙soc内置MCU低成本方案

PHY6235是一款用于蓝牙低功耗和专有2.4G应用的系统级芯片(SoC)。它采用高性能、低功耗的32位RISC-V MCU,配备8KB保持型SRAM、80KB ROM以及超低功耗的高性能多模式无线电。此外,PHY6235支持带有安全功能的BLE(蓝牙低功耗)应用。串行外设IO和集成的应用IP使客户产品能够以最…

APISIX-API服务网关

一、简介 apisix是一款云原生微服务API网关,可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现,与传统API网关相比,apisix具有动态路由和插件热加载,特别适合微服务系统下的API管理。 Apisix 的诞生主要是为了是解决 Nginx 的动态配置问题以及…

会议真的有必要吗?我们产品开发9年了,但从来没开过会

在经历了10多年稳定安逸但缺少激情的朝九晚五工作后,于2017年我成立了一家软件公司,以自己所喜欢节奏和方式工作。 在这近10年的时间内我们开发了多个成熟的软件产品,已有不少用户在使用,独立自由且保持盈利。我们发现在这些年的软件研发过程中,我们软件研发团队竟然没有一…