字幕翻译服务的交付物,不只是把英文句子改成中文。客户还需要字幕在正确时间出现、术语前后一致、文件能导入播放器,而且修改字幕时没有顺便改变原来的时间轴。

本文用三条原创的读书室提示语演练“翻译文案、保留时间轴、检查 SRT、人工复核”的完整流程。它适合希望提供 AI 辅助字幕服务的人。示例没有真实客户订单和配套语音,不展示收益,也不声称完成音画同步验收。 文中的格式检查脚本已在本地样本运行,不调用翻译 API,不上传任何文件。

一、接单前先确认交付范围

先询问客户是否已经有准确的源语言字幕。若只有视频,还需要转写、分段和校时;若已经提供 SRT,本次可以限定为翻译与质量复核。两种工作的时间成本不同,不能用一个“每分钟翻译”的说法覆盖全部环节。

确认目标语言、观众、术语表、称呼、是否保留原文,以及交付软字幕还是烧录成片。SRT 文件可以作为独立字幕导入,烧录则会写进画面;不要在客户只要求字幕文件时擅自重压整段视频。

还要确认哪些变更可以做。本练习采用“翻译文字、不调整时间码”的约定;如果中文读不完,应报告对应条目,请求批准改时轴或压缩表达,不能悄悄延长显示时间并影响后面的内容。

二、理解本次使用的 SRT 结构

Matroska 的官方字幕技术说明展示了 SubRip/SRT 的基本文本结构:序号、起止时间和文字块,块之间用空行分隔。SRT 在不同工具中还可能有扩展写法;本文脚本只验收下面约定的简单形式,不宣称覆盖所有兼容变体。

  1. 序号从 1 连续递增。
  2. 时间写成 小时:分钟:秒,毫秒,例如 00:00:02,200。
  3. 起止时间用 --> 连接。
  4. 每条保留一至两行非空字幕,条目之间留一个空行。

本练习使用 UTF-8 文本。不要在 Word 里保存成带富文本样式的文件后改扩展名;应使用能保存纯文本的编辑器,并确认系统没有把文件实际命名为 source.srt.txt。

三、制作两份清晰的教学样本

创建独立工作目录,把下面内容保存为 source.srt。它是本站编写的虚构八秒视频字幕,不对应实际录音。

1
00:00:00,500 --> 00:00:02,000
Welcome to the reading room.

2
00:00:02,200 --> 00:00:04,000
Keep the aisle clear.

3
00:00:04,200 --> 00:00:06,500
Return books to the front desk.

先整理一个最小术语表:reading room 对应“阅览室”,aisle 对应“通道”,front desk 对应“服务台”。术语依据本次虚构场景制定,不代表所有学校、图书馆或客户都使用同一称呼。

给 AI 的任务可以这样写:

请翻译这三条英文字幕,观众是普通中文读者。
保留序号和所有时间码,不新增或删除条目,不改变显示时段。
术语:reading room=阅览室,aisle=通道,front desk=服务台。
每条一至两行,表达清楚自然,不添加礼貌语或原文没有的承诺。
只输出SRT正文,疑问另列,不要猜测不确定的词义。

这里没有指定某个付费翻译产品;使用自己有权使用的 AI 服务,按其官方入口开通即可。不得把客户未允许外传的视频或字幕上传到在线服务。教学材料可以直接练习,真实工作应先确认数据处理范围。

字幕服务从范围确认到术语翻译再到时间轴和人工回放检查的流程示意

四、建立人工参考稿,而不是盲信生成稿

本例的中文参考稿如下,保存为 zh.srt。这份译文由本站为说明流程编写,不是某个模型的实际输出。

1
00:00:00,500 --> 00:00:02,000
欢迎来到阅览室。

2
00:00:02,200 --> 00:00:04,000
请保持通道畅通。

3
00:00:04,200 --> 00:00:06,500
请将图书归还服务台。

逐条检查是否遗漏动作对象、否定、数量和地点。第二条不是“请清洁通道”,第三条也不是“把书放回书架”。用词都像公共提示,并不意味着语义可以互相替换。

真实内容里遇到缩写、姓名、型号或行业术语,应建立待确认列表,回听原音、查看画面或请客户提供依据。不要因为时间紧就让 AI 自动补充,字幕上的错误同样会进入最终成片。

五、用只读脚本检查时间轴是否被改动

电脑有 Python 即可运行下面脚本,无需额外安装库。把代码保存为 check_srt.py,与两份字幕放在同一目录。它只读取文件并输出检查结果,不修改字幕。

from pathlib import Path
import re

STAMP = r"(\d{2}):([0-5]\d):([0-5]\d),(\d{3})"
TIMING = re.compile(STAMP + r" --> " + STAMP)

def milliseconds(parts):
    h, m, s, ms = map(int, parts)
    return ((h * 60 + m) * 60 + s) * 1000 + ms

def read_srt(name):
    text = Path(name).read_text(encoding="utf-8-sig").strip()
    if not text:
        raise ValueError(f"{name}: 文件为空")
    blocks = re.split(r"\n[ \t]*\n", text)
    rows = []
    last_end = 0
    for expected, block in enumerate(blocks, 1):
        lines = block.splitlines()
        if len(lines) not in (3, 4) or lines[0] != str(expected):
            raise ValueError(f"{name}: 第{expected}条序号或行数不符")
        match = TIMING.fullmatch(lines[1])
        if not match:
            raise ValueError(f"{name}: 第{expected}条时间格式不符")
        start = milliseconds(match.groups()[:4])
        end = milliseconds(match.groups()[4:])
        if start < last_end or end <= start or end > 8000:
            raise ValueError(f"{name}: 第{expected}条时间范围不符")
        if any(not line.strip() for line in lines[2:]):
            raise ValueError(f"{name}: 第{expected}条字幕为空")
        rows.append((start, end))
        last_end = end
    return rows

if __name__ == "__main__":
    original = read_srt("source.srt")
    translated = read_srt("zh.srt")
    if original != translated:
        raise ValueError("条目数量或对应时间轴发生变化")
    print(f"格式与时间轴检查通过:{len(original)}条;仍需人工审校")

在目录中运行 python check_srt.py,本例应得到三条通过的提示。脚本中的 8000 毫秒是这个虚构八秒素材的上限,真实项目必须替换为已经核实的素材时长,不能直接拿去检查任意视频。

脚本还约定条目不重叠、最多两行、序号连续。有些真实项目允许多人同时说话的重叠字幕,或有其他行数规范,那就应该先调整验收约定。本脚本通过,只能说明这些格式和时间规则通过,不能说明译文正确或观众来得及读。

六、回放是格式检查之后的一道独立验收

拿到真实授权视频后,在客户指定或双方约定的播放器、字幕编辑器中导入文件。可以使用 Subtitle Edit 这类字幕编辑工具,但安装应来自项目官方入口,并核对当前系统要求;本例不要求为了运行 Python 脚本安装它。

逐条看字幕是否与发音对应、是否挡住重要画面、换行是否自然、显示时间能否读完。先完整回放,再重点检查快语速、多人对话、画面文字和术语密集处。没有配套音频的本例只能检查文本与时间结构,不能把本地格式测试冒充真实回放。

如果翻译后句子太长,先保留核心动作和必要对象,减少冗余,但不能删掉否定或条件。仍然放不下时,记录条目编号、原因与建议,不擅自改变已经约定固定的时轴。

七、先交小样,明确怎样才算通过

正式接项目时,可以先选取一小段有代表性的授权内容,包含一处专有名词、一句较长表达和一个容易听错的位置。不要只挑最简单的开场白,否则双方看不出后续困难在哪里。约定这段小样用于确认风格和工作范围,是否收费、是否计入正式交付应提前说清。

检查记录可以按字幕编号写成三列含义的分行条目:发现了什么、依据是什么、准备怎样处理。例如“第17条型号不清楚;原音与画面都不足以确认;等待客户术语表”,比直接填入一个看起来相近的型号更可追溯。不要把待确认问题藏在聊天记录里,最后交付文件时却声称全部通过。

换行也需要人工判断。中文尽量避免把紧密词组拆开,姓名与职务、数字与单位也应检查是否被不自然地分到两行。不同画幅与播放器的字体、边距可能改变实际阅读效果,因此在文本编辑器里看着整齐,仍不能代替目标播放环境中的检查。

如果客户批准调整时轴,应另存一个新版本,并记录哪些条目改变了起止时间。此时本例“翻译前后时间轴必须相同”的规则已经不适用,应明确切换到新的验收方式,而不是删除报错以后当作没有发生过变更。

字幕检查区分机器可验证的结构时间与人工确认的语义阅读体验示意

八、报价、修改与交付怎样说明

报价可以按素材时长、语种、术语难度、源字幕质量和是否需要校时拆分。准备材料、AI 初稿、人工复核、回放、沟通和返修都有成本。用自己的小样测算投入时间,不把模型几秒生成稿的时间当成全部制作成本,也不据此承诺固定利润。

交付前确认修改轮次与范围。例如一轮术语调整属于既定范围,客户更换整段视频或改目标语言则需要重新评估。对外展示案例应使用获准公开的素材,不能拿客户未发布的片段做宣传。

最终交付至少包括目标语言 SRT、术语表、待确认项和检查记录。文件名标明语言和版本,避免把源字幕与译文同名覆盖。若另交付烧录样片,应明确分辨率、画幅和编码要求,并保持可独立修改的字幕文件。

九、常见报错与验收底线

时间格式错误时,检查毫秒前是逗号还是小数点、箭头两边是否符合本例约定。行数错误时,检查是否把 AI 的解释文字也粘进文件。时间范围错误时,检查起止是否颠倒、超出素材时长或出现本例不允许的重叠。

脚本提示两份时间轴不同,应逐条比较,不要为了让检查通过而把修改后的时间码反写到源文件。先弄清是谁改动、为什么改动,以及是否获得批准。

这类服务的价值在于可用的译文、稳定的时间轴和清楚的交付边界。保留源文件与检查记录,能让每一次修改有据可查,也让客户知道哪些已经核验、哪些还需要确认。

官方参考资料