1实现原理 · 为什么它能做到
核心是 yt-dlp/ffmpeg CLI 封装:SKILL.md 指导 agent 用 yt-dlp 下载、ffmpeg 处理 HLS/转码,并自带 python 包装脚本 download_video.py 把下载流程程序化。
Enable reliable video and audio downloads from YouTube and HLS streaming platforms (Mux, Vimeo, etc.) using yt-dlp and ffmpeg.
PO Token 提供者自动编排(高画质关键):自动 pip 安装插件进 yt-dlp 的 Python 环境,优先 docker 跑 brainicism/bgutil-ytdlp-pot-provider 容器(-p 4416:4416),ping 127.0.0.1:4416 探活,Docker 缺失/失败则回退 pip 安装 yt-dlp-getpot-wpc 走浏览器 WPC 方案。
run_cmd = ["docker", "run", "-d", "--name", name] ... "-p", "4416:4416", *env_args, "--init", "brainicism/bgutil-ytdlp-pot-provider"
cookie 认证路径:经授权后把浏览器 cookie 会话交给 yt-dlp(--cookies-from-browser chrome/firefox 或 --cookies 文件),有 cookie 时强制 youtube player client 走 web_safari。
cmd.extend(["--cookies-from-browser", cookies_from_browser]) ... elif cookies_file: cmd.extend(["--cookies", cookies_file])
面向非技术用户的 UX 编排:agent 全代跑——先 --info 取元数据(失败走 YouTube oEmbed 兜底)确认视频身份,再按默认/选择下载,最后报告文件路径、大小、分辨率,全程不要求用户敲命令。
Assume the user is non-technical. Do not ask them to run commands. Execute everything yourself and report progress in plain language.
错误驱动重试链:把 yt-dlp 常见失败(403 / nsig / 'Only images are available' / SSL EOF)映射为策略——403 退非 m3u8 progressive 格式;PO token 故障则重启容器或切 WPC 重试;cookie+403 则换 web_safari client。
return "http error 403" in text or "403: forbidden" in text or "fragment 1 not found" in text
代理感知设计(面向中国大陆网络):读取环境代理 ALL_PROXY/HTTPS_PROXY/HTTP_PROXY 透传给 yt-dlp、pip、docker 容器,localhost 代理改写为 host.docker.internal;pip 走硬编码清华镜像 pypi.tuna.tsinghua.edu.cn。
PYPI_MIRROR = "https://pypi.tuna.tsinghua.edu.cn/simple"
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | yt-dlp |
| cli | ffmpeg / ffprobe |
| cli | docker |
| cli | python / pip(yt-dlp 解释器) |
| network | youtube.com(下载取流 + oEmbed 元数据) |
| network | 清华 PyPI 镜像(硬编码装插件源) |
| network | Docker Hub 镜像 brainicism/bgutil-ytdlp-pot-provider(第三方 PO token 服务,拉取即执行) |
| network | 本机 PO provider 探活端点 |
| network | 用户提供任意视频/HLS URL(m3u8 可指向任意第三方 CDN,如 Mux/Vimeo) |
| package | bgutil-ytdlp-pot-provider(pip 插件) |
| package | yt-dlp-getpot-wpc(pip 浏览器版 token 提供者,会启动真实浏览器) |
4风险提醒 风险提醒:黄色 · 留意使用
- cookie 授权无程序强制,依赖 agent 遵循 SKILL 文本;恶意链接/长上下文可诱导携 cookie 下载 — SKILL.md 'Ask before extracting browser cookies.' 只是约定;cookie 解密后位于 yt-dlp 内存/下载流中
- 供应链信任:自动 pip 装插件 + docker 常驻第三方 brainicism 镜像,容器内代码不在本 repo 审计范围 — .security-scan-passed 只是目录静态文本 gitleaks 标记(Content hash 6dc9ae…),不含运行时第三方代码
- WPC 路径会真实拉起本机 Chrome 在用户登录态访问 YouTube 铸 token,属用户身份下的外部请求 — SKILL.md 'Keep the browser window open while WPC is minting tokens.' + with_wpc_browser 传参
- 任意 URL/headers 原样信任:可被诱导对任意端点(含内网)发起 yt-dlp/ffmpeg 请求;HLS 的 Referer/Origin headers 由用户提供直接使用 — SKILL.md HLS 章节要求从 DevTools 复制 headers 喂 ffmpeg;下载 URL 无白名单/校验
- 环境改动面大:pip 写 yt-dlp 的 Python 环境、docker 起常驻容器、--output-template 支持绝对路径任意写 — build_output_template 对绝对模板原样接受;脚本无任何输出路径限制
5第二遍独立确认
- [ok] yt-dlp 调用真实存在(下载/-F/-o/-f/--dump-json) — 脚本 cmd = ["yt-dlp"] 起步(738 行),全部参数列表化
- [ok] ffmpeg/ffprobe 调用 — SKILL.md 多处 ffmpeg 命令 + 脚本 get_video_resolution 中 which ffprobe 实测存在
- [ok] cookie 读取路径(--cookies-from-browser / --cookies) — 773-776 行真实拼接;注意解密主体是 yt-dlp 而非脚本,脚本无 cookie 解析代码
- [ok] cookie 日志脱敏 filter_cookie_lines — 仅过滤含 'extracting cookies' 或 'extracted'+'cookies' 的行,非完整脱敏(其他含 cookie 内容行仍会输出)——实现与声称基本一致,范围略窄
- [ok] oEmbed 兜底网络端点 — 660-663 行 urlopen youtube.com/oembed,URL 经 quote 编码,无注入面
- [ok] PO token:docker bgutil 容器 + 4416 ping 探活 — 437-446/553-563 行 docker run brainicism 镜像,255-257 行 ping;容器内实现本 repo 无法审计 → 供应链项如实标注
- [ok] WPC 浏览器回退自动拉起 Chrome — 脚本只传 --extractor-args youtubepot-wpc:browser_path=…(249-252 行)+ find_chrome_path;真实浏览器启动由第三方插件 yt-dlp-getpot-wpc 完成,脚本侧证据到传参为止
- [ok] pip 自动安装插件(清华镜像) — 350、377 行安装命令真实存在,PYPI_MIRROR 38 行硬编码
6结论
63a65c1fcc