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

; 设置快捷键
^+t::
    ; 获取当前活动窗口句柄
    WinGetActiveTitle, title
    if InStr(title, '.srt') {
        ; 读取字幕文件内容
        FileRead, content, %title%
        ; 以回车换行符拆分内容为行数组
        lines := StrSplit(content, '`r`n')
        ; 遍历行数组
        for i, line in lines {
            ; 判断当前行是否为时间码行
            if RegExMatch(line, '^\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}$') {
                ; 获取当前时间码行的结束时间
                RegExMatch(line, '(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})', match)
                endTime := match2
                ; 判断是否为第一行时间码
                if (i > 1) {
                    ; 将上一行时间码的结束时间作为当前时间码的开始时间
                    RegExMatch(lines[i-1], '(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})', match)
                    startTime := match1
                    lines[i] := StrReplace(line, endTime, startTime)
                }
            }
        }
        ; 将修改后的内容重新写入文件
        FileDelete, %title%
        FileAppend, %lines.Join('`r`n'), %title%
        ; 提示修改成功
        MsgBox, 64, '字幕文件时间码修改', '时间码修改成功!'
    } else {
        ; 提示当前窗口不是字幕文件
        MsgBox, 48, '字幕文件时间码修改', '请打开字幕文件后再执行此操作!'
    }
return

以上代码通过快捷键 Ctrl+Shift+T 触发,在当前活动窗口为带时间码的字幕文件时,读取文件内容,遍历每一行判断是否为时间码行,如果是时间码行则获取结束时间并将上一行时间码的结束时间作为当前时间码的开始时间,最后将修改后的内容重新写入文件并弹出提示框提示修改成功。如果当前活动窗口不是字幕文件,则弹出提示框提示用户打开字幕文件后再执行此操作。

AutoHotkey 代码:调整字幕文件时间码

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

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