Sora233 发表于 2024-6-21 10:59:25

如何批量把字幕结束时间往后调500ms

本帖最后由 Sora233 于 2024-6-22 18:27 编辑

只调结束时间,不调开始时间,如何批量把每句话的字幕结束时间往后调500ms

用Aegisub 竟然只能往后调50ms

Sora233 发表于 2024-6-21 11:05:53

本帖最后由 Sora233 于 2024-6-22 18:32 编辑

答案是反复移十次,但出现了叠加的情况,需要手动调整。。。。

感谢七楼攻略:https://bbs.acgrip.com/forum.php?mod=redirect&goto=findpost&ptid=11802&pid=108480&fromuid=35603

sommio 发表于 2024-6-21 11:37:46

计时里的时间后续处理器不能吗?
https://tncache1-f1.v3mh.com/image/2024/06/21/ced6c203ffe1161b292f8e4eeb46a84d.png

あいつ 发表于 2024-6-21 12:38:21

我平时用这个软件,12年前的软件了,依然非常好用



fuyouquan 发表于 2024-6-21 13:16:02

あいつ 发表于 2024-6-21 12:38
我平时用这个软件,12年前的软件了,依然非常好用

srtedit今年更新了

蓥荥 发表于 2024-6-21 13:46:08


有啥不行的?

tmdtmdtmdqq 发表于 2024-6-21 17:05:34

本帖最后由 tmdtmdtmdqq 于 2024-6-21 17:09 编辑

用时间后续处理器处理,有一个情况要注意,
本来没有重叠的字幕,用时间后续处理器处理后,也不会出现重叠
就是字幕的前后时间空隙不够的话,改行字幕的时间就只会扩展到空隙的宽度,而不会按预设那样扩展所需的时间




如图,假设现在要将每行的结束时间扩展110ms

「第一句」字幕的结束时间是00:00:02.00
因存在另外一句字幕(「第二句」)的开始时间是00:00:02.00,
所以「第一句」字幕后续的时间空隙是0ms,导致结束时间没被扩展

「第二句」字幕的结束时间是00:00:04.00
因存在另外一句字幕(「第三句」)的开始时间是00:00:04.05,
所以「第二句」字幕后续的时间空隙是50ms,所以结束时间只扩展了50ms而不是110ms

「第三句」字幕的结束时间是00:00:06.00
因不存在/只存在其它开始时间很往后的字幕,
所以「第三句」字幕后续的时间空隙是>110ms,所以结束时间能正常扩展了110ms

=========================================
所以,如果字幕中有相邻紧贴的字幕时间也需要扩展,用时间后续处理器处理可能并不理想,后续查找相邻紧贴的字幕做修复也麻烦
我建议是先手动选择需要处理的字幕行,点击「计时->平移时间…」,「应用于」区域勾选「所选行」,「时间」区域勾选「仅开始时间」或「仅结束时间」


这样处理,能确保所选行的开始时间或结束时间都能扩展到指定的时间。但是,会产生重叠字幕的问题,需要手动处理
这时候,就要另一个脚本来查找重叠行了
Aegisub自带了一个脚本「自动化->Select overlaps」,这个脚本是用来选择所有重叠行的
但是功能有点辣鸡,只能全选,而且没有定位功能
所以要魔改一下这个脚本,根据github的PR
修改Aegisub目录中的automation/autoload/select-overlaps.moon文件(不懂修改的直接下载github文件覆盖):
把第22行:
select_overlaps = (subs, selection) ->
改为:
select_overlaps = (subs, selection, active_line) ->


把第49行(注意前面有空格要对齐):
    overlaps
改为(注意前面有空格要对齐,空格不能省掉):
    table.sort overlaps
    new_active_line = nil
    for i in *overlaps
      if i >= active_line
            new_active_line = i
            break

    if #overlaps == 0
      aegisub.dialog.display { { class: "label", label: "No overlapping lines found!" } }, { "&OK" }, { cancel: "&OK" }
      selection, active_line
    else
      overlaps, new_active_line or overlaps
修改完要 重新打开Aegisub 或「自动化->自动化...」选择「Select overlaps」重新载入 才生效


这时,就能用「Select overlaps」的脚本定位当前行的后续的下一个重叠行了。后续找不到的话,会循环从开头开始查找定位
但是每次用鼠标点击这个脚本也太麻烦,所以可以设置一个快捷键
查看->选项...>>界面>>热键>>字幕栏 ->新建

比如这个叫重叠叫overlaps,所以我们可以设定快捷键Hotkey为「字母O」,在指令列Command填入
automation/lua/select-overlaps/Select overlaps然后点OK保存就行

这时候,你就能在字幕行区域使用「快捷键O」来定位重叠行修改了。
每按一次,就会定位到当前行的后续的下一个重叠行

修改时候也要注意一下,
因为使用这个脚本后,选择的是所有重叠行,
所以你要再点击一次需要处理的行来取消所有选择再进行调整处理,否则就会把所有重叠行一并修改


Sora233 发表于 2024-6-22 18:20:26

tmdtmdtmdqq 发表于 2024-6-21 17:05
用时间后续处理器处理,有一个情况要注意,
本来没有重叠的字幕,用时间后续处理器处理后,也不会出现重叠
...

顶级巨佬,非常感谢{:4_673:}
页: [1]
查看完整版本: 如何批量把字幕结束时间往后调500ms