使用OpenAI GPT-5 JS代码翻译SRT字幕遇API超时问题求助
解决OpenAI API翻译长日文字幕超时问题及MacOS免费替代方案
一、修复API超时问题
1. 调整客户端超时设置
长文件处理需要更长计算时间,默认超时阈值不足以支撑,可直接在OpenAI客户端初始化时延长超时时间:
import fs from "fs"; import OpenAI from "openai"; // 设置60秒超时(可根据文件大小调整为更大值) const client = new OpenAI({ timeout: 60000 }); const args = process.argv; // 后续原有代码保持不变
2. 直接处理SRT文件,避免转PDF(推荐)
转PDF会额外增加文件体积和解析复杂度,直接读取SRT文本并分块处理是更高效的方案:
SRT格式遵循序号 → 时间戳 → 字幕内容 → 空行的结构,可按此规则分割为30-50行的小字幕块,分别调用API翻译后再合并结果,同时保留原SRT格式结构:
import fs from "fs"; import OpenAI from "openai"; const client = new OpenAI({ timeout: 60000 }); const args = process.argv; // 读取并分割SRT文件为独立字幕块 const srtContent = fs.readFileSync(args[2], "utf8"); const subtitleBlocks = srtContent.split(/\n\n+/).filter(block => block.trim() !== ""); let translatedSRT = ""; for (const block of subtitleBlocks) { const lines = block.split("\n"); const sequence = lines[0]; const timestamp = lines[1]; const japaneseText = lines.slice(2).join("\n"); // 调用API仅翻译字幕内容部分 const completion = await client.chat.completions.create({ model: "gpt-4o", // 注意:官方暂未正式发布GPT-5,替换为可用的官方模型 messages: [ { role: "user", content: `Translate the following Japanese text to natural, context-accurate English:\n${japaneseText}` } ] }); const englishText = completion.choices[0].message.content.trim(); // 拼接回标准SRT格式 translatedSRT += `${sequence}\n${timestamp}\n${englishText}\n\n`; } console.log(translatedSRT);
二、MacOS免费替代方案
若不想依赖OpenAI API,可使用本地开源模型完成翻译:
- Ollama:免费的本地大模型运行工具,完美支持MacOS
- 安装Ollama:下载官方安装包直接运行安装
- 拉取翻译模型:终端执行
ollama pull llama3(Llama 3 70B版本翻译效果较好) - 替换API调用为本地模型请求:
import { exec } from "child_process"; import util from "util"; const execPromise = util.promisify(exec); async function translateWithOllama(text) { const { stdout } = await execPromise(`ollama run llama3 "Translate this Japanese text to natural, context-accurate English: ${text}"`); return stdout.trim(); } // 后续分块处理逻辑与之前一致,将API调用替换为上述函数即可
内容的提问来源于stack exchange,提问作者ardarvin
相关产品推荐
相关产品推荐

