mcpField
A
agency-meetup-publish

agency-meetup-publish

github.com/glebis创意与媒体40190 次安装1 天前更新
代码仓库

关于 agency-meetup-publish

agency-meetup-publish 是用于将 AGENCY Community 线下活动录像发布到 YouTube 的技能,涵盖 Zoom 下载、视频剪辑、时间码、缩略图和播放列表管理。

主要功能

  1. 01获取 Zoom 录像和文字稿
  2. 02拼接片头与片尾
  3. 03根据文字稿生成时间码
  4. 04制作视频说明和缩略图
  5. 05上传至 YouTube 并加入播放列表

适用场景

  1. 01发布 AGENCY Community 活动录像
  2. 02根据会议文字稿整理章节时间码
  3. 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。

主要部分:

  1. 标题行 — AGENCY Community Meetup: [Topic]
  2. 摘要段落 — 用 2-3 句话介绍演讲者和主题
  3. 项目符号列表 — 列出 5-7 个涵盖的关键主题(使用 •)
  4. 时间戳 — 前缀为 ⏱ Таймкоды:
  5. 社群介绍 — AGENCY Community — сообщество практиков AI-автоматизации.
  6. 链接 — 使用 🔗 前缀和 → 箭头
  7. 主题标签 — 与主题相关,并始终包含 #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/,用于参考封面设计系统

评论

支持 Markdown