杰瑞科技汇

PotPlayer如何调用Python脚本?

这个“中间人”通常是系统自带的命令行工具或一个小的批处理文件。

PotPlayer如何调用Python脚本?-图1
(图片来源网络,侵删)

下面我将为你详细介绍几种主流的实现方法,从简单到复杂,并附上完整的代码示例。


使用批处理文件(.bat)作为“桥梁”【最推荐,最简单】

这是最直接、最兼容性最好的方法,PotPlayer可以执行外部命令,我们可以创建一个批处理文件,让它调用Python解释器并运行你的脚本。

原理

  1. PotPlayer设置:在PotPlayer的“外部滤镜”或“关联播放”设置中,添加一个命令,指向一个批处理文件(.bat)。
  2. 批处理文件:这个.batpython "你的脚本路径.py" "传递的参数"
  3. Python脚本:你的Python脚本需要能接收并处理从PotPlayer传递过来的参数。

步骤详解

第1步:准备你的Python脚本

你需要一个Python脚本,这个脚本需要能够从命令行接收参数,我们以获取当前播放时间为例。

PotPlayer如何调用Python脚本?-图2
(图片来源网络,侵删)

创建一个名为 get_current_time.py 的文件,内容如下:

# get_current_time.py
import sys
import time
# PotPlayer通过命令行传递的参数通常是:
# %1: 文件路径
# %2: 当前播放时间(秒)
# %3: 总时长(秒)
# %4: 播放状态(1=播放中, 2=暂停, 3=停止)
if len(sys.argv) > 2:
    try:
        current_time = float(sys.argv[2]) # 接收当前时间参数
        formatted_time = time.strftime("%H:%M:%S", time.gmtime(current_time))
        print(f"PotPlayer当前播放时间: {formatted_time}")
        # 在这里你可以做任何你想做的事情,
        # - 发送通知
        # - 保存到日志文件
        # - 调用其他API
        # 示例:将信息写入一个文本文件
        with open("potplayer_log.txt", "a", encoding="utf-8") as f:
            f.write(f"播放文件: {sys.argv[1]} | 时间: {formatted_time}\n")
    except (ValueError, IndexError) as e:
        print(f"参数错误: {e}")
else:
    print("此脚本需要从PotPlayer调用,并传递参数。")

第2步:创建批处理文件

get_current_time.py 同一目录下,创建一个名为 run_python.bat 的批处理文件,内容如下:

@echo off
REM 这个批处理文件的作用是调用Python脚本
REM %* 会将PotPlayer传递的所有参数都原封不动地传给Python脚本
echo 正在调用Python脚本...
python "get_current_time.py" %*
echo 脚本执行完毕。
pause

第3步:在PotPlayer中设置

这是最关键的一步,我们需要让PotPlayer在特定事件(比如播放时间变化)发生时,执行我们的批处理文件。

  1. 打开 PotPlayer,按 F5 或右键 -> 选项
  2. 在左侧菜单中找到并展开 滤镜 -> 外部滤镜
  3. 点击右侧的 添加 -> 添加滤镜...
  4. 在弹出的窗口中,选择 命令
  5. 点击 浏览,找到你刚刚创建的 run_python.bat 文件。
  6. 在下方的 命令行参数 框中,输入以下内容:
    "%F" %T %L %S
    • %F:当前播放文件的完整路径。
    • %T:当前播放时间(秒)。
    • %L:总时长(秒)。
    • %S:播放状态(1=播放中, 2=暂停, 3=停止)。
  7. 滤镜名称 可以随意填写,Python Runner
  8. 滤镜路径 留空即可,因为我们选择的是“命令”。
  9. 点击 确定 保存。

第4步:测试

  1. 重启 PotPlayer 以确保新设置生效。
  2. 播放任意一个视频文件。
  3. 播放几秒钟后,暂停一下,再继续播放。
  4. 检查你的脚本所在目录,应该会生成一个 potplayer_log.txt 文件,里面记录了播放时间和文件名。

使用URL协议(高级玩法)

这种方法更“隐蔽”,适合制作一些一键触发的功能,比如通过快捷键打开一个网页,而这个网页会触发本地的Python脚本。

原理

  1. 注册URL协议:在Windows注册表中添加一个自定义的URL协议(python://)。
  2. 关联执行程序:让这个协议关联到一个批处理文件或Python脚本。
  3. PotPlayer调用:在PotPlayer的“关联播放”或“快捷键”中,设置一个链接,如 python://do_something?param=value
  4. 触发执行:当PotPlayer访问这个链接时,系统会调用注册的程序,并传递参数。

步骤

第1步:注册URL协议

  1. Win + R,输入 regedit 打开注册表编辑器。
  2. 导航到 HKEY_CLASSES_ROOT
  3. 右键点击 HKEY_CLASSES_ROOT,选择 新建 ->
  4. 将这个新项命名为 python (或者你想要的任何协议名,如 mypot)。
  5. 选中新建的 python 项,在右侧窗口右键,选择 新建 -> 字符串值
    • 名称改为 (默认)
    • 双击它,数值数据设置为 URL:Python Protocol (这只是描述,可以任意)。
  6. python 项下,再新建一个名为 shell 的项。
  7. shell 项下,新建一个名为 open 的项。
  8. open 项下,新建一个名为 command 的项。
  9. 选中 command 项,在右侧修改 (默认) 的数值数据为:
    "C:\path\to\your\python.exe" "C:\path\to\your\handler.py" "%1"
    • 请务必将路径替换成你自己的Python解释器和脚本路径。
    • %1 会将完整的URL(如 python://do_something?param=value)作为参数传递给脚本。

第2步:编写处理脚本

创建一个 handler.py 来接收URL。

# handler.py
import sys
import webbrowser
import urllib.parse
def handle_potplayer_url(url):
    """处理从PotPlayer传来的URL"""
    if url.startswith("python://"):
        # 解析URL
        parsed_url = urllib.parse.urlparse(url)
        path = parsed_url.path
        query_params = urllib.parse.parse_qs(parsed_url.query)
        print(f"收到PotPlayer请求: {url}")
        print(f"路径: {path}")
        print(f"参数: {query_params}")
        # 示例:根据参数执行不同操作
        if path == "/search":
            keyword = query_params.get('keyword', [''])[0]
            if keyword:
                print(f"正在搜索: {keyword}")
                # 这里可以调用搜索引擎API,或者打开本地应用
                # webbrowser.open(f"https://www.google.com/search?q={keyword}")
        elif path == "/notify":
            message = query_params.get('msg', ['Hello from Python!'])[0]
            print(f"显示通知: {message}")
            # 这里可以使用Windows的toast通知库,如 `win10toast`
            # from win10toast import ToastNotifier
            # toaster = ToastNotifier()
            # toaster.show_toast("PotPlayer通知", message, duration=10)
if __name__ == "__main__":
    if len(sys.argv) > 1:
        handle_potplayer_url(sys.argv[1])
    else:
        print("未收到URL参数。")

第3步:在PotPlayer中使用

现在你可以在PotPlayer的任何可以输入URL或命令的地方使用它了。

  • 关联播放

    1. F5 -> 关联播放 -> 添加
    2. 扩展名mp4 (或任何你想关联的格式)。
    3. 命令python://open?file=%F
    4. 这样,当你用PotPlayer打开一个视频时,就会触发这个URL。
  • 快捷键

    1. F5 -> 快捷键 -> 添加
    2. 按键 设置为你想要的快捷键,Ctrl+Alt+S
    3. 命令python://search?keyword=PotPlayer
    4. 按下 Ctrl+Alt+S,你的Python脚本就会被调用,并执行搜索操作。

使用本地HTTP服务器(最强大、最灵活)

这是功能最强大的方法,适合需要双向通信、实时反馈的场景。

原理

  1. 启动HTTP服务:你的Python脚本启动一个本地的HTTP服务器(监听 0.0.1:8080)。
  2. PotPlayer作为客户端:在PotPlayer的设置中,配置一个命令,这个命令会向本地HTTP服务器的特定API端点发送一个HTTP请求(GET或POST)。
  3. Python处理请求:Python脚本接收到请求后,执行相应逻辑,并可以返回响应给PotPlayer(通过修改PotPlayer的UI文本)。
  1. Python脚本 (server.py):

    from http.server import BaseHTTPRequestHandler, HTTPServer
    import json
    class PotPlayerHandler(BaseHTTPRequestHandler):
        def do_GET(self):
            # 解析URL路径
            path = self.path
            print(f"收到GET请求: {path}")
            if path == '/time':
                # 这里可以从PotPlayer的全局变量或文件中获取当前时间
                # 模拟返回时间
                response_data = {"time": "01:23:45", "status": "playing"}
                self.send_response(200)
                self.send_header('Content-type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps(response_data).encode('utf-8'))
            else:
                self.send_response(404)
                self.end_headers()
    if __name__ == "__main__":
        server_address = ('127.0.0.1', 8080)
        httpd = HTTPServer(server_address, PotPlayerHandler)
        print("HTTP服务器启动在 http://127.0.0.1:8080")
        httpd.serve_forever()
  2. PotPlayer设置:

    • 外部滤镜 -> 命令 中,添加一个命令。
    • 命令 填写:curl http://127.0.0.1:8080/time (如果你的系统有curl) 或者 powershell -Command "Invoke-RestMethod -Uri 'http://127.0.0.1:8080/time'"
    • 这样每次触发,PotPlayer都会向你的Python服务器发送一个请求。
  3. 启动方式:

    • 你需要先手动运行 python server.py 启动这个后台服务。
    • 为了方便,可以创建一个启动脚本,或者将Python脚本设置为开机自启。

总结与对比

方法 优点 缺点 适用场景
批处理文件 简单、直接、兼容性最好、无需额外知识 功能相对单一,主要用于触发和传递参数 绝大多数需求,如日志记录、简单的通知、文件处理。
URL协议 “优雅”、可以集成到网页/链接中、支持复杂参数传递 注册表配置稍显复杂、调试不便 制作自定义快捷键、与PotPlayer的“关联播放”功能深度结合。
HTTP服务器 最强大、最灵活、支持双向通信、可扩展性强 实现最复杂、需要长期运行一个后台服务、有端口占用风险 需要实时交互、动态控制PotPlayer(如获取/设置播放列表、进度)、构建复杂插件。

给你的建议:

  • 如果你只是想 偶尔调用一下Python脚本 来处理一些事情(比如记录日志、截图后OCR识别),方法一(批处理文件) 是你的最佳选择。
  • 如果你希望用 快捷键 来触发一些特定功能(搜索当前视频演员”),方法二(URL协议) 会非常酷。
  • 如果你正在构思一个 功能丰富的PotPlayer插件,需要实时获取信息并反馈给用户,那么请选择 方法三(HTTP服务器),这是专业级的解决方案。
分享:
扫描分享到社交APP
上一篇
下一篇