Potplayer 使用 DeepSeek 视频实时翻译插件
使用 OpenAI API
目前大模型代码默认为 DeepSeek V4 Flash
安装
1、在 Potplayer 播放页面-右键-实时字幕翻译-翻译设置-打开文件夹
2、将压缩包中的 .as 和 .ico 文件复制到文件夹内
3、点击再次搜索 或 重启软件
登录
在实时字幕翻译设置页面点击 账户设置 输入 API KEY 即可
API KEY 需要自己申请,详细请访问 DeepSeek 官网
下载
腾讯微云:链接:https://share.weiyun.com/UY4lzNaQ 密码:9vdykb
注意事项
1、该功能需要外挂字幕才能翻译
2、无外挂字幕可使用 实时字幕翻译 功能进行字幕创建
3、首次播放和拖动进度条均有 2s 左右延迟,之后翻译均无问题
代码
/*
Real time subtitle translate for PotPlayer using DeepSeek (OpenAI API format)
*/
string UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
string BaseURL = "https://api.deepseek.com/chat/completions";
string ModelName = "deepseek-v4-flash";
// JSON 字符串转义函数
string EscapeJSON(string text)
{
string res = text;
res.replace("\\", "\\\\");
res.replace("\"", "\\\"");
res.replace("\n", "\\n");
res.replace("\r", "\\r");
res.replace("\t", "\\t");
return res;
}
// 解析 OpenAI 格式的 JSON 响应
string JsonParse(string json)
{
JsonReader Reader;
JsonValue Root;
string ret = "";
if (Reader.parse(json, Root) && Root.isObject())
{
// 检查是否有 choices
JsonValue choices = Root["choices"];
if (choices.isArray() && choices.size() > 0)
{
JsonValue choice = choices[0];
if (choice.isObject())
{
JsonValue message = choice["message"];
if (message.isObject())
{
JsonValue content = message["content"];
if (content.isString())
{
ret = content.asString();
}
}
}
}
else
{
// 尝试解析 API 报错信息
JsonValue error = Root["error"];
if (error.isObject())
{
JsonValue message = error["message"];
if (message.isString())
{
ret = "API Error: " + message.asString();
}
}
}
}
return ret;
}
// 常用语言列表 (大模型支持大部分 ISO 639-1 语言代码)
array<string> LangTable =
{
"zh-CN",
"zh-TW",
"en",
"ja",
"ko",
"ru",
"de",
"fr",
"es",
"it",
"pt",
"th",
"vi",
"ar",
"hi"
};
string GetTitle()
{
return "{$CP949=DeepSeek 번역$}{$CP950=DeepSeek 翻譯$}{$CP0=DeepSeek Translate$}";
}
string GetVersion()
{
return "1.0";
}
string GetDesc()
{
return "https://platform.deepseek.com/";
}
string GetLoginTitle()
{
return "Input DeepSeek API Key";
}
string GetLoginDesc()
{
return "Please input your DeepSeek API Key (e.g. sk-xxxxxx)";
}
string GetUserText()
{
return "API Key:";
}
string GetPasswordText()
{
return "";
}
string api_key;
string ServerLogin(string User, string Pass)
{
api_key = User;
if (api_key.empty()) return "fail";
return "200 ok";
}
void ServerLogout()
{
api_key = "";
}
array<string> GetSrcLangs()
{
array<string> ret = LangTable;
ret.insertAt(0, ""); // 空字符串代表自动检测 (Auto)
return ret;
}
array<string> GetDstLangs()
{
array<string> ret = LangTable;
return ret;
}
string Translate(string Text, string &in SrcLang, string &in DstLang)
{
if (api_key.length() > 0)
{
// 设置 HTTP Header
string SendHeader = "Authorization: Bearer " + api_key + "\r\n";
SendHeader += "Content-Type: application/json\r\n";
// 构造提示词与文本
string targetLang = DstLang;
if (targetLang == "zh-CN") targetLang = "Simplified Chinese";
if (targetLang == "zh-TW") targetLang = "Traditional Chinese";
if (targetLang == "en") targetLang = "English";
string sysPrompt = "You are a professional subtitle translator. Translate the user input into " + targetLang + ". Output ONLY the translated text, preserving original line breaks. Do not output any notes, explanations, or markdown formatting.";
string escapedText = EscapeJSON(Text);
// 构建 JSON Payload
string Post = "{\"model\": \"" + ModelName + "\", \"temperature\": 0.2, \"messages\": [{\"role\": \"system\", \"content\": \"" + sysPrompt + "\"}, {\"role\": \"user\", \"content\": \"" + escapedText + "\"}]}";
// 发起 POST 请求
uintptr http = HostOpenHTTP(BaseURL, UserAgent, SendHeader, Post);
if (http != 0)
{
string json = HostGetContentHTTP(http);
string ret = JsonParse(json);
HostCloseHTTP(http);
if (ret.length() > 0)
{
string UNICODE_RLE = "\u202B";
if (DstLang == "fa" || DstLang == "ar" || DstLang == "he") ret = UNICODE_RLE + ret;
SrcLang = "UTF8";
DstLang = "UTF8";
return ret;
}
}
}
return "";
}
代码修改
1、string BaseURL 后内容可替换大模型,基于 OpenAI API 均可。
2、string ModelName 可切换模型。
3、string sysPrompt 后内容可自主修改 Prompt,达到某类型视频的高质量翻译。