一个开源的三分屏视频下载 Python 脚本教学样例,支持将基于百家云的在线教育平台课程视频、音频、PPT 课件、板书手写标注完整下载并离线保存为本地 MP4 文件。
Caution
本项目仅供学习交流使用,请尊重知识产权,下载内容仅限个人学习,严禁用于商业用途或二次传播。
三分屏是在线教育、网课直播平台广泛采用的一种课程呈现格式,将教师讲解视频、PPT 课件画面、板书手写标注三个画面组合同步播放。国内众多在线教育平台均使用百家云等服务商提供的三分屏方案进行课程录制与回放。
本项目是一个三分屏视频下载脚本的教学样例,完整演示了如何通过逆向分析在线教育平台网页端,将三分屏课程的各个组成部分分别提取:
- 🎬 教师讲解视频(百家云 .ev1 格式 → MP4)
- 🎧 课程音频(MP3)
- 📄 PPT 课件页面图片(PNG)
- ✏️ 板书手写标注(白板事件流 → 逐帧渲染为 MP4 视频)
最终在本地还原出与在线播放一致的三分屏课件内容,适合需要网课离线下载、课程视频保存的学习者参考学习。
| 功能 | 说明 |
|---|---|
| 🔐 自动登录 | Playwright 浏览器自动化登录课程平台账号,Cookie 自动持久化 |
| 📚 课程管理 | 自动获取全部已购课程列表,支持多选和全选批量下载 |
| 🎬 教师视频下载 | 下载百家云 .ev1 格式课程视频,自动转码为 MP4 |
| 🎧 课程音频下载 | 下载每课时的 MP3 音频文件 |
| 📄 PPT 课件下载 | 并发下载所有 PPT 页面图片 |
| ✏️ 板书视频合成 | 逆向百家云白板协议,解析手写坐标,逐帧渲染 PPT + 标注为板书 MP4 |
| 🔀 音视频合成 | 将板书视频与音频自动合并为完整的板书视频 |
| 📋 播放列表生成 | 自动生成 PotPlayer 播放列表(.dpl),开箱即播 |
| ⏭️ 断点续传 | 已下载文件自动跳过,支持中断后继续下载 |
需要 Python 3.10+ 环境:
pip install -r requirements.txt
playwright install chromium本项目依赖 ffmpeg 进行三分屏视频转码与音视频合成。
Windows 推荐安装方式:
# 使用 winget
winget install ffmpeg
# 或使用 scoop
scoop install ffmpeg安装后确保 ffmpeg 在系统 PATH 中可用。也可修改 config.py 中的 FFMPEG_PATH 指向你的 ffmpeg 路径:
# config.py
FFMPEG_PATH = r"C:\your\path\to\ffmpeg.exe"python main.py首次运行
│
▼
打开浏览器 → 登录课程平台账号 → Cookie 自动保存到本地
│
▼
显示已购课程列表 → 输入编号选择要下载的课程(如 1,3 或 all)
│
▼
自动下载全部三分屏内容:教师视频 + 音频 + PPT 课件 + 板书视频
│
▼
生成 PotPlayer 播放列表 ✅
后续运行会自动使用已保存的 Cookie 登录,过期时自动弹出浏览器重新登录。
如果不方便使用浏览器自动化登录,也可以手动导入 Cookie:
python import_cookies.py按提示粘贴从浏览器 F12 控制台复制的 Cookie 即可完成登录。
每个课程会按照以下目录结构保存,完整还原三分屏课件的各个组成部分:
Download/
└── 课程名称/
├── {0}--课件/ # 课程附件
├── {1}--课程/ # 课程主体(三分屏内容)
│ └── 章节名/
│ ├── [1]--课时名.mp4 # 教师讲解视频
│ ├── [1]--课时名.mp3 # 课时音频
│ ├── [1]--课时名_板书.mp4 # 板书视频(PPT + 手写标注 + 音频)
│ └── .ppt_课时ID/ # PPT 课件原始页面图片
├── {2}--资料/ # 课程资料
├── 播放列表.dpl # PotPlayer 播放列表
└── 修复播放列表.bat # 播放路径修复脚本
TriPanel/
├── main.py # 主入口:登录、选课、下载编排
├── config.py # 配置:API 地址、路径、请求头
├── api.py # 课程平台 API 客户端(课程列表、课时、播放信息)
├── login.py # Playwright 浏览器登录 + Cookie 管理
├── import_cookies.py # 手动 Cookie 导入工具
├── extractor.py # 三分屏视频信息提取(API 拦截 + JS 注入)
├── downloader.py # 文件下载器(视频转码、并发下载、音视频合成)
├── board_renderer.py # 板书视频渲染器(白板事件解析 + 逐帧合成)
├── post_process.py # 后处理(目录整理、播放列表生成)
└── requirements.txt # Python 依赖
本脚本通过逆向分析在线教育平台网页端,打通了完整的三分屏视频下载数据链路:
课程平台 API
│ 获取课程列表、课时信息、播放 Token
▼
课程播放页
│ 获取百家云 roomId + playback Token
▼
百家云 SDK (Playwright 自动化注入)
│ 拦截 API 请求,提取三分屏视频 URL、白板事件流、PPT 文档信息
▼
本地下载与合成
├── 教师视频:.ev1 → ffmpeg → .mp4
├── 板书视频:解码白板坐标 → Pillow 逐帧渲染 → ffmpeg → .mp4
└── 音视频合成:板书视频 + 音频 → ffmpeg → 完整三分屏板书视频
- 百家云协议逆向:破解百家云
encodeType=2的自定义 Base64 坐标编码,还原板书手写轨迹 - 白板事件流解析:处理 2900+ 条白板事件(翻页、绘图、擦除等),重建完整板书时间线
- 三分屏板书合成:将 PPT 课件作为背景,叠加教师手写标注,逐帧渲染为 MP4 视频
- 帧缓存优化:相邻帧状态相同时复用 JPEG 数据,大幅提升渲染效率
- 多重转码策略:stream copy → FLV 强制输入 → 完整重编码,逐级降级确保视频转码成功率
- 仅支持已购买的课程,无法下载未购买内容
- 直播课需等回放生成后才可下载
- ffmpeg 视频转码需要一定的磁盘空间和 CPU 时间
- 请合理使用,避免频繁请求给服务器造成压力
本项目基于 MIT License 开源 — 可自由使用、修改和分发。
欢迎提交 Issue 和 Pull Request!
如果这个项目对你有帮助,给个 ⭐ Star 支持一下吧~
相关关键词: 三分屏视频下载、网课离线下载、百家云视频下载、课程视频保存、板书视频合成、PPT课件下载、在线教育课程下载工具、三分屏课件、.ev1视频转码、白板视频合成、三分屏录制