aegisub 中的循环没有重复?

这是我在 aegisub 自动生成 lua 代码上工作的一段代码,预期目标是将第一行和第二行对话连接起来,然后重复该过程,直到第一行至少包含 55 个字符,然后转移到对话行 2,将其与行 3 连字符,直到第二行至少为 55 个字符,依此类推。

实际上,在执行后,如果行 1 的字符少于 55 个,则它将连接行 1 和 2,并在此过程中删除行 2,但是连结行之后就停止运行了。 反复执行它将继续将第二行合并到第一行,直到达到字符阈值,此时它将开始将第 2 行与第三行合并,依此类推。 这几乎正是我想要它运行的方式,但我不知道为什么我的循环不会导致程序执行,直到对话的所有行都符合条件。

我尝试将 while ((l.class == "dialogue") and string.len(l.text) < 55 and i < #subs) do 更改为 while true do if ((l.class == "dialogue") and string.len(l.text) < 55 and i < #subs) then

以及尝试添加 else 语句,但这些都会返回错误。 我觉得这是我编写循环的语法问题,但我对 lua 不是很熟练,不确定

任何帮助都将不胜感激

script_name="连接行"
scipt_author="andrew salazar"
script_description="连接不足 55 个字符的行"
script_version = "1"

include("utils.lua")
include("karaskel.lua")


function main_func(subs, sel, act)
    for i= 1,#subs do
        l = subs[i]
        while ((l.class == "dialogue") and string.len(l.text) < 55 and i < #subs) do
            lines_to_delete = {}
            l_next = subs [i + 1]
            l.text = l.text .." ".. l_next.text
            l.end_time = l_next.end_time
            subs[i] = l
            table.insert(lines_to_delete,i+1)
            subs.delete(lines_to_delete)
            return lines_to_delete
        end
    end
end

aegisub.register_macro(script_name, script_description, main_func)

原文链接 https://stackoverflow.com/questions/70144253

点赞
stackoverflow用户17531552
stackoverflow用户17531552
# 将下面翻译成中文并且保留原本的 markdown 格式

script_name="拼接对话" scipt_author="安德鲁 萨拉扎" script_description="将 55 个字符以下的对话进行拼接" script_version = "1"

include("utils.lua") include("karaskel.lua")

function main_func(subs, sel, act) for i, lines in ipairs(subs) do local l = subs[i] while ((l.class == "dialogue") and string.len(l.text) < 55 and i < #subs) do lines_to_delete = {} l_next = subs [i + 1] l.text = l.text .." ".. l_next.text l.end_time = l_next.end_time subs[i] = l table.insert(lines_to_delete,i+1) subs.delete(lines_to_delete) end end return end

aegisub.register_macro(script_name, script_description, main_func)

```

脚本名称为“拼接对话”,作者是安德鲁 萨拉扎,描述为将 55 个字符以下的对话进行拼接,版本号为 1。

引用了 utils.luakaraskel.lua

函数 main_func 在传入的字幕 subs 中循环遍历每一行对话,当该行对话类别为“dialogue”且字符长度小于 55 时,使用循环语句拼接该行对话和下一行对话。

最后,将新的对话赋值给当前行对话,并将下一行对话删除,最终返回新的字幕 subs

在 Aegisub 中注册宏,以便可以在软件中使用该脚本。

2021-11-28 18:01:18