[Python+Lua] 在 mpv 里刷抖音推荐
前言
用 mpv 看视频是一种享受——轻量、无广告、快捷键自由、超低资源占用。
这个工具把抖音推荐 Feed 完整搬进了 mpv:
- Python 后端直接调用抖音 Web API 获取推荐内容
- 通过 mpv IPC 协议控制播放,自动选最高画质(支持 H.265)
- 支持普通视频 + 直播间
- Lua 脚本极简,只做按键→HTTP 请求转发,零业务逻辑
- mpv 未运行时自动启动,无需手动操作
整个方案不需要浏览器、不需要油猴脚本,两个文件搞定。
效果
- 启动服务后自动拉取推荐并播放第一个视频
Alt+RIGHT / Alt+j 切下一个,Alt+LEFT / Alt+k 回上一个
- 视频播完自动切下一个
- OSD 显示视频标题、作者、画质、队列位置
- 队列剩 1 个时后台预取下一页,切换无感
架构
┌─────────────────────────────────────────┐
│ mpv 播放器 │
│ ┌─────────────────────────────────┐ │
│ │ douyin_control.lua (~75行) │ │
│ │ 按键 → curl → HTTP 请求 │ │
│ └────────────┬────────────────────┘ │
│ │ HTTP (fire-and-forget) │
└───────────────┼─────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ douyin_server.py │
│ ┌──────────┐ ┌───────────────────┐ │
│ │ HTTP 服务 │ │ 抖音 API 客户端 │ │
│ │ :8080 │ │ Feed / 直播间 │ │
│ └────┬─────┘ └────────┬──────────┘ │
│ │ │ │
│ ┌────┴─────────────────┴──────────┐ │
│ │ mpv IPC 客户端 │ │
│ │ Unix Socket / Windows Named Pipe│ │
│ │ 自动启动 mpv + 轮询就绪 │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
Lua 只是一个"键盘遥控器",所有逻辑在 Python 里:获取 Feed、解析画质、选择最高分辨率、获取直播流、管理预取队列、控制 mpv 播放。
依赖
- Python 3.10+
- mpv(需支持
--input-ipc-server 和 --script)
- curl(系统自带,Lua 通过 curl 发 HTTP 请求)
- aiohttp:
pip install aiohttp
使用方法
1. 导出 Cookie
打开浏览器,登录 douyin.com,使用 Cookie 导出扩展(如 EditThisCookie、Cookie-Editor)导出抖音 Cookie,保存为 douyin_cookies.json,与 douyin_server.py 放在同一目录。
支持三种格式:
// 格式1: JSON 对象
{ "msToken": "xxx", "ttwid": "xxx", ... }
// 格式2: JSON 数组(EditThisCookie 等扩展导出格式)
[{"name": "msToken", "value": "xxx"}, {"name": "ttwid", "value": "xxx"}]
// 格式3: Netscape 格式(某些导出工具)
# Netscape HTTP Cookie File
.douyin.com TRUE / TRUE 1234567890 msToken xxx
2. 启动服务
pip install aiohttp
python douyin_server.py
看到以下输出说明启动成功:
================================
抖音推荐服务 (Python + mpv IPC)
================================
HTTP: http://127.0.0.1:8080
MPV IPC: /tmp/mpv-douyin
Cookie: /path/to/douyin_cookies.json
已加载 42 个 Cookie
[Feed] +8 个视频 (队列:8 更多:True)
> 播放: @某作者 - 视频标题...
mpv 会自动启动(服务启动时),无需手动运行。关闭后可手动运行start_mpv.bat
3. 快捷键
| 按键 |
功能 |
Alt+RIGHT / Alt+j |
下一个视频 |
Alt+LEFT / Alt+k |
上一个视频 |
i |
显示当前视频信息 |
Alt+s |
服务器状态(队列数、Cookie 状态等) |
也可自定义绑定
例如我使用的mpv-lazy在input_uosc.conf里添加:
| 按键 |
功能 |
| UP |
script-binding douyin_prev |
| DOWN |
script-binding douyin_next |
| WHEEL_UP |
script-binding douyin_prev |
| WHEEL_DOWN |
script-binding douyin_next |
视频播完会自动切换下一个。
4. 手动启动 mpv(可选)
一般不需要,服务会自动启动。如需手动:
mpv.exe --input-ipc-server=\\.\pipe\mpv-douyin --script=douyin_control.lua --idle=yes --force-window=yes
配置项
在 douyin_server.py 顶部可调整:
PORT = 8080 # HTTP 服务端口
FEED_COUNT = 10 # 每页获取视频数
INCLUDE_LIVE = True # False 则跳过直播间卡片
功能特性
智能预取
队列剩余 ≤ 1 个视频时,后台自动预取下一页,切换视频时无需等待加载。
HTTP 接口
服务监听 127.0.0.1:8080,提供以下接口(Lua 通过 curl 调用,也可手动调试):
| 接口 |
方法 |
说明 |
/next |
GET |
下一个视频 |
/prev |
GET |
上一个视频 |
/info |
GET |
当前视频信息(OSD 显示) |
/status |
GET |
服务器状态 |
/prefetch |
GET |
手动预取下一页 |
/cookie |
POST |
更新 Cookie(JSON body) |
# 手动测试
curl http://127.0.0.1:8080/next
curl http://127.0.0.1:8080/status
目录结构
已知问题(已满足个人需求所以未处理)
- 只获取了视频,不包含直播
- 视频分辨率只有720p
- 没有评论等信息
下载
打包了exe,也可自行用源码打包,exe执行成功不会有任何提示,直接打开mpv
免责声明
本工具仅供学习交流使用,请勿用于任何商业用途。使用本工具所产生的一切后果由使用者自行承担。