关于 agency-meetup-publish
agency-meetup-publish 是用于将 AGENCY Community 线下活动录像发布到 YouTube 的技能,涵盖 Zoom 下载、视频剪辑、时间码、缩略图和播放列表管理。
主要功能
- 01获取 Zoom 录像和文字稿
- 02拼接片头与片尾
- 03根据文字稿生成时间码
- 04制作视频说明和缩略图
- 05上传至 YouTube 并加入播放列表
适用场景
- 01发布 AGENCY Community 活动录像
- 02根据会议文字稿整理章节时间码
- 03制作统一风格的活动缩略图和说明
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ glebis/ claude-skills --skill agency-meetup-publish安装后在 Claude Code 中输入/agency-meetup-publish确认已加载。
附带文件references/description-template.mdreferences/thumbnail-template.html
详细介绍
AGENCY Meetup 发布
将 AGENCY Community 线下聚会的录制视频发布到 YouTube,并添加片头、缩略图、描述和时间戳。
前置条件
~/ai_projects/youtube-uploader/— 包含 OAuth 凭据的 YouTube 上传脚本~/ai_projects/my-video/out/agency-swarm-intro.mp4— AGENCY 片头动画(6s,1920x1080)- 已在
~/.zoom_credentials/配置 Zoom OAuth - 已安装
ffmpeg和ffprobe - 已安装 Playwright 或 Chrome(用于渲染缩略图)
流程概览
1. Identify meeting → 2. Download from Zoom → 3. Add intro/outro
→ 4. Generate timecodes → 5. Write description → 6. Create thumbnail
→ 7. Upload to YouTube → 8. Set thumbnail → 9. Add to playlist
第 1 步:确定会议
向用户询问:
- 会议名称或 Zoom ID — 如果不清楚,列出近期录制内容:
python3 ~/.claude/skills/zoom/scripts/zoom_meetings.py recordings --start YYYY-MM-DD - 演讲者姓名 — 用于描述和缩略图
- 主题摘要 — 或从文字记录中提取
获取录制详情:
python3 ~/.claude/skills/zoom/scripts/zoom_meetings.py recording MEETING_ID
这会返回 MP4 下载 URL、时长、文字记录 URL 和其他文件。
第 2 步:从 Zoom 下载
并行下载 MP4 和 VTT 文字记录:
# Video (run in background — large file)
curl -L -o ~/Brains/brain/YYYYMMDD-meeting-slug.mp4 "DOWNLOAD_URL"
# Transcript
curl -L -o ~/Brains/brain/YYYYMMDD-meeting-slug.vtt "TRANSCRIPT_URL"
命名约定: YYYYMMDD-meeting-slug.mp4,其中 slug 是采用 kebab-case 格式的主题摘要。
第 3 步:添加片头(如有片尾,也添加片尾)
片头和会议录制的规格可能不同。检查两者:
ffprobe -v quiet -print_format json -show_streams INTRO.mp4
ffprobe -v quiet -print_format json -show_streams MEETING.mp4
需要匹配的关键参数:分辨率、fps、音频采样率、音频声道数。
重新编码片头以匹配会议录制
ffmpeg -y -i ~/ai_projects/my-video/out/agency-swarm-intro.mp4 \
-vf "scale=WIDTH:HEIGHT:force_original_aspect_ratio=decrease,pad=WIDTH:HEIGHT:(ow-iw)/2:(oh-ih)/2:black" \
-r FPS -c:v libx264 -preset fast -crf 18 \
-ar SAMPLE_RATE -ac CHANNELS -c:a aac \
/tmp/intro-matched.mp4
裁剪会议录制的开头
查看 VTT,确定实际内容开始的位置。通常裁掉 1-3 秒静音:
ffmpeg -y -ss TRIM_SECONDS -i MEETING.mp4 \
-c:v libx264 -preset fast -crf 18 \
-ar SAMPLE_RATE -ac CHANNELS -c:a aac \
-r FPS -vf "scale=WIDTH:HEIGHT" \
/tmp/meeting-trimmed.mp4
为确保拼接兼容,必须进行此重新编码。在后台运行——较长的录制需要几分钟处理。
拼接
echo "file '/tmp/intro-matched.mp4'" > /tmp/concat-list.txt
echo "file '/tmp/meeting-trimmed.mp4'" >> /tmp/concat-list.txt
# If outro exists:
# echo "file '/tmp/outro-matched.mp4'" >> /tmp/concat-list.txt
ffmpeg -y -f concat -safe 0 -i /tmp/concat-list.txt -c copy \
~/ai_projects/my-video/out/YYYYMMDD-meeting-slug-final.mp4
第 4 步:根据文字记录生成时间戳
阅读 VTT 文字记录,找出最多 20 个主题切换点。留意:
- 演讲者切换(尤其是主讲者开始发言时)
- 由“давайте”“следующий”“перейдем к”等短语提示的主题转变
- 问答环节
- 演示/屏幕共享环节
- 总结/收尾
重要: 时间戳必须考虑片头的时长。在所有 VTT 时间戳上加上片头时长(通常为 6s)。
格式:MM:SS Topic description;视频超过 1 小时时使用 H:MM:SS。
第 5 步:撰写描述
遵循以往 AGENCY Community 上传内容所用的模板。完整模板见 references/description-template.md。
主要部分:
- 标题行 —
AGENCY Community Meetup: [Topic] - 摘要段落 — 用 2-3 句话介绍演讲者和主题
- 项目符号列表 — 列出 5-7 个涵盖的关键主题(使用 •)
- 时间戳 — 前缀为
⏱ Таймкоды: - 社群介绍 —
AGENCY Community — сообщество практиков AI-автоматизации. - 链接 — 使用 🔗 前缀和 → 箭头
- 主题标签 — 与主题相关,并始终包含
#AGENCY #Community
将描述保存到 /tmp/youtube-description.txt。
第 6 步:创建缩略图
使用 AGENCY 缩略图 HTML 模板,渲染为 1280x720 PNG。
使用模板
基于 references/thumbnail-template.html 编写 HTML 文件 /tmp/thumbnail.html。自定义以下内容:
- 标题文字 — 简短有力(每行最多 2-4 个词)
- 副标题 — 使用 EB Garamond 斜体
- 演讲者署名 —
Speaker Name × AGENCY - 演讲者照片 — 如有,使用并设置
mix-blend-mode: hard-light
渲染为 PNG
首选:无头 Chrome(无需安装):
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--headless --screenshot=/tmp/thumbnail.png \
--window-size=1280,720 --hide-scrollbars \
"file:///tmp/thumbnail.html"
备选:Playwright:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page(viewport={'width': 1280, 'height': 720})
page.goto('file:///tmp/thumbnail.html')
page.wait_for_timeout(2000)
page.screenshot(path='/tmp/thumbnail.png')
browser.close()
第 7 步:上传到 YouTube
cd ~/ai_projects/youtube-uploader && python3 youtube_upload.py \
--video ~/ai_projects/my-video/out/FINAL.mp4 \
--title "TITLE" \
--description "$(cat /tmp/youtube-description.txt)" \
--category education \
--privacy public \
--tags "TAG1,TAG2,..." \
--yes
上传脚本成功后会输出 Video ID 和 Video URL。保存这些信息以供后续步骤使用。
标题指南: 控制在 100 个字符以内。格式:Topic — Speaker Name。加入便于搜索的关键词。
第 8 步:设置缩略图
cd ~/ai_projects/youtube-uploader && \
python3 youtube_manage.py thumbnails set VIDEO_ID /tmp/thumbnail.png
第 9 步:添加到播放列表
AGENCY Community 播放列表 ID 为 PLZNP0SKU2SqjHOy01UjDxhSRtcluvuw0m。
cd ~/ai_projects/youtube-uploader && \
python3 youtube_manage.py playlists add-item PLZNP0SKU2SqjHOy01UjDxhSRtcluvuw0m VIDEO_ID
并行处理策略
为提高速度,尽可能并行运行以下任务:
| 阶段 | 可与以下任务并行 |
|---|---|
| 下载 MP4 | 下载 VTT |
| 在后台重新编码会议录制 | 阅读文字记录并起草时间戳 |
| 在后台上传到 YouTube | 生成缩略图 |
| 设置缩略图 | 添加到播放列表 |
输出
向用户报告:
- 视频 URL:
https://www.youtube.com/watch?v=VIDEO_ID - Studio URL:
https://studio.youtube.com/video/VIDEO_ID/edit - 播放列表:AGENCY 社区
使用的现有技能
此流程基于以下技能构建:
- zoom —
~/.claude/skills/zoom/,用于访问 Zoom 录制内容 - video-youtube-upload —
~/.claude/skills/video-youtube-upload/,用于参考上传流程 - youtube —
~/.claude/skills/youtube/,用于上传后的管理 - agency-socials —
~/.claude/skills/agency-socials/,用于参考封面设计系统