YouTube Transcript Extraction
Extract subtitles/transcripts from a YouTube video URL and save them as a local file.
Input YouTube URL: $ARGUMENTS
Step 1: Verify URL and Get Video Information
Verify URL Format: Confirm the input is a valid YouTube URL (supports youtube.com/watch?v= or youtu.be/ formats).
Get Video Information: Use WebFetch or firecrawl to fetch the page and extract the video title for subsequent file naming.
Step 2: CLI Quick Extraction (Priority Attempt)
Use command-line tools to quickly extract subtitles.
Check Tool Availability:
Execute which yt-dlp.
- If
yt-dlp is found, proceed to subtitle download.
- If
yt-dlp is NOT found, skip immediately to Step 3.
Execute Subtitle Download (Only if yt-dlp is found):
- Tip: Always add
--cookies-from-browser to avoid sign-in restrictions. Default to chrome.
- Retry Logic: If
yt-dlp fails with a browser error (e.g., "Could not open Chrome"), ask the user to specify their available browser (e.g., firefox, safari, edge) and retry.
# Get the title first (try chrome first)
yt-dlp --cookies-from-browser=chrome --get-title "[VIDEO_URL]"
# Download subtitles
yt-dlp --cookies-from-browser=chrome --write-auto-sub --write-sub --sub-lang zh-Hans,zh-Hant,en --skip-download --output "<Video Title>.%(ext)s" "[VIDEO_URL]"
Verify Results:
- Check the command exit code.
- Exit code 0 (Success): Subtitles have been saved locally, task complete.
- Exit code non-0 (Failure):
- If error is related to browser/cookies, ask user for correct browser and retry Step 2.
- If other errors (e.g., video unavailable), proceed to Step 3.
Step 3: Browser Automation (Fallback)
When the CLI method fails or yt-dlp is missing, use browser UI automation to extract subtitles.
Check Tool Availability:
- Check if
chrome-devtools-mcp tools (specifically mcp__plugin_claude-code-settings_chrome__new_page) are available.
- CRITICAL CHECK: If
chrome-devtools-mcp is NOT available AND yt-dlp was NOT found in Step 2:
- STOP execution.
- Notify the User: "Unable to proceed. Please either install
yt-dlp (for fast CLI extraction) OR configure chrome-devtools-mcp (for browser automation)."
Initialize Browser Session (If tools are available):
Call mcp__plugin_claude-code-settings_chrome__new_page to open the video URL.
3.2 Analyze Page State
Call mcp__plugin_claude-code-settings_chrome__take_snapshot to read the page accessibility tree.
3.3 Expand Video Description
Reason: The "Show transcript" button is usually hidden within the collapsed description area.
- Search the snapshot for a button labeled "...more", "...更多", or "Show more" (usually located in the description block below the video title).
- Call
mcp__plugin_claude-code-settings_chrome__click to click that button.
3.4 Open Transcript Panel
- Call
mcp__plugin_claude-code-settings_chrome__take_snapshot to get the updated UI snapshot.
- Search for a button labeled "Show transcript", "显示转录稿", or "内容转文字".
- Call
mcp__plugin_claude-code-settings_chrome__click to click that button.
3.5 Extract Content via DOM
Reason: Directly reading the accessibility tree for long lists is slow and consumes many tokens; DOM injection is more efficient.
Call mcp__plugin_claude-code-settings_chrome__evaluate_script to execute the following JavaScript:
() => {
// Select all transcript segment containers
const segments = document.querySelectorAll("ytd-transcript-segment-renderer");
if (!segments.length) return "BUFFERING"; // Retry if empty
// Iterate and format as "timestamp text"
return Array.from(segments)
.map((seg) => {
const time = seg.querySelector(".segment-timestamp")?.innerText.trim();
const text = seg.querySelector(".segment-text")?.innerText.trim();
return `${time} ${text}`;
})
.join("\n");
};
If it returns "BUFFERING", wait a few seconds and retry.
3.6 Save and Cleanup
- Use the Write tool to save the extracted text as a local file (e.g.,
<Video Title>.txt).
- Call
mcp__plugin_claude-code-settings_chrome__close_page to release resources.
Output Requirements
- Save the subtitle file to the current working directory.
- Filename format:
<Video Title>.txt
- File content format: Each line should be
Timestamp Subtitle Text.
- Report upon completion: File path, subtitle language, total number of lines.
1---2name: youtube-transcribe-skill3description: Extract subtitles/transcripts from YouTube videos. Triggers: "youtube transcript", "extract subtitles", "video captions", "视频字幕", "字幕提取", "YouTube转文字", "提取字幕".4---5
6# YouTube Transcript Extraction
7
8Extract subtitles/transcripts from a YouTube video URL and save them as a local file.
9
10Input YouTube URL: $ARGUMENTS
11
12## Step 1: Verify URL and Get Video Information
13
141. **Verify URL Format**: Confirm the input is a valid YouTube URL (supports `youtube.com/watch?v=` or `youtu.be/` formats).
15
162. **Get Video Information**: Use WebFetch or firecrawl to fetch the page and extract the video title for subsequent file naming.
17
18## Step 2: CLI Quick Extraction (Priority Attempt)
19
20Use command-line tools to quickly extract subtitles.
21
221. **Check Tool Availability**:
23 Execute `which yt-dlp`.
24
25 - If `yt-dlp` is **found**, proceed to subtitle download.
26 - If `yt-dlp` is **NOT found**, skip immediately to **Step 3**.
27
282. **Execute Subtitle Download** (Only if `yt-dlp` is found):
29
30 - **Tip**: Always add `--cookies-from-browser` to avoid sign-in restrictions. Default to `chrome`.
31 - **Retry Logic**: If `yt-dlp` fails with a browser error (e.g., "Could not open Chrome"), ask the user to specify their available browser (e.g., `firefox`, `safari`, `edge`) and retry.
32
33 ```bash
34 # Get the title first (try chrome first)
35 yt-dlp --cookies-from-browser=chrome --get-title "[VIDEO_URL]"
36
37 # Download subtitles
38 yt-dlp --cookies-from-browser=chrome --write-auto-sub --write-sub --sub-lang zh-Hans,zh-Hant,en --skip-download --output "<Video Title>.%(ext)s" "[VIDEO_URL]"
39 ```
40
413. **Verify Results**:
42 - Check the command exit code.
43 - **Exit code 0 (Success)**: Subtitles have been saved locally, task complete.
44 - **Exit code non-0 (Failure)**:
45 - If error is related to browser/cookies, ask user for correct browser and retry Step 2.
46 - If other errors (e.g., video unavailable), proceed to **Step 3**.
47
48## Step 3: Browser Automation (Fallback)
49
50When the CLI method fails or `yt-dlp` is missing, use browser UI automation to extract subtitles.
51
521. **Check Tool Availability**:
53
54 - Check if `chrome-devtools-mcp` tools (specifically `mcp__plugin_claude-code-settings_chrome__new_page`) are available.
55 - **CRITICAL CHECK**: If `chrome-devtools-mcp` is **NOT** available AND `yt-dlp` was **NOT** found in Step 2:
56 - **STOP** execution.
57 - **Notify the User**: "Unable to proceed. Please either install `yt-dlp` (for fast CLI extraction) OR configure `chrome-devtools-mcp` (for browser automation)."
58
592. **Initialize Browser Session** (If tools are available):
60
61 Call `mcp__plugin_claude-code-settings_chrome__new_page` to open the video URL.
62
63### 3.2 Analyze Page State
64
65Call `mcp__plugin_claude-code-settings_chrome__take_snapshot` to read the page accessibility tree.
66
67### 3.3 Expand Video Description
68
69_Reason: The "Show transcript" button is usually hidden within the collapsed description area._
70
711. Search the snapshot for a button labeled **"...more"**, **"...更多"**, or **"Show more"** (usually located in the description block below the video title).
722. Call `mcp__plugin_claude-code-settings_chrome__click` to click that button.
73
74### 3.4 Open Transcript Panel
75
761. Call `mcp__plugin_claude-code-settings_chrome__take_snapshot` to get the updated UI snapshot.
772. Search for a button labeled **"Show transcript"**, **"显示转录稿"**, or **"内容转文字"**.
783. Call `mcp__plugin_claude-code-settings_chrome__click` to click that button.
79
80### 3.5 Extract Content via DOM
81
82_Reason: Directly reading the accessibility tree for long lists is slow and consumes many tokens; DOM injection is more efficient._
83
84Call `mcp__plugin_claude-code-settings_chrome__evaluate_script` to execute the following JavaScript:
85
86```javascript
87() => {
88 // Select all transcript segment containers
89 const segments = document.querySelectorAll("ytd-transcript-segment-renderer");
90 if (!segments.length) return "BUFFERING"; // Retry if empty
91
92 // Iterate and format as "timestamp text"
93 return Array.from(segments)
94 .map((seg) => {
95 const time = seg.querySelector(".segment-timestamp")?.innerText.trim();
96 const text = seg.querySelector(".segment-text")?.innerText.trim();
97 return `${time} ${text}`;
98 })
99 .join("\n");
100};
101```
102
103If it returns "BUFFERING", wait a few seconds and retry.
104
105### 3.6 Save and Cleanup
106
1071. Use the Write tool to save the extracted text as a local file (e.g., `<Video Title>.txt`).
1082. Call `mcp__plugin_claude-code-settings_chrome__close_page` to release resources.
109
110## Output Requirements
111
112- Save the subtitle file to the current working directory.
113- Filename format: `<Video Title>.txt`
114- File content format: Each line should be `Timestamp Subtitle Text`.
115- Report upon completion: File path, subtitle language, total number of lines.