Aegisub特效随记:时间码
本文最后更新于 172 天前。

实际上不算是歌词特效,只能说是一段自动化template的简单应用。

截图

image.png

代码

Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code syl all,fxgroup.firstsyl = syl.i == 1
Dialogue: 0,1:01:01.55,1:01:02.55,Default,毫秒,0,0,0,template fxgroup firstsyl notext,!maxloop(math.floor($ldur/1000*24))!!retime("preline",1000/24*(j-1),1000/24*j)!!string.format("%02d:%02d:%02d:%03d",math.floor(($lstart/1000*24+j-1)/(24*3600)),math.floor(($lstart/1000*24+j-1)/(24*60)) % 60,math.floor(($lstart/1000*24+j-1)/(24)) % 60,($ldur+(j-1)*1000/24)%1000)!
Comment: 0,1:01:01.55,1:01:02.55,Default,帧,0,0,0,template fxgroup firstsyl notext,!maxloop(math.floor($ldur/1000*24))!!retime("preline",1000/24*(j-1),1000/24*j)!!string.format("%02d:%02d:%02d:%02d",math.floor(($lstart/1000*24+j-1)/(24*3600)),math.floor(($lstart/1000*24+j-1)/(24*60)) % 60,math.floor(($lstart/1000*24+j-1)/(24)) % 60,(math.floor($lstart/1000*24)+j-1) % 24)!
Dialogue: 0,1:15:01.55,1:16:51.55,Default,,0,0,0,karaoke,这句话的起始时间是时间戳生成的起始点\N格式:h:mm:ss:frame,frame为0-23(按照24fps生成)

改了两个小版本,打了comment说话人是毫秒的,格式为hh:mm:ss:msmsms
未打comment,说话人是的,格式为h:mm:ss:frameframe

算法和函数

绝对帧数

选用了从0:00:00.00开始计数的绝对帧数$lstart/1000*24+j-1,并进行帧和时分秒之间的换算。

string.format

Lua/Java中使用string.format()格式化字符串。
string.format()第一个参数为字符串格式,后面的参数可以任意多个,用于填充第一个参数中的格式控制符,最后返回完整的格式化后的字符串。

控制符

格式控制符以%开头,常用的有以下几种。
%c – 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i – 接受一个数字并将其转化为有符号的整数格式
%o – 接受一个数字并将其转化为八进制数格式
%u – 接受一个数字并将其转化为无符号整数格式
%x – 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X – 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e – 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E – 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f – 接受一个数字并将其转化为浮点数格式
%g(%G) – 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q – 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s – 接受一个字符串并按照给定的参数格式化该字符串

参数

为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:
(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
(4) 宽度数值
(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.

例子

string.format("%02d:%02d:%02d:%03d",A,B,C,D)表示将A B C D补到2 2 2 3位,并以:连接。

标题:Aegisub特效随记:时间码
作者:IKK
除转载和特殊声明外,所有文章采用 CC BY-NC-SA 4.0协议
上一篇
下一篇