agency-meetup-publish について
agency-meetup-publishは、AGENCY Communityのミートアップ録画をYouTubeに公開するスキルです。Zoomからの取得、動画編集、文字起こしに基づくタイムコード作成、サムネイル制作、プレイリスト登録を扱います。
主な機能
- 01Zoom録画と文字起こしの取得
- 02イントロとアウトロの結合
- 03文字起こしに基づくタイムコード生成
- 04説明文とサムネイルの作成
- 05YouTubeへのアップロードとプレイリスト管理
活用シーン
- 01AGENCY 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 Publish
イントロ、サムネイル、説明、タイムコードを追加して、AGENCY Community のミートアップ録画を YouTube に公開します。
前提条件
~/ai_projects/youtube-uploader/— OAuth 認証情報を含む YouTube アップロードスクリプト~/ai_projects/my-video/out/agency-swarm-intro.mp4— AGENCY のイントロアニメーション(6s、1920x1080)- Zoom OAuth が
~/.zoom_credentials/で設定済みであること 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 はトピックの概要をケバブケースにしたものです。
ステップ 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 個特定します。以下を確認します。
- 登壇者の交代(特にメインの登壇者が話し始める箇所)
- 「давайте」、「следующий」、「перейдем к」のようなフレーズで示されるトピックの移行
- Q&A セクション
- デモや画面共有の場面
- 結論やまとめ
重要: タイムコードにはイントロのオフセットを反映する必要があります。VTT のすべてのタイムスタンプにイントロの長さ(通常 6s)を加えてください。
形式:MM:SS トピックの説明。動画が 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 を基に、/tmp/thumbnail.html に HTML ファイルを作成します。以下をカスタマイズします。
- タイトルのテキスト — 短く印象的にします(1 行あたり最大 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
アップロードスクリプトは、成功すると動画 ID と動画 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 - スタジオ URL:
https://studio.youtube.com/video/VIDEO_ID/edit - 再生リスト:AGENCY Community
使用する既存のスキル
このパイプラインは、以下を基盤としています:
- zoom — Zoom 録画へのアクセスに使用する
~/.claude/skills/zoom/ - video-youtube-upload — アップロードの参考にする
~/.claude/skills/video-youtube-upload/ - youtube — アップロード後の管理に使用する
~/.claude/skills/youtube/ - agency-socials — カバーデザインシステムの参考にする
~/.claude/skills/agency-socials/