joeseesun/qiaomu-youtube-download

GitHub: joeseesun/qiaomu-youtube-download

一款基于 yt-dlp 的 YouTube 下载与搜索 Agent 技能,支持视频、音频、字幕和元数据获取,提供自动版本检查、文件锁和媒体验证以确保下载可靠。

Stars: 3 | Forks: 1

# qiaomu-youtube-download [![Last commit](https://img.shields.io/github/last-commit/joeseesun/qiaomu-youtube-download?style=flat-square)](https://github.com/joeseesun/qiaomu-youtube-download/commits/main) [![License](https://img.shields.io/github/license/joeseesun/qiaomu-youtube-download?style=flat-square)](LICENSE) npx skills add joeseesun/qiaomu-youtube-download ## 为什么值得用 旧版 `yt-search-download` 把 YouTube Data API Key 错误地设成所有命令的前置条件,导致普通下载也可能直接退出;它还会自动尝试浏览器 Cookie,却不返回实际文件路径和媒体验证结果。 `qiaomu-youtube-download` 将 URL 下载与搜索解耦:下载不要求 API Key;配置 Key 时,搜索与统计信息优先使用 YouTube Data API v3。每次下载任务先对照 yt-dlp 官方稳定版检查并按需升级。下载默认自动读取本机浏览器 Cookie 以提高稳定性,Cookie 读取失败时自动回退公开无 Cookie 路径。长任务持续输出进度并用跨进程锁阻止重复写入;下载后只验证最终媒体、清理本次残留格式分片,并返回真实绝对路径。 ## 安装 npx skills add joeseesun/qiaomu-youtube-download 本地验证: python3 ~/.agents/skills/qiaomu-youtube-download/scripts/validate_skill.py ~/.agents/skills/qiaomu-youtube-download python3 ~/.agents/skills/qiaomu-youtube-download/scripts/trigger_eval.py ~/.agents/skills/qiaomu-youtube-download python3 ~/.agents/skills/qiaomu-youtube-download/scripts/test_youtube.py python3 ~/.agents/skills/qiaomu-youtube-download/scripts/youtube.py doctor ## 你可以直接这样说 - “下载这个 Shorts:https://www.youtube.com/shorts/xxxx” - “把这个 YouTube 视频保存到当前目录,最高画质” - “这期播客只要 MP3:https://youtu.be/xxxx” - “下载这个视频的中英文字幕,给我 SRT 和 TXT” - “查一下这个 YouTube 视频的标题、时长和分辨率” - “在 YouTube 搜索最近的 AI Agent 视频” ## 它会做什么 1. 对照 yt-dlp 官方 GitHub 最新稳定版检查本机版本,只在过期时按当前安装方式升级并复验。 2. 严格校验 YouTube URL,不接受链接内凭据、自定义端口或其他域名。 3. 默认自动检测本机浏览器 Cookie;读取失败时回退无 Cookie 下载单个视频。 4. 支持最佳画质、1080p、720p、480p、MP3、字幕及基础搜索。 5. 使用包含视频 ID 的文件名,避免不同视频重名;同一任务用文件锁阻止两个 yt-dlp 同时写入。 6. 长下载持续输出进度;超时或中断时终止整个子进程组,避免孤儿进程。 7. 排除 `.f140-7.m4a`、`.f399.mp4` 等分离格式文件,只用 `ffprobe` 验证最终媒体。 8. 最终验证成功后清理本次新产生的格式分片,并返回机器可读 JSON。 ## 前置条件 - [ ] Python 3.10+:`python3 --version` - [ ] yt-dlp:`yt-dlp --version` - [ ] FFmpeg/ffprobe:`ffmpeg -version`、`ffprobe -version` - [ ] 可选搜索增强:`YT_BROWSE_API_KEY` 或 `YOUTUBE_API_KEY` - [ ] 用户有权访问并保存目标内容 下载不需要 YouTube Data API Key;Key 只增强搜索、发布时间和播放/点赞统计。 ## 命令示例 # 检查并按需升级 yt-dlp(Agent 下载前默认执行) python3 scripts/youtube.py doctor --upgrade # 查看信息 python3 scripts/youtube.py info 'https://www.youtube.com/shorts/VIDEO_ID' # 下载最佳画质 python3 scripts/youtube.py download 'VIDEO_URL' --dir ~/Downloads # 限制到 1080p python3 scripts/youtube.py download 'VIDEO_URL' --quality 1080p --dir ~/Downloads # 提取 MP3 python3 scripts/youtube.py audio 'VIDEO_URL' --dir ~/Downloads # 字幕:SRT + TXT python3 scripts/youtube.py subtitles 'VIDEO_URL' --langs 'en,zh-Hans' --dir ~/Downloads # 基础搜索 python3 scripts/youtube.py search 'AI agents' --max 10 # 禁用自动浏览器 Cookie python3 scripts/youtube.py download 'VIDEO_URL' --cookies-from-browser none ## 输出示例 { "ok": true, "command": "download", "id": "VIDEO_ID", "title": "Video title", "files": [ { "path": "/Users/example/Downloads/Video title [VIDEO_ID].mp4", "bytes": 12345678, "video_codec": "h264", "width": 1080, "height": 1920, "duration_seconds": 49.0 } ], "cookies_from_browser": "chrome", "data_api_used": true } ## API、Cookie 与隐私 如果设置了 `YT_BROWSE_API_KEY` 或 `YOUTUBE_API_KEY`,搜索和统计优先使用 YouTube Data API v3;Key 不会进入命令输出或报告。没有 Key 或 API 暂时失败时自动使用 yt-dlp 搜索。 下载默认使用 `--cookies-from-browser auto`,按 Chrome、Edge、Firefox、Safari 检测本机浏览器;自动读取失败时回退无 Cookie。可明确指定或禁用: python3 scripts/youtube.py download 'VIDEO_URL' --cookies-from-browser chrome python3 scripts/youtube.py download 'VIDEO_URL' --cookies-from-browser none Cookie 仅由本机 `yt-dlp` 临时读取,不复制到 Skill、不打印、不写入报告。 ## yt-dlp 更新策略 `doctor` 只查询 [yt-dlp 官方 GitHub Releases](https://github.com/yt-dlp/yt-dlp/releases/latest),API 限流时回退同一官方仓库的 latest 重定向。加 `--upgrade` 后,只有稳定版确实较新才执行更新:Homebrew 安装使用 `brew upgrade yt-dlp`,其他安装使用当前 yt-dlp 的 `-U`。更新后会重新读取版本;GitHub 暂不可达时只返回 warning,不阻断下载。 这个步骤会在必要时修改本机 yt-dlp 安装,但不会安装其他依赖、降级或执行来自视频页面的命令。 ## Troubleshooting | 症状 | 原因 | 处理 | |---|---|---| | `yt-dlp not found` | 未安装依赖 | `brew install yt-dlp` | | yt-dlp 检查显示 `outdated: true` | 只运行了 `doctor`,未允许升级 | 运行 `python3 scripts/youtube.py doctor --upgrade` | | `update-check` warning | GitHub API 暂时不可达或限流 | 继续使用现有版本下载,稍后重试 `doctor --upgrade` | | `upgrade` 失败 | 包管理器权限、锁或安装方式不支持自更新 | 按 JSON 中的 manager 检查 Homebrew/yt-dlp,再重试 | | 只能得到低清视频 | 缺少 ffmpeg,无法合并最佳视频与音频 | `brew install ffmpeg` | | Data API 配额、Key 或网络错误 | 官方搜索增强不可用 | 自动回退 yt-dlp 搜索;下载不受影响 | | 提示登录、年龄或地区限制 | 浏览器 Cookie 不存在、已过期或账号无权限 | 登录浏览器后重试,或显式指定其他浏览器 | | 浏览器 Cookie 读取失败 | 浏览器数据库被锁、Keychain 未授权或浏览器不受支持 | 关闭相关浏览器重试,或不使用 Cookie | | 终端暂时没有最终 JSON | 长下载仍在原会话运行 | 继续轮询同一个 session/cell;不要重复执行下载命令 | | `another download ... is still running` | 同一视频与目录已有进程持锁 | 等待原会话,确认原进程结束后再续传 | | `.f140-7.m4a` 被误报为“没有视频流” | 旧版把 yt-dlp 分离音轨当最终视频验证 | 升级到 v1.2.0;最终验证会排除并清理本次新格式分片 | | 没有字幕文件 | 视频没有所选语言的人工/自动字幕 | 调整 `--langs`,或另走 ASR 转录 Skill | | 已存在同名文件 | 默认禁止覆盖 | 保留既有文件;新视频用 ID 区分 | ## 风险与边界 - 只下载用户有权访问和保存的内容。 - 不绕过付费、登录、地域、年龄、版权或 DRM 限制。 - 默认会在本机自动读取检测到的浏览器 Cookie,可用 `--cookies-from-browser none` 禁用;Cookie 不复制、不打印、不写入报告。 - 默认单视频,不无限批量抓取频道或播放列表。 - 同一视频/目录/操作使用临时文件锁;锁不包含 URL、标题、Cookie 或 API Key。 - `doctor --upgrade` 会在检测到官方稳定新版时修改现有 yt-dlp 安装;不会升级其他 Homebrew 公式。 - 不负责重新上传、转载或规避平台政策。 ## License MIT Copyright (c) 向阳乔木 · [X](https://x.com/vista8) · [GitHub](https://github.com/joeseesun/)
标签:逆向工具