找回密码
 立即注册
查看: 656|回复: 3

后知后觉:没想到chatgpt还能写aegi的Lua脚本,写得挺好的

27

主题

98

回帖

97

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
223848
leonvent 发表于 2025-8-5 22:32:29 | 显示全部楼层 |阅读模式
本帖最后由 leonvent 于 2025-8-6 08:49 编辑

按照自己喜好改一点字幕,像删除双语字幕中的外语,给样式对应字幕行增加语句,或者删除什么的。
例如想要一个选中样式,自动删除对应的字幕行什么的
之前做这类事情扔给excel/记事本,用正则这一类的处理
不过想想很多年前有看到这类的脚本自动化,跳个对话框更快,但又懒得去找了。
找AI写一个,没想到还真能写

  1. script_name = "选择删除样式及字幕"
  2. script_description = "弹出对话框,选择你想删除的样式,然后自动删除这些样式和对应的字幕行"
  3. script_author = "ChatGPT"
  4. script_version = "1.3"

  5. include("karaskel.lua")

  6. function get_all_styles(subs)
  7.     local style_set = {}
  8.     for i = 1, #subs do
  9.         local line = subs[i]
  10.         if line.class == "style" then
  11.             table.insert(style_set, line.name)
  12.         end
  13.     end
  14.     return style_set
  15. end

  16. function build_dialog(style_names)
  17.     local dialog = {
  18.         {class = "label", label = "Select styles to delete (will also remove associated dialogue lines)", x = 0, y = 0, width = 2, height = 1}
  19.     }
  20.     for i, name in ipairs(style_names) do
  21.         table.insert(dialog, {
  22.             class = "checkbox",
  23.             name = name,
  24.             label = name,
  25.             value = false,
  26.             x = 0,
  27.             y = i,
  28.             width = 2,
  29.             height = 1
  30.         })
  31.     end
  32.     return dialog
  33. end

  34. function delete_selected_styles(subs, sel)
  35.     local all_styles = get_all_styles(subs)
  36.     if #all_styles == 0 then
  37.         aegisub.dialog.display({{class = "label", label = "No styles found.", x = 0, y = 0}}, {"OK"})
  38.         return
  39.     end

  40.     local dialog = build_dialog(all_styles)
  41.     local buttons, result = aegisub.dialog.display(dialog, {"Delete", "Cancel"})

  42.     if buttons ~= "Delete" then return end

  43.     local to_delete = {}
  44.     for _, name in ipairs(all_styles) do
  45.         if result[name] then
  46.             to_delete[name] = true
  47.         end
  48.     end

  49.     local i = #subs
  50.     while i > 0 do
  51.         local line = subs[i]
  52.         if line.class == "style" and to_delete[line.name] then
  53.             subs:delete(i)
  54.         elseif line.class == "dialogue" and to_delete[line.style] then
  55.             subs:delete(i)
  56.         end
  57.         i = i - 1
  58.     end
  59. end

  60. aegisub.register_macro("选择删除样式及字幕", "选择样式并删除样式及其字幕行", delete_selected_styles)
复制代码



回复

使用道具 举报

20

主题

164

回帖

20

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
244783
op200 发表于 2025-8-6 04:06:39 | 显示全部楼层
其实 Aegisub 自带根据样式选择所有行的功能(
回复

使用道具 举报

27

主题

98

回帖

97

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
223848
leonvent  楼主| 发表于 2025-8-6 08:37:56 | 显示全部楼层
本帖最后由 leonvent 于 2025-8-6 08:45 编辑
op200 发表于 2025-8-6 04:06
其实 Aegisub 自带根据样式选择所有行的功能(

我太懒了,剪贴板里重复按了几遍,正则又忘了想不起来,找AI回忆,但想想弄个多选框好像可以做更多复杂的事情,没想到AI能写lua
回复

使用道具 举报

10

主题

15

回帖

0

VC币

新手上路

Rank: 1

积分
202
insuaaaaa 发表于 2025-8-8 03:26:25 | 显示全部楼层
可惜现阶段gemini和gpt都写不出卡拉ok模板 感觉aeg里面的写法ai死活都理解不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表