基于 yt-dlp 的全平台视频下载桌面工具
EasyGet 是一款基于 yt-dlp 并扩展专用解析器的 Windows 桌面视频下载工具,支持 YouTube、Bilibili、X(Twitter)、Instagram、抖音、央视频等网站的视频下载。项目采用 WPF + MVVM 架构,提供暗色主题、多任务队列、下载历史、智能登录与 Cookie、播放列表导入和环境自动安装等能力。
以下截图基于当前版本截取,示例路径与历史内容已做脱敏处理。
| 视频下载 | 批量下载 |
|---|---|
![]() |
![]() |
| 历史记录 | 设置 |
|---|---|
![]() |
![]() |
- 单视频下载 — 输入 URL 后自动解析标题、平台、时长、缩略图,支持格式、画质、字幕与目录选择
- 批量下载 — 多 URL 去重后立即全部入队,后台有界并发解析元数据,同平台任务共享认证结果;支持播放列表导入、总进度/完成数量/总速度/ETA 展示、队列筛选和批量控制
- 智能登录与 Cookie — 公开内容先匿名下载;确需登录时自动尝试本机浏览器配置,全部不可用才显示一次平台托管登录窗口,登录后原任务自动继续
- 任务控制 — 支持单项停止、暂停、恢复、失败或取消后重试、停止全部未完成任务与清理已结束任务
- 下载历史资料库 — SQLite 持久化存储,支持搜索、合集折叠、自定义整理文件夹、整组/全选、批量移动或删除以及拖拽整理;整理操作不会移动已经下载的本地文件
- m3u8 视频流下载 — 自动识别
.m3u8或.m3n8播放列表并调用 16 线程高速分片下载,支持进度速度计算,并由 ffmpeg 自动 remux 合并为 MP4(对加密流有防护校验) - 央视频专用下载 — 识别
yangshipin.cn/video/home?vid=...页面,使用本机 Edge/Chrome 在隐藏模式下获取当次有效的公开 MP4 地址,支持文件大小预览、进度显示、失败重试与断点续传;不绕过会员、地区或受保护媒体限制。实现与限制见 央视频识别与下载说明 - Telegram 媒体直链流式下载 — 纯 C# 原生对接 Telegram 核心网络套接字(基于 MTProto WTelegramClient),自动匹配公开(如
t.me/durov/123)或私有(如t.me/c/xxxx/xxxx)频道直链及批量范围消息,流式分块下载,支持代理外挂与断点续传 - 智能环境检测 — 启动时自动检测 yt-dlp / ffmpeg,缺失则从官方发布源自动下载安装,并支持在设置页手动重试与更新 yt-dlp
- 应用版本更新 — 设置页可检查 GitHub Release 最新版本,下载
EasyGet-Setup-vX.Y.Z.exe并启动安装器覆盖升级
- 默认下载路径、格式、画质设置
- HTTP / SOCKS5 代理支持
- 并发分片数与同时下载数调节,批量下载并发上限可动态更新
- aria2c 外部下载器开关
- 智能 Cookie 默认开启,支持 Chrome、Edge、Firefox、Brave、Chromium、Vivaldi、Opera 和 Opera GX 的多个配置
- 高级手动 Cookie 导入必须绑定平台;Header、JSON 和 Netscape 格式按目标域隔离并使用 Windows DPAPI 加密保存
- 旧版本遗留但尚未归属平台的 Header Cookie 会先进入 DPAPI 加密隔离区,重新打开应用后仍可选择平台完成迁移,不会在退出时静默丢失
- 关闭智能 Cookie 自动探测后,用户主动保存的加密手动 Cookie 仍可使用;可从高级区域按平台独立清除
- 下载完成后按平台自动归类保存
- JSON 配置自动持久化
- 多主题实时换肤系统 — 基于精致暗色架构,提供星空靛蓝、极光青、玫瑰粉、琥珀金以及经典浅蓝等多种强调色方案,支持在设置页一键实时、零延迟切换,全局图标、选中指示器和主按钮均同步完美响应
- 极致动效系统 — 遵循轻量与克制的微动效规范,支持页面平滑入场(Slide + Fade)、队列卡片增删平移动画,以及删除时的左滑消隐动效
- 智能剪贴板监测 — 窗口激活时自动安全捕捉视频 URL,提供顶端轻量级浮条提醒,支持一键解析,8秒后自动收起
- 全局键盘快捷键 — 支持
Ctrl+1~4一键跨页导航;任意状态按Esc优先中止解析或一键关闭全部 Toast;非输入焦点下Ctrl+V直达下载页并自动解析 - 任务栏进度同步 — 利用
TaskbarItemInfo将下载队列进度(多任务时为加权平均进度)及状态(进行中、失败)实时同步至 Windows 任务栏,支持进度跑马灯 - Toast 堆叠队列 — 重构为可垂直堆叠的通知中心(最多保留3条最新通知),卡片底部配备跑马灯倒计时,支持鼠标 hover 悬停与手动提前关闭
- 极简日志降级 — 将原先 300px 常驻的大控制台降级为可折叠
Expander,折叠状态自记忆,标题栏支持复制日志、清空日志的一键平滑操作 - 交互防御性设计 — 清空历史记录、一键取消所有批量任务等破坏性操作前增加警告确认提示,防止用户因误触导致数据丢失
- 认证隐私边界 — 不读取或显示账号密码、验证码和 Cookie 值;日志、下载历史、普通配置备份不记录 Cookie 内容或完整浏览器配置路径
- 全局异常捕获与崩溃日志
- EasyGet 先匿名解析并下载公开内容,不弹登录窗口。
- 只有遇到明确的登录、年龄、机器人验证或 Cookie 失效错误时,才按最近成功记录、默认浏览器和最近活动时间尝试本机浏览器配置。
- 所有本机方案均不可用时,EasyGet 打开目标平台的真实登录页。账号、密码和验证码只提交给平台网页;登录完成后等待中的任务自动继续。
- 同一平台的批量任务共享一次认证请求,不重复弹窗;不同平台可并行处理。
“智能登录”不会绕过平台登录、验证码、地区限制、付费权限或服务条款。用户从未登录、会话过期或平台要求验证时,仍需在平台官网完成一次正常登录。详细说明见 Cookie 获取与使用操作手册。
EasyGet/
├── Models/ # 数据模型层
│ ├── AppConfig.cs # 应用配置模型
│ ├── DownloadTask.cs # 下载任务模型(ObservableObject)
│ ├── HistoryFolder.cs # 历史资料库整理文件夹模型
│ └── DownloadHistory.cs # 下载历史记录模型
├── Services/ # 服务层(业务逻辑)
│ ├── ConfigService.cs # JSON 配置读写
│ ├── YtDlpService.cs # yt-dlp 命令封装(核心服务)
│ ├── YangshipinDownloadService.cs # 央视频页面解析与 MP4 续传下载
│ ├── M3u8DownloadService.cs # m3u8 多线程下载服务
│ ├── TelegramDownloadService.cs # Telegram 原生下载服务
│ ├── DownloadManager.cs # 下载队列与并发管理
│ ├── HistoryService.cs # SQLite 历史 CRUD
│ ├── EnvironmentService.cs# 环境检测、自动安装与 yt-dlp 更新
│ ├── AppUpdateService.cs # GitHub Release 应用更新检查与安装包下载
│ └── DownloadFileNameBuilder.cs # 下载文件名与输出模板构建
├── ViewModels/ # 视图模型层
│ ├── MainViewModel.cs # 导航与全局状态
│ ├── DownloadViewModel.cs # 单视频下载逻辑
│ ├── BatchDownloadViewModel.cs # 批量下载逻辑
│ ├── HistoryViewModel.cs # 历史记录逻辑
│ └── SettingsViewModel.cs # 设置页逻辑(自动保存)
├── Views/ # 视图层(XAML)
│ ├── DownloadView.xaml # 单视频下载页
│ ├── BatchDownloadView.xaml # 批量下载页
│ ├── HistoryView.xaml # 历史记录页
│ └── SettingsView.xaml # 设置页
├── Themes/
│ └── Generic.xaml # VibeTracker Calm Apple Dark 主题 + 控件样式
├── Converters/
│ └── CommonConverters.cs # 值转换器(Bool/Visibility/Status 等)
├── EasyGet.Tests/ # 单元测试项目
├── App.xaml(.cs) # DI 容器 / 全局异常捕获
└── MainWindow.xaml(.cs) # 主窗口 + 侧边栏导航
| 技术 | 用途 |
|---|---|
| .NET 8 / WPF / C# 12 | 应用框架 |
| CommunityToolkit.Mvvm | MVVM 框架(源生成器) |
| Microsoft.Extensions.DependencyInjection | 依赖注入 |
| Microsoft.Data.Sqlite | 下载历史持久化 |
| Microsoft.Web.WebView2 | 平台托管登录窗口 |
| yt-dlp | 视频下载核心引擎 |
| ffmpeg | 音视频合并转码 |
| xUnit | 单元测试 |
- Windows 10 / 11
- .NET 8 SDK
# 克隆仓库
git clone https://github.com/zzf-857/EasyGet.git
cd EasyGet/EasyGet
# 还原依赖
dotnet restore
# 运行
dotnet run
# 运行测试
dotnet test EasyGet.Tests/EasyGet.Tests.csproj
# 发布并做 smoke 检查
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\publish-win-x64.ps1 -SkipZip
# 构建安装包(需要 Inno Setup 6)
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-installer.ps1 -Version 1.4.1提示: 首次运行时,EasyGet 会自动检测并下载 yt-dlp 和 ffmpeg,无需手动安装。yt-dlp 来自官方 GitHub Release,ffmpeg Windows 构建来自 FFmpeg 官网链接的 gyan.dev。
- MVVM 架构 + 依赖注入容器
- 侧边栏四页导航
- 单视频下载(URL 解析 / 格式选择 / 字幕选择 / 进度展示 / 取消)
- 批量下载(多 URL / 播放列表导入 / 队列管理 / 单任务操作)
- 批量任务总进度、完成数量、速度、ETA、状态筛选与批量控制
- SQLite 历史资料库(搜索 / 合集折叠 / 自定义文件夹 / 多选 / 拖拽 / 批量管理)
- 设置页(环境检测 / 路径 / 格式 / 代理 / Cookie / 性能)
- yt-dlp / ffmpeg 自动检测与安装
- yt-dlp 手动更新
- aria2c 外部下载器参数集成
- aria2c 可用性检测与不可用回退提示
- 并发数动态调整
- 下载暂停 / 恢复 / 取消 / 失败重试
- 下载完成、失败、取消 Toast 通知
- 缩略图解析与展示
- 平台隔离的智能 Cookie 编排、浏览器自动发现、WebView2 托管登录和加密手动导入
- 按平台自动归类保存
- 抖音浏览器兜底下载
- 多主题动态换肤(支持星空靛蓝、极光青、玫瑰粉、琥珀金、经典浅蓝等强调色在设置页一键实时无刷切换)
- 全局异常捕获 + 崩溃日志
- JSON 配置持久化
- 窗口位置 / 大小持久化
- 日志自动滚动到底部
- 剪贴板粘贴支持与智能 activated 自动监测提示(8秒超时)
- 全局键盘快捷键导航、中止与粘贴解析(Ctrl+1~4, Esc, Ctrl+V)
- 任务栏进度同步聚合展示(支持 Normal 与 Error 状态指示)
- Toast 堆叠队列与通知倒计时(最多3条垂直堆叠,支持悬停)
- 批量拖拽文件或文本链接自动导入与 Drop 虚线指示层
- 批量卡片 4 状态彩色条展示与动态操作按钮过滤
- SQLite 下载历史的按类型多选分段式筛选(RadioButton)
- 历史空态细分引导与无匹配结果一键清筛
- 破坏性敏感操作的二次防误触确认层
- 日志控制台 Expander 降级折叠与内联 URL 校验(不污染日志)
- m3u8/m3n8 格式多线程下载支持与 ffmpeg 自动转码 remux
- 央视频公开视频页面识别、动态临时地址解析与 MP4 断点续传下载
- Telegram 媒体直链原生下载方案(WTelegramClient tcp 握手),支持公有/私有链接拦截与范围消息下载
- Telegram 账号凭证分离存储(隔离于系统 AppData,安全不推送远端)与新手小白超链接绑定界面(支持发送验证码、提交 2FA 密码、注销等完整交互,提供 my.telegram.org 一键点击唤起浏览器访问)
- 800+ 个稳定自动化测试(覆盖 Cookie 安全与迁移、批量并发、ViewModel、命令、XAML、m3u8、Telegram、央视频与发布更新链路;真实站点另走脱敏手工验收)
- Windows 发布脚本与 EasyGet.exe smoke 检查
- GitHub Actions 自动打包发布与 Inno Setup 安装包
- 设置页应用更新检查、更新包下载与安装器启动
- 系统托盘或系统级 Toast 通知
- 真实站点下载速度与异常场景端到端验证
- 抖音浏览器兜底的网络中断、Range 续传和取消清理测试
- 动态并发调整的服务级测试
- 继续补齐 VibeTracker Calm Apple Dark 的环境光背景、导航动效与页面内容密度
- 国际化支持
- 更完整的单元测试和 UI 自动化测试
| 数据 | 位置 |
|---|---|
| 配置文件 | %LocalAppData%/EasyGet/config.json (包含 Telegram 绑定凭证,独立于项目,防推送泄露) |
| 配置备份 | %LocalAppData%/EasyGet/config.backup.json |
| 下载历史 | %LocalAppData%/EasyGet/history.db (SQLite) |
| Telegram 登录会话 | %LocalAppData%/EasyGet/tools/telegram.session (本地登录凭据,独立于项目,防推送泄露) |
| 手动 Cookie 加密仓库 | %LocalAppData%/EasyGet/manual-cookies/(按平台隔离;未归属的旧版内容暂存为加密隔离项;均使用 Windows DPAPI) |
| EasyGet 托管登录会话 | %LocalAppData%/EasyGet/sessions/<platform>/(各平台独立 WebView2 用户目录) |
| Cookie 健康元数据 | %LocalAppData%/EasyGet/cookie-health.json(仅策略与成功/失败类别,不含 Cookie 值或完整配置路径) |
| Cookie 临时租约 | %LocalAppData%/EasyGet/temp/cookies/(仅当前 Windows 用户可访问,进程结束即删除,启动时清理崩溃遗留) |
| 应用更新包 | %LocalAppData%/EasyGet/updates/ |
| 应用更新日志 | %LocalAppData%/EasyGet/logs/update.log |
| 崩溃日志 | <应用目录>/logs/crash_*.txt |
| yt-dlp | <应用目录>/tools/yt-dlp.exe |
| ffmpeg | <应用目录>/tools/ffmpeg.exe |
欢迎提交 Issue 和 Pull Request!
本项目基于 MIT License 开源。




