YouTube视频下载器
使用yt-dlp下载YouTube内容的Python工具的综合集合,包括简单的脚本和高级MCP服务器。
工具
1.简单脚本
单视频下载器(youtube_downloader.py)
下载带有进度跟踪的单个YouTube视频。
播放列表下载器(playlist_downloader.py)
有序下载整个YouTube播放列表。
2.MCP服务器(youtube_mcp_server_fastmcp.py)
使用FastMCP的高级MCP(模型上下文协议)服务器,提供:
- 异步视频和播放列表下载
- 作业跟踪和状态监控
- 用于元数据存储的SQLite数据库
- 图书馆综合管理
- Claude桌面集成
特性
简单脚本
单视频下载器
- ✅ 提示用户输入YouTube URL
- ✅ 下载最优质的视频
- ✅ 创建一个
downloads保存视频的文件夹 - ✅ 显示下载进度
- ✅ 优雅地处理错误
- ✅ 如果yt-dlp不存在,则自动安装yt-dlp
- ✅ 无pytube依赖性(根据要求)
播放列表下载器
- ✅ 提示用户输入YouTube播放列表URL
- ✅ 下载整个播放列表(默认情况下最多50个视频)
- ✅ 为每个播放列表创建有组织的文件夹
- ✅ 下载前显示播放列表信息
- ✅ 下载带有播放列表索引号的视频
- ✅ 如果yt-dlp不存在,则自动安装yt-dlp
- ✅ 下载大型播放列表前的确认提示
MCP服务器功能
- ✅ 异步下载:开始下载并获取用于跟踪的作业ID
- ✅ 作业状态监控:检查下载进度和状态
- ✅ 元数据库:带有视频/播放列表信息的SQLite数据库
- ✅ 图书馆管理:浏览所有下载的内容
- ✅ 错误处理:全面的错误跟踪和报告
- ✅ 并发下载:可以同时运行多个下载
- ✅ 元数据:存储标题、描述、持续时间、文件路径等。
需求
- Python 3.11+
- yt-dlp(丢失时自动安装)
- MCP SDK(丢失时自动安装)
用法
单视频下载
- 运行单个视频下载程序:
python3 youtube_downloader.py- 出现提示时输入YouTube URL
- 视频将下载到
downloads文件夹
播放列表下载
- 运行播放列表下载程序:
python3 playlist_downloader.py- 出现提示时输入YouTube播放列表URL
- 查看播放列表信息并确认下载
- 所有视频都将下载到特定于播放列表的文件夹中
MCP服务器使用情况
MCP服务器为异步下载和库管理提供了四种主要工具。
与紫外线一起使用(推荐)
- 安装依赖项并运行:
cd /Users/granludo/code/testing/youtube_download
uv sync
uv run python start_server.py直接使用Python
python3 youtube_mcp_server_fastmcp.py可用的MCP工具
- 下载_视频 -开始异步视频下载
- 下载播放列表 -开始异步播放列表下载
- get_download_status -监控下载进度
- cancel_下载 -取消正在运行的下载
- list_downloads -浏览所有下载作业
- 获取_视频_元数据 -无需下载即可获取视频信息
例子
单个视频示例
$ python3 youtube_downloader.py
==================================================
YouTube Video Downloader
==================================================
Enter YouTube URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ
📥 Downloading video from: https://www.youtube.com/watch?v=dQw4w9WgXcQ
✓ Download completed!
📁 Files saved to: /path/to/downloads播放列表示例
$ python3 playlist_downloader.py
==================================================
YouTube Playlist Downloader
==================================================
Enter YouTube Playlist URL: https://www.youtube.com/playlist?list=PLrAXtmRdnEQy5rhxJj7aKre_2qO5yQ5nI
📊 Analyzing playlist...
📋 Playlist name: My Music Playlist
🎥 Number of videos: 25
🔄 Download 25 videos? (y/N): y
📥 Downloading playlist: My Music Playlist
✓ Playlist download completed!
📁 All videos saved to: /path/to/playlists/My Music PlaylistMCP服务器示例
使用紫外线
- 安装并运行服务器:
cd /Users/granludo/code/testing/youtube_download
uv sync # Install dependencies
uv run python start_server.py # Start server- 服务器将静默启动 (根据MCP协议的要求,没有stdout输出)
MCP工具示例
工具1:下载单个视频
{
"name": "download_video",
"arguments": {
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"output_dir": "downloads"
}
}答复: "Download started successfully. Job ID: abc123-def456-ghi789"
工具2:下载播放列表
{
"name": "download_playlist",
"arguments": {
"url": "https://www.youtube.com/playlist?list=PLrAXtmRdnEQy5rhxJj7aKre_2qO5yQ5nI",
"output_dir": "playlists"
}
}答复: "Playlist download started successfully. Job ID: def456-ghi789-jkl012"
工具3:检查下载状态
{
"name": "get_download_status",
"arguments": {
"job_id": "abc123-def456-ghi789"
}
}响应:包含作业状态、进度和元数据的JSON对象
工具4:列表下载
{
"name": "list_downloads",
"arguments": {}
}答复:
📹 VIDEOS:
- Never Gonna Give You Up (ID: video-uuid-123)
Path: /downloads/Never Gonna Give You Up.mp4
Duration: 213s
📁 PLAYLISTS:
- Music Collection (ID: playlist-uuid-456)
Videos: 25
Path: /playlists/Music Collection完整工作流示例
- 配置Claude桌面 -将MCP服务器添加到您的
claude_desktop_config.json:
{
"mcpServers": {
"youtube-mcp-tools": {
"command": "/opt/homebrew/bin/uv",
"args": [
"--directory",
"/Users/granludo/code/testing/youtube_download",
"run",
"start_server.py"
]
}
}
}- 下载视频 克劳德:
"Download this YouTube video: https://www.youtube.com/watch?v=jNQXAC9IVRw"服务器将启动下载并立即返回作业ID。
- 检查下载状态:
"What's the status of that download?"- 列出所有下载:
"Show me all my download jobs"备注
简单脚本
- 如果找不到yt-dlp,这两个脚本都会自动安装yt-dlp
- 视频与原始标题一起保存
- 播放列表视频按其在播放列表中的位置编号
- 默认情况下,播放列表下载器将下载限制为50个视频(可调)
- 这两个脚本都能优雅地处理键盘中断
- 下载被组织在单独的文件夹中,分别用于视频和播放列表
MCP服务器
- 使用FastMCP简化MCP服务器实施
- 创建
youtube_library.db用于元数据的SQLite数据库 - 最多支持3次并发下载
- 每次下载都使用唯一的UUID进行作业跟踪
- 丰富的元数据存储,包括标题、描述、持续时间、文件路径
- 异步下载,立即返回作业ID
- 全面的错误处理和记录
- 与Claude Desktop和其他MCP客户端兼容
