用途
youtube-video 用于把本地视频文件发布到 YouTube Studio(studio.youtube.com),借助 Ego Lite 会话与 ego-browser 完成上传操作。该技能不下载视频,也不调用 yt-dlp。发布成功的判定标准是拿到视频链接或视频 ID,并读到处理状态,例如 Uploading、Upload complete、Processing、Checks complete、Saved 或 Published。
主要能力
- 通过 ego-browser 操作 YouTube Studio 网页完成上传流程。
- 写入标题与简介,标题写入后会回读校验,必须与传入标题一致。
- 支持可选写入标签与缩略图。
- 默认观众设置为“不是为儿童打造”(No, it's not made for kids),默认可见性为 private;unlisted / public 必须由调用方明确指定。
- 成功后从页面链接提取 11 位视频 ID 并读取处理状态。
- 发布前执行登录闸门检查,避免把未登录状态误判为已发布。
使用方式
使用前需先安装 Ego Lite 并保证 ego-browser 在 PATH 中;缺失时应软失败并告知用户安装,不要强行调用浏览器。在 Ego 中已登录 YouTube 时效果最好,每次发布前都应向用户说明这一点。
每次上传前必须运行登录检查:
node scripts/check-login.mjs
# 需要把窗口留给人登录时:
node scripts/check-login.mjs --keep
退出码含义:0 表示已登录,将 login_tip 告诉用户后继续发布;2 表示未登录或无 ego-browser,展示 how_to_login / how_to_login_zh 并停止,请用户在 Ego 登录 YouTube 后重跑检查;1 表示其它错误,报告 JSON error,不要假装已发布。
发布调用示例:
bash skills/youtube-video/scripts/publish.sh /absolute/path/to/video.mp4 "Title" "Description"
bash skills/youtube-video/scripts/publish.sh \
--video /absolute/path/to/video.mp4 \
--title "Title" \
--description "Description" \
--tags "one,two" \
--visibility private \
--thumbnail /absolute/path/to/thumbnail.jpg \
--made-for-kids no \
--space-id 4 \
--keep
已安装的技能目录中使用相对路径:node scripts/check-login.mjs、bash scripts/publish.sh …。
由于 ego-browser nodejs 不继承 shell 环境变量,也不转发 shell argv,publish.sh 会先把 JSON 写到 /tmp/youtube-video-publish.json,再交给 ego。
最少输入为本机视频路径和标题;简介可空;标签、缩略图可选;可见性默认 private;Made for kids 默认 No。
发布脚本流程
- 打开 https://studio.youtube.com/。
- 用正文判断登录状态:若跳到 accounts.google.com 或 /signin,或正文是 Google 登录/选择账号,则退出码 2;文档标题含 “YouTube Studio” 不算已登录。
- 点击创建(#create-icon),再点“Upload videos / 上传视频”,直到出现 #select-files-button。
- 先 waitForFileChooser,再点选择文件,把本地视频交给文件选择器。
- 等待进度或 youtu.be 链接出现。
- 写入标题和简介;标题位于 shadow DOM 的 #textbox 中,写后回读校验。
- 有缩略图时,用文件选择器点 #file-loader(或 Upload thumbnail / 上传缩略图)。
- 有标签时先点 Show more / 显示更多,再写入 #tags-container。
- 观众设置默认点 No, it's not made for kids(VIDEO_MADE_FOR_KIDS_NOT_MFK),只有调用方明确要求才点 Yes。
- 点三次 Next,直到公开范围单选出现,默认点 Private;public 仅当调用方传入时选择(按钮文案为 Publish),private / unlisted 为 Save。
- 点 #done-button。
- 成功时从页面链接抽出 11 位视频 ID 并读取处理状态,不等到 HD 处理结束。
成功和失败默认都执行 finish({ keep: [] });只有 --keep 才保留页面。
适用场景与限制
适用于把本地已制作完成的视频手动或半自动发布到 YouTube Studio 的流程,包括需要设置标题、简介、标签、缩略图与可见性的场景。
限制包括:不下载视频、不调用 yt-dlp;依赖 Ego Lite 与 ego-browser,缺失时应软失败;未登录时必须停止,不能视为已发布;public 与“为儿童打造”等设置需调用方明确指定;不等待 HD 处理完成。若 publish.js 报错,可用 JSON 中的 spaceId 回到原 space 排查,不要为排查再开一个上传或新 space。完整避坑清单见 references/pitfalls.md。测试命令为 npm test。