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

下面我将为你详细介绍几种主流的实现方法,从简单到复杂,并附上完整的代码示例。
使用批处理文件(.bat)作为“桥梁”【最推荐,最简单】
这是最直接、最兼容性最好的方法,PotPlayer可以执行外部命令,我们可以创建一个批处理文件,让它调用Python解释器并运行你的脚本。
原理
- PotPlayer设置:在PotPlayer的“外部滤镜”或“关联播放”设置中,添加一个命令,指向一个批处理文件(
.bat)。 - 批处理文件:这个
.bat是python "你的脚本路径.py" "传递的参数"。 - Python脚本:你的Python脚本需要能接收并处理从PotPlayer传递过来的参数。
步骤详解
第1步:准备你的Python脚本
你需要一个Python脚本,这个脚本需要能够从命令行接收参数,我们以获取当前播放时间为例。

创建一个名为 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在特定事件(比如播放时间变化)发生时,执行我们的批处理文件。
- 打开 PotPlayer,按
F5或右键 -> 选项。 - 在左侧菜单中找到并展开 滤镜 -> 外部滤镜。
- 点击右侧的 添加 -> 添加滤镜...。
- 在弹出的窗口中,选择 命令。
- 点击 浏览,找到你刚刚创建的
run_python.bat文件。 - 在下方的 命令行参数 框中,输入以下内容:
"%F" %T %L %S%F:当前播放文件的完整路径。%T:当前播放时间(秒)。%L:总时长(秒)。%S:播放状态(1=播放中, 2=暂停, 3=停止)。
- 滤镜名称 可以随意填写,
Python Runner。 - 滤镜路径 留空即可,因为我们选择的是“命令”。
- 点击 确定 保存。
第4步:测试
- 重启 PotPlayer 以确保新设置生效。
- 播放任意一个视频文件。
- 播放几秒钟后,暂停一下,再继续播放。
- 检查你的脚本所在目录,应该会生成一个
potplayer_log.txt文件,里面记录了播放时间和文件名。
使用URL协议(高级玩法)
这种方法更“隐蔽”,适合制作一些一键触发的功能,比如通过快捷键打开一个网页,而这个网页会触发本地的Python脚本。
原理
- 注册URL协议:在Windows注册表中添加一个自定义的URL协议(
python://)。 - 关联执行程序:让这个协议关联到一个批处理文件或Python脚本。
- PotPlayer调用:在PotPlayer的“关联播放”或“快捷键”中,设置一个链接,如
python://do_something?param=value。 - 触发执行:当PotPlayer访问这个链接时,系统会调用注册的程序,并传递参数。
步骤
第1步:注册URL协议
- 按
Win + R,输入regedit打开注册表编辑器。 - 导航到
HKEY_CLASSES_ROOT。 - 右键点击
HKEY_CLASSES_ROOT,选择 新建 -> 项。 - 将这个新项命名为
python(或者你想要的任何协议名,如mypot)。 - 选中新建的
python项,在右侧窗口右键,选择 新建 -> 字符串值。- 名称改为
(默认) - 双击它,数值数据设置为
URL:Python Protocol(这只是描述,可以任意)。
- 名称改为
- 在
python项下,再新建一个名为shell的项。 - 在
shell项下,新建一个名为open的项。 - 在
open项下,新建一个名为command的项。 - 选中
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或命令的地方使用它了。
-
关联播放:
F5-> 关联播放 -> 添加。- 扩展名 填
mp4(或任何你想关联的格式)。 - 命令 填
python://open?file=%F。 - 这样,当你用PotPlayer打开一个视频时,就会触发这个URL。
-
快捷键:
F5-> 快捷键 -> 添加。- 按键 设置为你想要的快捷键,
Ctrl+Alt+S。 - 命令 填
python://search?keyword=PotPlayer。 - 按下
Ctrl+Alt+S,你的Python脚本就会被调用,并执行搜索操作。
使用本地HTTP服务器(最强大、最灵活)
这是功能最强大的方法,适合需要双向通信、实时反馈的场景。
原理
- 启动HTTP服务:你的Python脚本启动一个本地的HTTP服务器(监听
0.0.1:8080)。 - PotPlayer作为客户端:在PotPlayer的设置中,配置一个命令,这个命令会向本地HTTP服务器的特定API端点发送一个HTTP请求(GET或POST)。
- Python处理请求:Python脚本接收到请求后,执行相应逻辑,并可以返回响应给PotPlayer(通过修改PotPlayer的UI文本)。
-
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() -
PotPlayer设置:
- 在 外部滤镜 -> 命令 中,添加一个命令。
- 命令 填写:
curl http://127.0.0.1:8080/time(如果你的系统有curl) 或者powershell -Command "Invoke-RestMethod -Uri 'http://127.0.0.1:8080/time'"。 - 这样每次触发,PotPlayer都会向你的Python服务器发送一个请求。
-
启动方式:
- 你需要先手动运行
python server.py启动这个后台服务。 - 为了方便,可以创建一个启动脚本,或者将Python脚本设置为开机自启。
- 你需要先手动运行
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 批处理文件 | 简单、直接、兼容性最好、无需额外知识 | 功能相对单一,主要用于触发和传递参数 | 绝大多数需求,如日志记录、简单的通知、文件处理。 |
| URL协议 | “优雅”、可以集成到网页/链接中、支持复杂参数传递 | 注册表配置稍显复杂、调试不便 | 制作自定义快捷键、与PotPlayer的“关联播放”功能深度结合。 |
| HTTP服务器 | 最强大、最灵活、支持双向通信、可扩展性强 | 实现最复杂、需要长期运行一个后台服务、有端口占用风险 | 需要实时交互、动态控制PotPlayer(如获取/设置播放列表、进度)、构建复杂插件。 |
给你的建议:
- 如果你只是想 偶尔调用一下Python脚本 来处理一些事情(比如记录日志、截图后OCR识别),方法一(批处理文件) 是你的最佳选择。
- 如果你希望用 快捷键 来触发一些特定功能(搜索当前视频演员”),方法二(URL协议) 会非常酷。
- 如果你正在构思一个 功能丰富的PotPlayer插件,需要实时获取信息并反馈给用户,那么请选择 方法三(HTTP服务器),这是专业级的解决方案。
