项目介绍:chatgpt-subtitle-translator
chatgpt-subtitle-translator 是一个利用 OpenAI ChatGPT API 开发的字幕翻译工具,其主要目标是进行基于行的文本翻译,特别适用于 SRT 格式的字幕文件。该工具通过移除 SRT 格式的冗余信息,将文本分批处理,以消耗更少的令牌,同时确保输入输出行的一一对应。
项目背景
ChatGPT 是一种强大的翻译工具,能够处理多种语言以及非常规的书写格式,如表情符号和单词乱序等。然而,由于其输出不总是具有确定性,并且可能在某些情况下打乱字幕的时间轴,这会影响字幕的显示时机。chatgpt-subtitle-translator 的设计旨在解决这一问题,通过特别设计的机制确保翻译的准确性和完整性。
功能特色
- 支持图形用户界面(Web UI)和命令行界面(CLI)两种方式。
- 支持结构化输出模式,提供更简洁的翻译结果。
- 具备提示词缓存功能,通过包含翻译的完整上下文,实现更高效的请求处理。
- 基于行的批处理机制,避免请求超出令牌限制,同时减少令牌浪费。
- 加入 OpenAI 免费审核工具,避免在高可能拒绝翻译的情况下浪费令牌。
- 支持流式处理输出和按分钟请求速率限制。
- 在命令行中,支持进度恢复功能。
使用指南
环境配置
- 系统要求 Node.js 版本
>= 16.13.0
。 - 克隆项目仓库,并进入项目目录:
git clone https://github.com/Cerlancism/chatgpt-subtitle-translator && cd chatgpt-subtitle-translator
- 安装需要的依赖包:
npm install
- 授权命令行翻译工具为可执行:
chmod +x cli/translator.mjs
- 复制环境变量文件:
cp .env.example .env
- 在
.env
文件中添加你的 API 密钥。
命令行使用说明
命令行使用 cli/translator.mjs
可以进行多种语言翻译,支持自定义源语言和目标语言、输入输出文件、流式输出、系统指令覆盖等选项。
示例命令:
cli/translator.mjs --plain-text "你好"
输出:
Hello.
项目内部工作原理
项目通过减少每次请求的令牌数量来提高效率。使用 SRT 格式字幕示例,不进行分批处理而逐行翻译,令牌消耗约为 362;进行简化分批处理,消耗减少至约 276。
示例解析
对于 5 行 SRT 格式的输入:
- 直接翻译:令牌消耗
299
。 - 不进行分批,仅移除 SRT 信息并逐行翻译,历史提示词上下文最多保留 10 个:令牌消耗
362
。 - 移除 SRT 信息并进行 2 行分批处理:令牌消耗
276
。
通过这样的分批处理机制,项目确保了既高效又准确的翻译结果。
总结
chatgpt-subtitle-translator 是一个设计简洁且功能强大的翻译工具,主要针对字幕文件的翻译需求进行了优化。通过灵活的 API 调用和智能的令牌管理机制,确保了翻译的效率和字幕时间轴的兼容。