Wjs Uploading Video

Polar Sponsor
爱发电 赞助
.NET 9.0

将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。

wjs-uploading-video.

功能概述

wjs-uploading-video.是一项面向实际任务的技能,主要用于Push完成视频到YouTube. 故障为这个用户的工作流程调制(QQ频道,中国网络与本地代理,1080p水平录音从Riverside / mult)。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

核心要点

  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

wjs-uploading-video

将已完成的视频推送至 YouTube。默认配置已针对该用户的实际工作流进行调优(王建硕频道、中国大陆网络环境 + 本地代理、Riverside 或多机位剪辑产出的 1080p 横屏视频)。

适用场景

  • 用户已有一个或多个完成的 .mp4 文件,希望上传至 YouTube
  • 用户指定一个包含多个分段视频的 final/ 目录,并附带一份 UPLOAD_META.md
  • 用户需要自定义隐私设置 / 播放列表归属 / 定时发布

不适用于:

  • 微信视频号上传(无公开 API;用户需通过网页手动上传)
  • 抖音 / 小红书 / B 站(使用不同 API,当前尚未在此技能中实现)
  • 从横屏源素材生成 YouTube Shorts 变体(请先使用 wjs-reframing-video 产出 9:16 构图裁切版本,再通过本技能上传该文件)

前置条件(每台机器仅需配置一次)

  1. Google Cloud OAuth 客户端凭证:~/.config/youtube/credentials.json 文件必须存在。若缺失,请参考 references/credentials-setup.md 中的 5 分钟快速配置指南。
  2. Python 依赖:pip3 install google-auth-oauthlib google-api-python-client requests(上传阶段严格只需 google-auth 和 requests,但 google-auth-oauthlib 会自动拉取这两者)。
  3. 首次上传会自动打开浏览器完成 Google 授权流程,并写入 ~/.config/youtube/token.json;后续运行将静默复用该 token。

工作原理(以及为何不直接使用官方 youtube-uploader)

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"

脚本执行逻辑如下:

  1. 读取 UPLOAD_META.md,将每个 ## NN · filename.mp4 区块与 --dir 下对应文件匹配
  2. 跳过已在 --results-file(默认为 /.youtube_upload_results.json)中记录的视频——支持失败后安全重试
  3. 按顺序上传,每传输 8 MB 输出一次进度
  4. 将最终生成的视频 URL 列表写入 --results-file

单文件上传

python3 ~/.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 关闭 仅解析元数据并列出待上传项,不触发任何网络请求

UPLOAD_META.md 格式规范

解析器预期用户采用如下标准结构:

## 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)为标题、空描述进行上传。

本技能内置的合理默认值

  • 隐私设置 = unlisted(不公开):便于用户上传后先行审核,确认无误后再于 YouTube Studio 中设为公开(或直接传参 --privacy public)
  • 分类 = 28(科技):契合 王建硕 频道主要内容定位;可通过 --category 单次覆盖
  • selfDeclaredMadeForKids = false:YouTube 强制要求声明;用户内容面向成人受众
  • 分块大小 = 8 MB:经用户本地代理环境实测验证的有效值(256 KB 易导致挂起)
  • 跳过已上传项:以 --results-file 为唯一可信来源;删除该文件可强制重新上传

频道名称 CTA 规则

若在视频元数据中撰写描述末尾、签名栏或“订阅我”类引导语,请统一使用 王建硕(即用户频道名)。切勿在此处填写嘉宾姓名——例如 任鑫 作为对话嘉宾,其姓名应仅出现在描述正文内,不得置于频道级 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)
  • 以 Markdown 表格形式向用户回显 URL 列表
  • 提醒用户视频默认为 unlisted 状态,并建议其在 YouTube Studio 中确认无误后切换为公开
  • 若用户提及“合集”或“系列”,可主动提供创建 YouTube 播放列表并批量加入新上传视频的服务(需用户提供播放列表 ID,或由您代为新建)

相关专题

更多
js实现base64编码
js实现base64编码

在JavaScript中实现Base64编码,最直接的方式是使用内置的btoa()函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.10.24

379

9

html中如何调用外部js
html中如何调用外部js

在 html 中调用外部 js 可通过以下步骤:创建 js 文件并编写代码。在 html 代码中添加 <script> 标签,设置 src 属性为 js 文件路径。保存并刷新页面加载外部 js。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.11

1712

6

php和js的区别
php和js的区别

php和js的区别:PHP主要用于服务器端编程,而JavaScript主要用于客户端编程;PHP代码在服务器端执行,而JavaScript代码在客户端浏览器中执行。想了解更多php和js的相关内容,可以阅读本专题下面的文章。

2024.03.22

4828

11

JS的Document介绍
JS的Document介绍

在JavaScript中,document对象是一个非常重要的全局对象,它代表整个HTML文档。想了解更多Document的相关内容,可以阅读本专题下面的文章。

2024.03.14

6047

11

js中each函数的用法
js中each函数的用法

在JavaScript中,并没有一个内建的each函数,但jQuery库提供了一个非常有用的$.each() 函数,用于遍历数组或对象。想了解更多each函数的相关内容,可以阅读本专题下面的文章。

2024.03.13

1629

5

js和vue的关系
js和vue的关系

js和vue的关系:1、js作为web开发基石;2、vue.js作为前端框架的崛起;3、js与vue的互补关系;4、js与vue的实践应用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.11

353

5

js弹幕功能实现方法
js弹幕功能实现方法

PHP中文网为大家带来,js实现弹幕功能的方法:1、创建html文件;2、添加html代码架构;3、在body标签中使用div、input、button标签分给页面设计效果显示框、输入框、弹幕提交按钮;4、添加script标签并写入js代码来实现弹幕效果;5、通过浏览器方式查看设计效果即可。希望对大家有所帮助。

2024.03.04

2992

11

js事件冒泡可以解决哪些问题
js事件冒泡可以解决哪些问题

js事件冒泡可以解决的问题:1、简化事件处理逻辑;2、提高事件处理性能;3、实现自定义组件和交互效果;4、控制事件传播方向;5、解决事件覆盖问题;6、实现全局事件监听;7、方便调试和排查问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2824

4

js的split用法
js的split用法

js的split方法是字符串的一个方法,用于将字符串按照指定的分隔符分割成子字符串,并返回一个新的数组,其语法为“string.split(separator, limit)”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.24

1127

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.8万人学习