youtube-summarizer について
youtube-summarizerは、YouTube動画の文字起こしを取得し、詳細で構造化された要約にするスキルです。Pythonライブラリ、ページ取得、またはユーザー提供のテキストを使い、STAR + R-I-S-Eの枠組みで整理します。
主な機能
- 01YouTube URLと文字起こしの有無を確認
- 02Pythonまたはページ取得で文字起こし
- 03アクセスできない場合はテキスト貼り付けに対応
- 04STAR + R-I-S-Eで詳細な要約を作成
- 05結果をMarkdown形式に整形
活用シーン
- 01講義を見直さずに内容を記録
- 02教育動画の主要な論点を収集
- 03動画分析用の文字起こしを取得
- 04チュートリアルを構造化した資料に整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ericgandrade/ claude-superskills --skill youtube-summarizerインストール後、Claude Code で/youtube-summarizerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.mdREADME.mdrequirements.txtevals/evals.jsontrigger-eval.jsonscripts/extract-transcript.pyinstall-dependencies.sh詳細
youtube-summarizer
目的
このスキルは、YouTube 動画から文字起こしを抽出し、STAR + R-I-S-E フレームワークを使用して、包括的で詳細な要約を作成します。動画が利用可能かどうかを確認し、Python ライブラリ youtube-transcript-api を使用して文字起こしを抽出し、すべての洞察、主張、重要なポイントを記録した詳細なドキュメントを作成します。
このスキルは、教育動画、講義、チュートリアル、情報提供コンテンツを徹底的に分析し、参照用ドキュメントを必要とするユーザー向けに設計されています。
このスキルを使用する場面
以下の場合にこのスキルを使用してください。
- ユーザーが YouTube 動画の URL を提示し、詳細な要約を求めている
- ユーザーが動画を見直さずに、参照用として動画の内容を記録したい
- ユーザーが教育コンテンツから洞察、重要なポイント、主張を抽出したい
- ユーザーが分析のために YouTube 動画の文字起こしを必要としている
- ユーザーが YouTube 動画の「summarize」「resume」「extract content」を依頼している
- ユーザーが簡潔さより網羅性を優先した包括的なドキュメントを求めている
ステップ 0:環境の検出とセットアップ
処理を始める前に、実行環境を検出して、適切な文字起こし抽出方法を選択します。
環境の検出
# Test 1: Can we run local Python?
python3 --version 2>/dev/null
PYTHON_AVAILABLE=$?
# Test 2: Is youtube-transcript-api installed?
python3 -c "import youtube_transcript_api" 2>/dev/null
LIB_AVAILABLE=$?
次の 3 つのモードを、記載順に試します。
| モード | 条件 | 方法 |
|---|---|---|
| A — Python/CLI | Python 3 が利用可能 + ライブラリがインストール済み | youtube-transcript-api(フル機能) |
| B — WebFetch | Python がない、またはサンドボックス環境 | YouTube ページを取得 → 埋め込み JSON から文字起こしを抽出 |
| C — 手動 | ネットワークレベルで YouTube がブロックされている | 文字起こしテキストを直接貼り付けるようユーザーに依頼 |
モード A のセットアップ(Python は利用可能、ライブラリがない)
Python は利用可能でも youtube-transcript-api がインストールされていない場合は、インストールを提案します。
youtube-transcript-api is required but not installed.
Would you like to install it now?
- [ ] Yes - Install with pip (pip install youtube-transcript-api)
- [ ] No - I'll install it manually
pip install youtube-transcript-api
モード B のセットアップ(サンドボックス環境/Claude Cowork/Python なし)
WebFetch を使用して、YouTube ページの HTML に埋め込まれた文字起こしを抽出します。YouTube はページソース内の ytInitialPlayerResponse JSON に、キャプショントラックの URL をすべて埋め込んでいます。
手順:
- WebFetch で
https://www.youtube.com/watch?v=VIDEO_IDを取得します - 正規表現を使用して、HTML から
ytInitialPlayerResponseJSON ブロックを抽出します captions.playerCaptionsTracklistRenderer.captionTracks[0].baseUrlを解析します- その URL を WebFetch で取得し、文字起こしの XML を取得します
- XML の
<text>要素を解析してプレーンテキストにします
YouTube ページ自体がブロックされている場合(プロキシ/サンドボックスの制限)、モード C に進みます。
モード C のセットアップ(ネットワークがブロックされている場合)
ユーザーにはっきりと伝えます。
⚠️ YouTube is not accessible in this environment.
Options:
1. Run this skill in Claude Code (CLI) — it has full network access and can install Python libraries.
2. Paste the video transcript text directly into this chat — the skill will summarize whatever text you provide.
3. Copy the transcript from youtube.com/watch?v=VIDEO_ID → click "..." → "Show transcript" → paste here.
メインワークフロー
進行状況の表示に関するガイドライン
ワークフロー全体を通じて、各ステップの前に視覚的な進行状況ゲージを表示し、ユーザーに状況を知らせます。ゲージの形式は次のとおりです。
echo "[████░░░░░░░░░░░░░░░░] 20% - Step 1/5: Validating URL"
形式の仕様:
- 幅は 20 文字(塗りつぶしに █、空白に ░ を使用)
- パーセンテージの増分:ステップ 1 = 20%、ステップ 2 = 40%、ステップ 3 = 60%、ステップ 4 = 80%、ステップ 5 = 100%
- 現在のステップ/合計ステップ数を表示(例:「ステップ 3/5」)
- 現在のフェーズの簡潔な説明
ステップ 1 の前に初期ステータスボックスを表示します。
╔══════════════════════════════════════════════════════════════╗
║ 📹 YOUTUBE SUMMARIZER - Processing Video ║
╠══════════════════════════════════════════════════════════════╣
║ → Step 1: Validating URL [IN PROGRESS] ║
║ ○ Step 2: Checking Availability ║
║ ○ Step 3: Extracting Transcript ║
║ ○ Step 4: Generating Summary ║
║ ○ Step 5: Formatting Output ║
╠══════════════════════════════════════════════════════════════╣
║ Progress: ██████░░░░░░░░░░░░░░░░░░░░░░░░ 20% ║
╚══════════════════════════════════════════════════════════════╝
ステップ 1:YouTube URL の検証
目的: 動画 ID を抽出し、URL の形式を検証します。
サポートされている URL 形式:
https://www.youtube.com/watch?v=VIDEO_IDhttps://youtube.com/watch?v=VIDEO_IDhttps://youtu.be/VIDEO_IDhttps://m.youtube.com/watch?v=VIDEO_ID
処理:
# Extract video ID using regex or URL parsing
URL="$USER_PROVIDED_URL"
# Pattern 1: youtube.com/watch?v=VIDEO_ID
if echo "$URL" | grep -qE 'youtube\.com/watch\?v='; then
VIDEO_ID=$(echo "$URL" | sed -E 's/.*[?&]v=([^&]+).*/\1/')
# Pattern 2: youtu.be/VIDEO_ID
elif echo "$URL" | grep -qE 'youtu\.be/'; then
VIDEO_ID=$(echo "$URL" | sed -E 's/.*youtu\.be\/([^?]+).*/\1/')
else
echo "❌ Invalid YouTube URL format"
exit 1
fi
echo "📹 Video ID extracted: $VIDEO_ID"
URL が無効な場合:
❌ Invalid YouTube URL
Please provide a valid YouTube URL in one of these formats:
- https://www.youtube.com/watch?v=VIDEO_ID
- https://youtu.be/VIDEO_ID
Example: https://www.youtube.com/watch?v=dQw4w9WgXcQ
ステップ 2:動画とトランスクリプトの利用可能性を確認する
進捗:
echo "[████████░░░░░░░░░░░░] 40% - Step 2/5: Checking Availability"
目的: 検出されたモードを使用して、動画が存在し、トランスクリプトにアクセスできることを確認します。
モード A(Python):
from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound
import sys
video_id = sys.argv[1]
try:
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
print(f"✅ Video accessible: {video_id}")
for transcript in transcript_list:
lang_type = "[Auto-generated]" if transcript.is_generated else "[Manual]"
print(f" - {transcript.language} ({transcript.language_code}) {lang_type}")
except TranscriptsDisabled:
print(f"❌ Transcripts are disabled for video {video_id}")
sys.exit(1)
except NoTranscriptFound:
print(f"❌ No transcript found for video {video_id}")
sys.exit(1)
except Exception as e:
print(f"❌ Error accessing video: {e}")
sys.exit(1)
モード B(WebFetch):
WebFetch を使用して https://www.youtube.com/watch?v=VIDEO_ID を読み込みます。HTML 内で文字列 "captionTracks" を検索し、字幕が利用可能であることを確認します。ページにアクセスできない場合、または captionTracks キーが見つからない場合は、モード C に進みます。
エラー処理:
| エラー | メッセージ | 対応 |
|---|---|---|
| 動画が見つからない | "❌ 動画が存在しないか、非公開です" | URL の確認をユーザーに依頼する |
| トランスクリプトが無効 | "❌ この動画ではトランスクリプトが無効になっています" | 続行できません |
| トランスクリプトがない | "❌ トランスクリプトが見つかりません" | 続行できません |
| YouTube がブロックされている(サンドボックス) | "⚠️ この環境では YouTube にアクセスできません" | モード C に切り替える |
ステップ 3:トランスクリプトを抽出する
進捗:
echo "[████████████░░░░░░░░] 60% - Step 3/5: Extracting Transcript"
目的: アクティブなモードを使用してトランスクリプトのテキストを取得します。
モード A(Python):
from youtube_transcript_api import YouTubeTranscriptApi
video_id = "VIDEO_ID"
try:
transcript = YouTubeTranscriptApi.get_transcript(
video_id,
languages=['pt', 'en'] # Prefer Portuguese, fallback to English
)
full_text = " ".join([entry['text'] for entry in transcript])
print("✅ Transcript extracted successfully")
print(f"📊 Transcript length: {len(full_text)} characters")
with open(f"/tmp/transcript_{video_id}.txt", "w") as f:
f.write(full_text)
except Exception as e:
print(f"❌ Error extracting transcript: {e}")
exit(1)
モード B(WebFetch):
- WebFetch で YouTube 動画のページを取得します:
https://www.youtube.com/watch?v=VIDEO_ID - HTML 内で
ytInitialPlayerResponseJSON ブロックを見つけます captions.playerCaptionsTracklistRenderer.captionTracks[0].baseUrlを抽出します- その字幕 URL を WebFetch で取得します(
<text>要素を含む XML が返されます) - XML タグを取り除き、
<text>セグメントを結合してプレーンテキストにします
ページの読み込みに失敗した場合、または字幕トラックの URL が見つからない場合は、モード C に切り替えます。
モード C(手動):
トランスクリプトを提供するようユーザーに依頼します:
⚠️ YouTube is not accessible in this environment (proxy/sandbox restriction).
To proceed, paste the video transcript text directly into this chat.
To get it: go to youtube.com/watch?v=VIDEO_ID → click "..." below the video → "Show transcript" → copy all text.
Alternatively, run this skill in Claude Code (CLI) for automatic extraction.
ユーザーが貼り付けたプレーンテキストを受け入れ、ステップ 4 に直接進みます。
トランスクリプトの処理(すべてのモード):
- すべてのセグメントを結合して、一貫性のあるテキストにします
- 利用可能な場合は、句読点と書式を保持します
[Music]、[Applause]など、自動生成されたノイズマーカーを削除します
ステップ 4:包括的な要約を生成する
進捗:
echo "[████████████████░░░░] 80% - Step 4/5: Generating Summary"
目的: 強化された STAR + R-I-S-E プロンプトを適用し、詳細な要約を作成します。
適用するプロンプト:
抽出したトランスクリプトを入力として、フェーズ 2 の強化されたプロンプト(STAR + R-I-S-E フレームワーク)を使用します。
アクション:
- トランスクリプト全体のテキストを読み込みます
- 包括的な要約プロンプトを適用します
- AI モデル(Claude/GPT)を使用して、構造化された要約を生成します
- 出力が次の定義済み構成に従っていることを確認します:
- 動画のメタデータを含むヘッダー
- エグゼクティブサマリー
- セクションごとの詳細な内訳
- 重要な洞察と結論
- 概念と用語
- リソースと参考資料
実装:
# Use the transcript file as input to the AI prompt
TRANSCRIPT_FILE="/tmp/transcript_${VIDEO_ID}.txt"
# The AI agent will:
# 1. Read the transcript
# 2. Apply the STAR + R-I-S-E summarization framework
# 3. Generate comprehensive Markdown output
# 4. Structure with headers, lists, and highlights
Read "$TRANSCRIPT_FILE" # Read transcript into context
次に、完全な要約プロンプト(フェーズ 2 の強化版)を適用します。
ステップ 5:出力を整形して提示する
進捗:
echo "[████████████████████] 100% - Step 5/5: Formatting Output"
目的: 見やすく、適切に構成された Markdown で要約を提供します。
出力構成:
# [Video Title]
**Channel:** [Channel Name]
**Duration:** [Duration]
**URL:** [https://youtube.com/watch?v=VIDEO_ID]
**Published:** [Date if available]
## 📝 Detailed Summary
### [Topic 1]
[Comprehensive explanation with examples, data, quotes...]
#### [Subtopic 1.1]
[Detailed breakdown...]
### [Topic 2]
[Continued detailed analysis...]
## 📚 Concepts and Terminology
- **[Term 1]:** [Definition and context]
- **[Term 2]:** [Definition and context]
## 📌 Conclusion
[Final synthesis and takeaways]
*(Output follows same structure as Example 1.)*
## 📊 Executive Summary
This video provides a comprehensive introduction to the fundamental concepts of Artificial Intelligence (AI), designed for beginners and professionals who want to understand the technical foundations and practical applications of modern AI. The instructor covers everything from basic definitions to machine learning algorithms, using practical examples and visualizations to facilitate understanding.
[... continued detailed summary ...]
保存オプション:
What would you like to save?
→ Summary + raw transcript
✅ File saved: summary-example123-2026-02-01.md (includes raw transcript)
[████████████████████] 100% - ✓ Processing complete!
機械学習の基礎に関する包括的なチュートリアルへようこそ。今日の動画では、最新の AI システムを支える中核的な概念を解説します……
## Error Handling
| Error | Likely Cause | Action |
|-------|-------------|--------|
| Invalid YouTube URL format | URL is not a recognized youtube.com or youtu.be pattern | Show valid URL formats, ask user to provide correct URL |
| Video not found or private | Video was removed, made private, or URL is wrong | Inform user, ask for a public video URL |
| Transcripts disabled | Creator disabled transcripts on this video | Inform user transcripts are unavailable; suggest manual transcription |
| No transcript found | Video has no auto-generated or manual transcript | Inform user; suggest trying a different video or using audio-transcriber |
| `youtube-transcript-api` not installed | Python dependency missing | Offer to install with `pip install youtube-transcript-api` |
| YouTube blocked — proxy/sandbox error | Running in Claude Cowork or other sandboxed environment | Switch to Mode B (WebFetch); if also blocked, switch to Mode C (manual paste) |
| Network error / timeout | Internet connectivity issue or YouTube rate-limiting | Retry once; if it persists, inform user and ask to try again later |
| Transcript in unexpected language | Video is in a language not supported by the analyzer | Report detected language; proceed with available transcript |
**Version:** 1.2.0
**Last Updated:** 2026-02-02
**Maintained By:** Eric Andrade