吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 399|回复: 12
上一主题 下一主题
收起左侧

[Windows] Potplayer 实时字幕 LLM 翻译插件 | 基于 Deepseek v4

[复制链接]
跳转到指定楼层
楼主
YesuSama 发表于 2026-5-15 13:00 回帖奖励

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,达到某类型视频的高质量翻译。

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
hhp3175358 + 1 + 1 谢谢@Thanks!
ssiiie + 1 + 1 谢谢@Thanks!
82189689 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
alanlyf 发表于 2026-5-15 18:20
这个是我正需要的,感谢了
3#
qsaeee123 发表于 2026-5-15 18:27
4#
ZhaoJing0629 发表于 2026-5-15 19:01
5#
 楼主| YesuSama 发表于 2026-5-15 19:04 |楼主

用 ollma 也是可以的,都是 OpenAI API 的规范
6#
江湖求技艺 发表于 2026-5-15 19:14
任意第三方的OpenAI API 的规范的api都可以用吗?
7#
 楼主| YesuSama 发表于 2026-5-15 20:07 |楼主
江湖求技艺 发表于 2026-5-15 19:14
任意第三方的OpenAI API 的规范的api都可以用吗?

是的,只要是兼容 OpenAI API 的都行
8#
LonelyShadow 发表于 2026-5-15 21:53
好插件,有这个插件看国外的电影更有趣了。
9#
ak50a 发表于 2026-5-15 23:24
和ollama一样吗?
10#
KCK 发表于 2026-5-16 00:08
好东西啊,感谢分享,就是烧不起token
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-16 04:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表