将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
wjs-uploading-video.是一项面向实际任务的技能,主要用于Push完成视频到YouTube. 故障为这个用户的工作流程调制(QQ频道,中国网络与本地代理,1080p水平录音从Riverside / mult)。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
将已完成的视频推送至 YouTube。默认配置已针对该用户的实际工作流进行调优(王建硕频道、中国大陆网络环境 + 本地代理、Riverside 或多机位剪辑产出的 1080p 横屏视频)。
.mp4 文件,希望上传至 YouTubefinal/ 目录,并附带一份 UPLOAD_META.md不适用于:
wjs-reframing-video 产出 9:16 构图裁切版本,再通过本技能上传该文件)~/.config/youtube/credentials.json 文件必须存在。若缺失,请参考 references/credentials-setup.md 中的 5 分钟快速配置指南。pip3 install google-auth-oauthlib google-api-python-client requests(上传阶段严格只需 google-auth 和 requests,但 google-auth-oauthlib 会自动拉取这两者)。~/.config/youtube/token.json;后续运行将静默复用该 token。YouTube 的可恢复上传协议(resumable upload protocol)在完成元数据 POST 后会返回一个 Location: URL,随后通过分块 PUT 请求上传视频字节流。官方 google-api-python-client 库基于 httplib2 实现该流程,但在本用户当前的本地 SOCKS+HTTP 代理链路下,后续的 PUT 请求常因 [Errno 65] No route to host 或 socket.timeout 而失败,导致上传无限挂起。
本技能绕过 httplib2:使用 google-auth 完成 OAuth 认证,再通过 requests 手动驱动可恢复上传流程,并显式传入代理配置。采用 8 MB 分块(非默认的 256 KB),显著减少经代理的往返次数;对 socket.timeout / ConnectionError / 5xx 响应启用指数退避重试机制。
若您考虑“直接调用 YouTube API 客户端”,请勿尝试——在此环境中必然失败。
final/ 目录python3 ~/.claude/skills/wjs-uploading-video/scripts/upload_youtube.py --dir "/path/to/final" --meta "/path/to/final/UPLOAD_META.md"
脚本执行逻辑如下:
UPLOAD_META.md,将每个 ## NN · filename.mp4 区块与 --dir 下对应文件匹配--results-file(默认为 /.youtube_upload_results.json )中记录的视频——支持失败后安全重试--results-filepython3 ~/.claude/skills/wjs-uploading-video/scripts/upload_youtube.py --video /path/to/clip.mp4 --title "My Title" --description "Body text" --tags "tag1,tag2,tag3"
| 参数 | 默认值 | 说明 |
|---|---|---|
--privacy |
unlisted |
可选值:private / unlisted / public |
--category |
28 |
28 = Science & Tech(科技);27 = Education(教育);24 = Entertainment(娱乐) |
--made-for-kids |
false |
YouTube 强制要求声明 |
--playlist |
未设置 | 将每个上传视频加入指定播放列表 |
--publish-at |
未设置 | 定时发布(需配合 --privacy private 使用) |
--credentials |
~/.config/youtube/credentials.json |
OAuth 客户端 JSON 凭据文件路径 |
--token |
~/.config/youtube/token.json |
缓存的 OAuth token 文件路径 |
--chunk-mb |
8 |
若上传频繁在中途失败,可尝试减小分块大小 |
--dry-run |
关闭 | 仅解析元数据并列出待上传项,不触发任何网络请求 |
解析器预期用户采用如下标准结构:
## 01 · segment_01_no-bugs.mp4 **短标题** 代码没有错误,只有意图不一致 **视频描述** AI 时代屎山的重新定义... —— 王建硕 × 任鑫《...》第 1 集 #王建硕 #AI编程 #ClaudeCode ---
映射规则:
## NN · → 标识该区块所描述的视频文件**短标题**(或 **Title**)区块 → 直接作为 YouTube 视频标题(逐字保留)。短标题可用,但请注意 YouTube 标题上限为 100 字符;如需更丰富的标题(含系列名等),请直接在 **短标题** 中完整写出**视频描述**(或 **Description**)区块 → 直接作为 YouTube 视频描述(逐字保留),底部的 #tag 标签一并保留视频描述 中所有 #word 形式的词 → 提取为 YouTube 标签(tags),以英文逗号分隔(自动去除 # 符号;根据全局指令,用户频道名 王建硕 将被自动前置)标题中的文件名必须与 --dir 下真实存在的文件完全匹配。若某文件存在但无对应元数据区块,脚本将报错退出;此时可添加 --allow-missing-meta 参数,以文件基础名(basename)为标题、空描述进行上传。
--privacy public)--category 单次覆盖--results-file 为唯一可信来源;删除该文件可强制重新上传若在视频元数据中撰写描述末尾、签名栏或“订阅我”类引导语,请统一使用 王建硕(即用户频道名)。切勿在此处填写嘉宾姓名——例如 任鑫 作为对话嘉宾,其姓名应仅出现在描述正文内,不得置于频道级 CTA 位置。
| 现象 | 解决方法 |
|---|---|
授权页面出现 access_denied 403 |
在 Google Cloud Console 中,将用户 Google 账号添加至 OAuth 客户端的 Test users 名单 |
上传中途报 [Errno 65] No route to host |
几乎必为代理问题——请执行 curl --max-time 10 https://upload.googleapis.com/upload/youtube/v3/videos 测试:返回任意 4xx 表示代理可达;若返回 000,说明代理服务已宕机 |
| 上传无响应、无进度输出 | 代理可能在静默缓冲数据——尝试降低分块大小(--chunk-mb 4),或重启代理守护进程 |
quotaExceeded |
YouTube Data API 默认配额为每日 10,000 单位,单次上传消耗 1,600 单位,即约 6 次/日。可在 Google Cloud Console 申请配额提升,或分多日上传 |
| Token 刷新失败 | 删除 ~/.config/youtube/token.json 后重运行脚本,OAuth 浏览器流程将自动重启 |
--results-file(JSON 格式,含文件名、标题、video ID、URL)unlisted 状态,并建议其在 YouTube Studio 中确认无误后切换为公开相关专题
热门下载
相关下载
精品课程
共39课时 | 5.4万人学习
共101课时 | 21万人学习
共39课时 | 4.8万人学习
最新文章