OpenClaw Skills YouTube字幕获取(YouTube Watcher)技能使用参考手册

2026-03-05 17:21 更新

概述

YouTube Watcher 是一个用于获取 YouTube 视频字幕的 OpenClaw 技能,你可以使用它来总结视频内容、回答关于视频的问题,或者从视频中提取所需的信息。

技能信息

  • 名称:youtube-watcher
  • 描述:获取并读取 YouTube 视频的字幕,支持对视频内容进行总结、问答和信息提取。
  • 作者:michael gathara
  • 版本:1.0.0
  • 触发词
    • "watch youtube"
    • "summarize video"
    • "video transcript"
    • "youtube summary"
    • "analyze video"
  • 依赖要求:需要安装yt-dlp工具,可通过以下方式安装:
    • 使用 brew:brew install yt-dlp
    • 使用 pip:pip install yt-dlp

👤 作者:Michaelgathara
🦞 官方地址:https://clawhub.ai/Michaelgathara/youtube-watcher
👉 Skills 下载地址:youtube-watcher-1.0.0.zip

使用方法

获取视频字幕

要获取 YouTube 视频的文字字幕,使用以下命令:

python3 {baseDir}/scripts/get_transcript.py "https://www.youtube.com/watch?v=VIDEO_ID"

其中{baseDir}是该技能的基础目录路径,VIDEO_ID需要替换为目标 YouTube 视频的 ID。

示例

总结视频内容

  1. 首先获取目标视频的字幕:

  1.   python3 {baseDir}/scripts/get_transcript.py "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

  1. 读取脚本输出的字幕内容,为用户总结该视频的核心内容和关键信息。

查找视频中的特定信息

  1. 先获取目标视频的字幕文件
  2. 在字幕文本中搜索指定的关键词,或者根据用户的问题,从字幕内容中找到对应的答案并反馈给用户。

注意事项

  • 请确保yt-dlp已经安装完成,并且在系统的 PATH 环境变量中可以被访问到
  • 该技能仅适用于带有隐藏字幕(CC)或自动生成字幕的 YouTube 视频
  • 如果目标视频没有提供任何字幕,脚本会输出错误提示信息

工具代码说明

get_transcript.py(YouTube 字幕获取脚本)

#!/usr/bin/env python3
import argparse
import os
import re
import subprocess
import sys
import tempfile
from pathlib import Path


def clean_vtt(content: str) -> str:
    """
    清理WebVTT格式的字幕内容,转换为纯文本格式
    移除WebVTT的头部信息、时间戳和重复的行内容
    """
    lines = content.splitlines()
    text_lines = []
    seen = set()

    
    # 用于匹配WebVTT时间戳的正则表达式
    timestamp_pattern = re.compile(r'\d{2}:\d{2}:\d{2}\.\d{3}\s-->\s\d{2}:\d{2}:\d{2}\.\d{3}')

    
    for line in lines:
        line = line.strip()
        # 跳过空行、WebVTT标识行和纯数字行
        if not line or line == 'WEBVTT' or line.isdigit():
            continue
        # 跳过时戳行
        if timestamp_pattern.match(line):
            continue
        # 跳过NOTE和STYLE注释行
        if line.startswith('NOTE') or line.startswith('STYLE'):
            continue

            
        # 跳过与上一行重复的内容
        if text_lines and text_lines[-1] == line:
            continue

            
        # 移除文本中的HTML标签
        line = re.sub(r'<[^>]+>', '', line)

        
        text_lines.append(line)

        
    return '\n'.join(text_lines)


def get_transcript(url: str):
    """
    获取指定YouTube视频的字幕内容
    参数:
        url: 目标YouTube视频的完整URL
    """
    # 创建临时目录用于存储下载的字幕文件
    with tempfile.TemporaryDirectory() as temp_dir:
        # 构建yt-dlp命令,用于下载视频字幕
        cmd = [
            "yt-dlp",
            "--write-subs",          # 写入字幕文件
            "--write-auto-subs",     # 同时写入自动生成的字幕
            "--skip-download",       # 跳过视频文件的下载
            "--sub-lang", "en",      # 仅下载英文字幕
            "--output", "subs",      # 字幕文件的输出前缀
            url                      # 目标YouTube视频的URL
        ]

        
        try:
            # 执行yt-dlp命令,捕获输出内容
            subprocess.run(cmd, cwd=temp_dir, check=True, capture_output=True)
        except subprocess.CalledProcessError as e:
            # 命令执行失败时输出错误信息
            print(f"运行yt-dlp时出错: {e.stderr.decode()}", file=sys.stderr)
            sys.exit(1)
        except FileNotFoundError:
            # 未找到yt-dlp工具时提示用户安装
            print("错误: 未找到yt-dlp,请先安装该工具。", file=sys.stderr)
            sys.exit(1)

            
        # 在临时目录中查找vtt格式的字幕文件
        temp_path = Path(temp_dir)
        vtt_files = list(temp_path.glob("*.vtt"))

        
        if not vtt_files:
            # 未找到任何字幕文件时提示
            print("未找到该视频的字幕文件。", file=sys.stderr)
            sys.exit(1)

            
        # 取找到的第一个字幕文件
        vtt_file = vtt_files[0]

        
        # 读取字幕文件的内容
        content = vtt_file.read_text(encoding='utf-8')
        # 清理字幕内容,转换为纯文本
        clean_text = clean_vtt(content)
        # 输出清理后的纯文字幕
        print(clean_text)


def main():
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description="获取YouTube视频字幕的工具。")
    parser.add_argument("url", help="目标YouTube视频的完整URL")
    args = parser.parse_args()

    
    # 调用获取字幕的函数
    get_transcript(args.url)


if __name__ == "__main__":
    main()

元数据信息

该技能的元数据信息如下:

{
  "ownerId": "kn70xwv21y5gnsycry0shkye6d7zx8jz",
  "slug": "youtube-watcher",
  "version": "1.0.0",
  "publishedAt": 1769327779866
}
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号