关于 publish
Publish 是面向创作者的发布技能,用于将完成的视频发布到个人账号。它会准备各平台所需文件和文案,先提交计划等待确认,并支持通过 Treg 发布或手动操作。
主要功能
- 01选择完成的视频
- 02准备社交平台导出文件和封面
- 03撰写各平台发布文案
- 04发布前要求确认
- 05支持 Treg 或手动发布
适用场景
- 01将完成的短视频发布到社交平台
- 02准备 YouTube 视频和缩略图
- 03未配置 Treg 时手动发布
MCP 相关
Publish 可通过基于 MCP 的发布途径 Treg,将内容发布到已连接的 Instagram、TikTok 和 YouTube 账号;也支持不使用 Treg 的手动发布。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ melvynx/ video-agent-skills --skill publish安装后在 Claude Code 中输入/publish确认已加载。
详细介绍
发布
发布一条完成的视频,发到创作者自己的账号上。制作视频的流程是 /short-editing。
第 5 步的计划必须得到创作者明确同意,才能发布任何内容。 这份同意仅适用于该视频。
使用他们的语言与他们沟通。<edit> = video-agent/edits/<slug>/。
1. 选择视频
按顺序匹配,匹配到第一项即停止:
- 他们给出的路径、slug 或标题:
<edit>/output/<name>.mp4(<edit>=video-agent/edits/<name>/,绝不能使用-rough剪辑版)。 - 本次对话中完成的视频。
- 没有:最新的
video-agent/edits/*/output/*.mp4(不是-rough)。在计划中写明视频名称。
下文中的 <video> = 该文件;post.md 与它位于 output/ 目录下。
然后检查 <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. 文件
- 母版:
<video>,完整画质,用于 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 <video> -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 帧,通常是眨眼或空白画面。已用/codex-images在<edit>/images/中生成的图片:展示给他们看,将他们选中的图片复制为<edit>/cover.jpg。否则从开场钩子中选取:人物睁着眼睛,钩子卡片完整显示。生成视频前 3 秒的联系表,查看后提取选定时间<t>对应的画面:
竖屏:将关键视觉内容放在中央 3:4 区域内(y 从 240 到 1680),个人资料网格会裁切到该区域。长视频:1280x720 的缩略图更合适;提供ffmpeg -v error -y -ss 0.1 -t 3 -i <video> -vf "fps=10,scale=270:-1,tile=6x5" -frames:v 1 video-agent/.tmp/hook-sheet.jpg ffmpeg -v error -y -ss <t> -i <video> -frames:v 1 -q:v 2 <edit>/cover.jpg/codex-images来制作,或使用视频帧。
4. 文案
如果 <edit>/output/post.md 存在,则从中获取(由 short-editing 编写);否则根据视频脚本或转录稿以及 video-agent/voice.md,使用视频所用语言编写:
- 说明文字(Instagram 和 TikTok):第一行要吸引人,但不要逐字重复口播钩子(前 125 个字符会在“更多”之前显示);用 2 到 4 行短句说明观众能获得什么;加入
voice.md中的行动号召;最后加 3 到 5 个主题标签。不要用 #fyp,也不要堆满表情符号。 - TikTok 说明文字:仅在需要与其他平台不同的时候提供(更短,或使用不同的主题标签)。
- YouTube 标题:Shorts 少于 60 个字符,长视频少于 70 个字符;说明视频能带来什么,并确保内容属实。
- YouTube 描述:说明文字、长视频的章节(来自
post.md),然后是他们的链接(询问一次,并将链接添加到voice.md)。
如果已安装该技能,使用 studio-script 的人性化处理流程(其 references/humanize.md)处理所有文案。所有人名、数字和说法都必须来自视频,不得添加任何内容。将文案保存到 <edit>/output/post.md,每段文案使用一个标题。
5. 计划(必需)
- 平台:短视频发布到 YouTube + Instagram + TikTok,长视频发布到 YouTube,除非用户另有说明。
- 时间:用户指定的时间(以其当地时间和 UTC 表示),否则为现在。
- 各平台发布方式:Treg(已连接)或手动。Instagram 和 TikTok 无法通过 Treg 定时发布:立即发布。YouTube 可以安排在指定日期发布(设为私享 +
publishAt)。如果要在之后的时间发布到 Instagram 或 TikTok:届时再次运行/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 →
<video>→ 使用output/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 秒轮询一次
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_infoFILE_UPLOAD,并将文件大小作为单个分块。 - 将
social.mp4PUT 到返回的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,传入片段信息(标题、说明)和状态{"privacyStatus": "private", "selfDeclaredMadeForKids": false};如果指定了日期,再添加"publishAt": "<UTC ISO time>"(现在发布则设为"public")。 - 将
<video>PUT 到返回的会话 URL。 - 使用
cover.jpg调用youtube.youtube.video.thumbnail.set(仅适用于已验证的 YouTube 账户;如果被拒绝也没关系,告知用户即可)。
如果回答中没有会话 URL,则改为手动发布 YouTube 视频。
7. 记录发布信息
写入 <edit>/published.md,每个平台占一行,记录日期、时间、发布方式,以及视频上线后的链接(https://youtube.com/shorts/<id> 或 https://youtu.be/<id>、Reels 链接或 TikTok 链接)。手动发布时,等用户确认已发布后再记录。
然后告知用户哪些内容已上线及其链接,并提醒用户可以在一周后使用 /insta-audit 查看效果。
如实说明限制
- Instagram 和 TikTok 无法通过 Treg 安排发布,只能立即发布。它们各自的应用支持安排发布。
- TikTok 会将新第三方应用发布的内容设为私密,直到该应用通过审核;通过收件箱发布的方式可以绕过这一限制。
- 平台可能会拒绝视频(例如长度、格式或音乐版权问题)。错误信息会原样显示;手动发布始终可用。
- 仅发布创作者拥有或已获得使用权的视频,包括其中的音乐。