开发指南 · 应用开发者

如何为 YouTube 视频中的讲话内容搭建搜索引擎

YouTube 搜索只匹配标题、简介和标签。它没法告诉你 400 期播客中哪一期提到了某位嘉宾、某本书或某个观点,更别说是第几分钟。基于字幕的搜索引擎可以做到,而且这是用这个 API 最快能做出的实用产品之一。

适合谁
播客网络、课程平台、粉丝社区、企业内部视频库
开发周期
一个周末
API 接口
/channels/resolve/batch/transcripts/{video_id}

它解决什么问题

大型视频库实际上无法搜索。粉丝要在几小时的视频里来回拖动,寻找一个记得不太清的片段;学员为了找到一段讲解要重看整节课;企业的知识则埋没在录制的演讲里。为带时间戳的字幕建立索引,就能像搜索文档一样搜索任何视频库,结果还能直接跳到正确的时刻。

第一版应该包含哪些功能

  • 在频道或播放列表的所有视频中按短语和关键词搜索
  • 结果显示匹配的句子,并附带跳转到精确时间点的链接
  • 语义搜索:搜“我的产品该怎么定价”也能找到“如何设定收费标准”
  • 按日期、视频和说话人筛选
  • 新上传的视频自动建立索引

分步实现指南

  1. 01

    收集视频列表

    用频道 handle 或播放列表 URL 调用 /channels/resolve 或 /playlists/resolve,获取每个视频的 ID 和标题。

  2. 02

    批量获取字幕

    把视频 ID 发送到 /batch,并启用 format.timestamp 和 format.paragraphs。大批量任务是异步执行的,可轮询 /batch/{batch_id} 或使用 webhook。

  3. 03

    为分段建立索引

    将每个段落连同视频 ID 和开始时间一起存储。关键词搜索用 Postgres 全文搜索就够了;如需按语义搜索,可在 pgvector 或向量数据库中加入向量嵌入。

  4. 04

    搭建搜索界面

    返回最匹配的结果及上下文,并提供 youtube.com/watch?v=ID&t=SECONDS 格式的链接,让用户直接跳到那一刻。

  5. 05

    保持内容更新

    运行定时任务,重新解析频道,找出新的视频 ID,只为这些新视频获取字幕。

入门代码

这个创意基于“方案 3:把播放列表批量导入知识库”模式。替换成你自己的频道、提示词和存储即可。

import requests

API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}

playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
                         json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
                               "limit": 100}).json()

ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
    "video_ids": ids,
    "format": {"timestamp": True, "paragraphs": True},
}).json()

# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
    if r["status"] == "completed":
        for p in r["data"]["transcript"].get("paragraphs") or []:
            store(video_id=r["video_id"], start=p["start"], text=p["text"])  # your vector DB

为什么值得做

卖给视频库的所有者而不是观众:播客网络、课程平台和拥有内部视频档案的公司,愿意为能提升受众黏性的搜索功能支付月费。对于粉丝社区,可以提供免费的公开搜索,再用提醒或 API 访问做付费层。

需要避开的坑

  • 把整份字幕当作一个文档来索引:没有段落级时间戳,搜索结果基本没用。
  • 每次更新都重新转录整个频道,而不是记录哪些视频 ID 已经处理过。
  • 只依赖精确关键词匹配:口语表达很随意,应尽早加入语义搜索。

关于这个创意的问题

搜索 YouTube 字幕需要向量数据库吗?

不需要。对大多数视频库来说,Postgres 全文搜索就能很好地处理关键词搜索。当你希望按语义而非字面匹配时,再加入向量嵌入。

如何把搜索结果链接到视频中的精确时刻?

每个字幕分段都包含以秒为单位的开始时间。在 YouTube 链接后追加 &t= 加上该数字即可。

没有字幕的视频也能建立索引吗?

可以。启用 allow_asr 并提供 webhook URL,当视频缺少字幕时,API 会用 AI 语音识别转录音频。

今天就开始开发

每月 10 个免费额度,无需信用卡。

如何搭建 YouTube 视频内容搜索引擎 | YouTubeTranscript.dev