从YouTube视频中提取字幕和文字稿
YouTube Transcription. 从YouTube视频URL中提取字幕/图文,并保存为本地文件..是一项面向实际任务的技能,主要用于Imput YouTube URL: $ARGUMENTS.;Step 1: 校验URL并获取视频信息. 1.Ver.。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
从 YouTube 视频 URL 提取字幕/转录文本,并保存为本地文件。
输入 YouTube URL:$ARGUMENTS
验证 URL 格式:确认输入为有效的 YouTube URL(支持 youtube.com/watch?v= 或 youtu.be/ 格式)。
获取视频信息:使用 WebFetch 或 firecrawl 抓取页面,提取视频标题以用于后续文件命名。
使用命令行工具快速提取字幕。
检查工具可用性:
执行 which yt-dlp。
yt-dlp 存在,继续执行字幕下载。yt-dlp 不存在,立即跳转至 步骤 3。执行字幕下载(仅当检测到 yt-dlp 时):
--cookies-from-browser 参数以规避登录限制,默认使用 chrome。yt-dlp 因浏览器错误失败(例如 “Could not open Chrome”),请向用户询问其可用的浏览器(如 firefox、safari、edge),并使用指定浏览器重试。# 先获取标题(默认尝试 chrome) yt-dlp --cookies-from-browser=chrome --get-title "[VIDEO_URL]" # 下载字幕 yt-dlp --cookies-from-browser=chrome --write-auto-sub --write-sub --sub-lang zh-Hans,zh-Hant,en --skip-download --output "
验证结果:
当 CLI 方法失败或系统未安装 yt-dlp 时,采用浏览器 UI 自动化方式提取字幕。
检查工具可用性:
chrome-devtools-mcp 工具(特别是 mcp__plugin_claude-code-settings_chrome__new_page)。chrome-devtools-mcp 不可用,且步骤 2 中 yt-dlp 也 未被找到,则:
yt-dlp(用于快速 CLI 提取),或配置 chrome-devtools-mcp(用于浏览器自动化)。”初始化浏览器会话(若工具可用):
调用 mcp__plugin_claude-code-settings_chrome__new_page 打开视频 URL。
调用 mcp__plugin_claude-code-settings_chrome__take_snapshot 获取当前页面的可访问性树(accessibility tree)。
原因:“Show transcript” 按钮通常隐藏在已折叠的视频描述区域内。
mcp__plugin_claude-code-settings_chrome__click 点击该按钮。mcp__plugin_claude-code-settings_chrome__take_snapshot 获取更新后的 UI 快照。mcp__plugin_claude-code-settings_chrome__click 点击该按钮。原因:对长列表直接读取可访问性树效率低且消耗大量 token;DOM 注入方式更高效。
调用 mcp__plugin_claude-code-settings_chrome__evaluate_script 执行以下 JavaScript:
() => {
// 选取所有字幕片段容器
const segments = document.querySelectorAll("ytd-transcript-segment-renderer");
if (!segments.length) return "BUFFERING"; // 若为空则重试
// 遍历并格式化为 "时间戳 文本"
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");
};
若返回值为 "BUFFERING",等待数秒后重试。
)。mcp__plugin_claude-code-settings_chrome__close_page 释放浏览器资源。时间戳 字幕文本。