关于 video-publish
video-publish 是将成片发布到创作者自有社交账号的工作流,适用于需要准备视频、文案并确认发布方案的创作者。发布前必须获得明确同意,并可通过 Treg 或手动流程发布。
主要功能
- 01检查视频格式与已发布记录
- 02生成社交平台视频和封面
- 03整理标题与发布文案
- 04发布前展示方案并等待确认
- 05支持 Treg 发布或手动操作
适用场景
- 01将短视频发布到 YouTube、Instagram 和 TikTok
- 02将横版长视频发布到 YouTube
- 03为视频准备平台文案和封面
- 04检查发布状态并记录已发布链接
MCP 相关
该技能说明可通过 Treg MCP 连接并发布到创作者的账号;也提供无需 Treg 的手动发布流程。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ melvynx/ video-agent-skills --skill video-publish安装后在 Claude Code 中输入/video-publish确认已加载。
详细介绍
视频发布
一条制作完成的视频,发布到创作者自己的账号上。制作流程见 /video-edit。
第 5 步的计划未经创作者明确同意,不会发布任何内容。 这份同意仅适用于该视频。
使用创作者的语言与其交流。<edit> = video-agent/edits/<slug>/。
1. 选择视频
按以下顺序匹配,匹配到第一个就停止:
- 他们提供的路径、slug 或标题:
<edit>/final.mp4。 - 本次对话中制作完成的视频。
- 未提供:最新的
video-agent/edits/*/final.mp4。在计划中注明视频名称。
然后检查 <edit>/published.md:如果文件中已有该平台的记录,告知他们并停止(除非他们想再次发布)。
使用 ffprobe 检查格式:竖屏(短视频,适用于 YouTube Shorts、Reels 和 TikTok)或横屏(长视频,默认仅发布到 YouTube)。
2. 设置 Treg(一次性)
Treg 可免费帮他们发布到自己的账号。检查:
treg --version
treg connections ls
他们要发布内容的平台都必须显示在列表中,并具有发布权限(Instagram 的 scopes 中包含 content_publish,TikTok 包含 video.publish,YouTube 包含 youtube.upload 或 youtube)。
如果缺少:用一句话说明并询问,然后:
- 安装(macOS 和 Linux;Windows 用户请使用 MCP:
claude mcp add --transport http treg https://treg.to/mcp/,然后运行/mcp登录):curl -fsSL https://treg.to/install.sh | sh treg login - 连接他们要发布内容的平台;每个平台都会打开该平台自己的登录页面:
Instagram 需要专业账号(Creator 或 Business,可在应用设置中免费切换)。treg connections connect --provider instagram --capability post treg connections connect --provider tiktok --capability post treg connections connect --provider youtube --capability post
如果他们不想使用 Treg:可使用无需设置的手动方式(6a)。
3. 文件
- 母版:
<edit>/final.mp4,完整画质,用于 YouTube。 - 社交平台导出文件(仅短视频):
<edit>/social.mp4,H.264 + AAC,大小低于 30 MB,以便 Treg 托管到 Instagram(TikTok 支持最大 64 MB)。如果文件缺失或比母版旧,按适合的码率重新编码(约为 28 MB × 8000 ÷ 时长秒数,再减去 160 kb/s 的音频码率,单位为 kb/s):
检查文件大小,并确认可以解码:ffmpeg -y -i <edit>/final.mp4 -c:v libx264 -preset slow -b:v <rate>k -maxrate <rate>k -bufsize <2x rate>k -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart <edit>/social.mp4ffmpeg -v error -i <edit>/social.mp4 -f null -。 - 封面:始终需要
<edit>/cover.jpg。没有封面时,Instagram 会采用第 0 帧,通常是眨眼或空白画面。从开场钩子中选取封面:人物睁开眼睛,钩子卡片完整显示。生成前 3 秒的联系表,查看后提取选定时间<t>的画面:
竖屏:将关键视觉内容放在中央 3:4 区域内(y 坐标 240 到 1680),因为个人主页网格会裁切到该区域。长视频:1280x720 的缩略图效果更好;可提供ffmpeg -v error -y -ss 0.1 -t 3 -i <edit>/final.mp4 -vf "fps=10,scale=270:-1,tile=6x5" -frames:v 1 video-agent/.tmp/hook-sheet.jpg ffmpeg -v error -y -ss <t> -i <edit>/final.mp4 -frames:v 1 -q:v 2 <edit>/cover.jpg/codex-images来制作,也可以使用视频帧。
4. 文案
如果存在 <edit>/post.md(由 video-edit 撰写),则从中获取文案;否则根据视频脚本或转录稿以及 video-agent/voice.md,使用视频所用语言撰写:
- 说明文字(Instagram 和 TikTok):第一行要吸引观众,但不要逐字重复口播开场钩子(前 125 个字符会显示在“更多”之前);用 2 到 4 行简短文字说明观众能获得什么;加入
voice.md中的行动号召;然后添加 3 到 5 个主题标签。不要使用 #fyp,也不要堆砌表情符号。 - TikTok 说明文字:仅在需要与其他平台有所区别时提供(更短,或使用其他主题标签)。
- YouTube 标题:Shorts 少于 60 个字符,长视频少于 70 个字符;概括视频的承诺,且内容真实准确。
- YouTube 说明:说明文字、长视频的章节(来自
post.md),然后是他们的链接(询问一次并添加到voice.md)。
如果已安装 video-script 技能,则对所有文案运行其 humanize 流程(参见 references/humanize.md)。所有姓名、数字和说法都必须来自视频,不得新增任何内容。将文案保存到 <edit>/post.md,每段文案使用一个标题。
5. 计划(必须)
- 平台:短视频发布到 YouTube + Instagram + TikTok,长视频发布到 YouTube,除非他们指定其他平台。
- 时间:他们给出的时间(注明当地时间和 UTC),否则为现在。
- 各平台发布方式:Treg(已连接)或手动。Instagram 和 TikTok 无法通过 Treg 定时发布:要现在发布。YouTube 可以等到指定日期再发布(设为私密 +
publishAt)。如果要稍后在 Instagram 或 TikTok 发布:届时再次运行/video-publish,或者改为手动发布并使用应用的定时发布功能。
展示计划并等待明确确认:
PLAN · budget-margins · 0:47 · social.mp4 18 MB
Cover: cover.jpg (0.8 s) [shown as an image]
YouTube Shorts · Treg · 2026-10-11 18:00 Paris (16:00 UTC) · private until then
Instagram Reel · Treg · now
TikTok · manual (not connected)
Title: Your margin is lying to you
Caption: ...
Reply yes to publish, or tell me what to change.
如果计划有变:应用更改,然后再次展示计划。
6a. 手动发布
打开文件夹(macOS 使用 open <edit>,Windows 使用 explorer <edit>,Linux 使用 xdg-open <edit>),然后提供以下步骤:
- YouTube:studio.youtube.com → Create → Upload videos →
final.mp4→ 使用post.md中的标题和描述,使用cover.jpg作为缩略图 → Visibility → Schedule 或 Public。 - Instagram:打开应用 → + → Reel →
social.mp4→ 输入文案 → Edit cover → Add from camera roll →cover.jpg→ Share(或在专业账号的高级设置中选择 Schedule)。 - TikTok:打开应用或访问 tiktok.com/upload →
social.mp4→ 输入文案 → 在封面时间点选择封面 → Post(或在网页版选择 Schedule)。
6b. Treg
每次调用前,运行 treg catalog get <id> 获取准确的参数(参数会变)。这些操作在各自账号中均免费。只保留标准输出(2>/dev/null)。某个平台失败不会阻止其他平台发布。
Instagram Reels
- 托管文件(每个文件最多 30 MB,保留 7 天):运行
treg host <edit>/social.mp4和treg host <edit>/cover.jpg,获取公开 URL。 - 调用
instagram.instagram.media.container.create,参数包括ig_user_id(在treg connections ls中,他们的 Instagram 对应的resource_ref)、media_type=REELS、video_url、cover_url、caption。 - 每隔 10 s 轮询
instagram.instagram.media.container.status,直到状态变为FINISHED(如果出现ERROR,展示错误并停止 Instagram 发布)。 - 使用容器 ID 调用
instagram.instagram.post.publish。然后获取其permalink(调用instagram.instagram.user.posts,参数为fields=id,permalink,取最新一条)。
TikTok
- 调用
tiktok.tiktok.creator.info,获取他们可以使用的隐私选项。 - 调用
tiktok.tiktok.video.publish.init,传入文案、该列表中的privacy_level(如果有公开选项则使用),将video_cover_timestamp_ms设为封面时间的毫秒数(TikTok 使用视频帧作为封面,不能使用图片),并设置source_info为FILE_UPLOAD,以单个分块上传文件。 - 使用 PUT 将
social.mp4上传到返回的upload_url,并设置Content-Type: video/mp4和Content-Range: bytes 0-<size-1>/<size>。 - 轮询
tiktok.tiktok.publish.status,直到视频发布成功。
如果返回 unaudited_client_can_only_post_to_private_accounts(或选项中只有 SELF_ONLY):改用 tiktok.tiktok.video.inbox.init 将视频发送到他们的 TikTok 收件箱(上传方式相同,不带文案),并告知他们需在 24 小时内打开 TikTok、粘贴文案并发布。
YouTube
- 调用
youtube.youtube.video.upload,设置uploadType=resumable,传入包含标题和描述的 snippet,以及status{"privacyStatus": "private", "selfDeclaredMadeForKids": false};如果要在指定日期发布,再加上"publishAt": "<UTC ISO time>"(如果现在发布则设为"public")。 - 使用 PUT 将
final.mp4上传到返回的会话 URL。 - 使用
cover.jpg调用youtube.youtube.video.thumbnail.set(仅已验证的 YouTube 账号可用;如果被拒绝,告知他们即可)。
如果返回结果中没有会话 URL:改为手动发布 YouTube 视频。
7. 记录发布情况
写入 <edit>/published.md,每个平台一行:记录日期、时间、发布方式和链接(视频上线后填写 https://youtube.com/shorts/<id> 或 https://youtu.be/<id>、Reel 或 TikTok 链接)。手动发布时,等他们告知视频已发布后再填写。
然后说明哪些内容已上线,提供链接,并提议一周后运行 /video-audit 查看效果。
如实说明限制
- Instagram 和 TikTok 无法通过 Treg 安排发布,只能立即发布。它们各自的应用支持安排发布。
- TikTok 会将新第三方应用发布的内容设为私密,直到该应用通过审核;通过收件箱发布的方式可以绕过这一限制。
- 平台可能会拒绝视频(例如长度、格式或音乐版权问题)。错误信息会原样显示;手动发布始终可用。
- 仅发布创作者拥有或已获得使用权的视频,包括其中的音乐。