以下是实现以上功能的 AutoHotkey 代码:

;读取 subtitles.txt 文件
FileRead, fileContent, subtitles.txt

;将文件内容转换成行数组
StringSplit, lines, fileContent, `n

;循环遍历每一行
for i, line in lines {
    ;如果是时间码行
    if (RegExMatch(line, '^\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d$')) {
        ;获取结束时间
        endTime := RegExReplace(line, '.* --> (\d\d:\d\d:\d\d,\d\d\d)$', '$1')
        ;如果不是第一行
        if (i > 1) {
            ;将上一行的结束时间作为此行的开始时间
            lines[i-1] := RegExReplace(lines[i-1], '^(.* --> )\d\d:\d\d:\d\d,\d\d\d$', '$1' . endTime)
        }
    }
}

;将行数组拼接成字符串
newFileContent := lines.Join('`n')

;将新的内容写回 subtitles.txt 文件
FileDelete, subtitles.txt
FileAppend, %newFileContent%, subtitles.txt

代码解释:

  1. 通过 FileRead 命令读取 subtitles.txt 文件内容到变量 fileContent 中。
  2. 使用 StringSplit 命令将 fileContent 转换成行数组。
  3. 循环遍历行数组,对于每一行:
    • 使用正则表达式判断是否为时间码行。
    • 如果是时间码行,使用正则表达式获取结束时间。
    • 如果不是第一行,将上一行的结束时间替换为此行的开始时间。
  4. 使用 Join 命令将行数组拼接成字符串。
  5. 使用 FileDelete 命令删除原来的 subtitles.txt 文件。
  6. 使用 FileAppend 命令将新的内容写回 subtitles.txt 文件。
AutoHotkey 代码:自动调整字幕时间码

原文地址: https://www.cveoy.top/t/topic/oM1x 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录