1仕組みと動作原理
中核は yt-dlp/ffmpeg CLI のラッパー:SKILL.md がエージェントに対し、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 プロバイダーの自動オーケストレーション(高画質の要):yt-dlp の Python 環境へプラグインを pip で自動インストールし、優先して brainicism/bgutil-ytdlp-pot-provider コンテナ(-p 4416:4416)を Docker 実行、127.0.0.1:4416 への ping で死活監視を行います。Docker が存在しない/失敗した場合は pip install 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 設計:エージェントが全自動で代行——まず --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 のプログレッシブ形式にフォールバック、PO token 障害時はコンテナ再起動または WPC に切り替えてリトライ、Cookie+403 時は web_safari クライアントに変更します。
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外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| 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/セッション/キーチェーンの読み取り: ブラウザ Cookie: --cookies-from-browser chrome/firefox → yt-dlp がブラウザの Cookie ストアを読み取り(スクリプト
- scripts/: ローカルスクリプトまたはコマンドの実行: 外部 CLI: yt-dlp(ダウンロード/メタデータ/フォーマット一覧取得)、ffprobe/ffmpeg、docker run/start/rm/info、pip inst
- scripts/ 或 SKILL.md: 外部言語パッケージ依存関係の動的インストールを宣言
- 网络端点: 外部ネットワークアクセスの宣言: youtube.com: yt-dlp によるメタデータ/ストリーム取得、urlopen https://www.youtube.com/oembed による oEmbed フォールバック(
- 本地工作目录: ファイル読み書きおよび成果物出力: ダウンロード出力: output_dir を再帰的に mkdir + -o テンプレートに従って動画/音声/字幕ファイルを書き込み(テンプレートは絶対パスおよび yt-dlp の %()s 構文に対応し、ユーザーが指定可能
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結論
6c6c403e7e905b4e…