它解决什么问题
研究口语、语码转换或低资源语言的人员,很难找到足够自然的对话数据。许多视频没有字幕,而现有字幕又混杂了质量参差的人工和自动来源。团队需要一条统一的流水线,能处理多种语言,并记录每份字幕的来源。
第一版应该包含哪些功能
- 检测每个视频可用的字幕语言
- 为无字幕视频提供 99 种语言的 AI 语音识别
- 支持混合多种语言讲话的语码转换
- 用于对齐的词级时间戳
- 每份字幕都附语言和字幕来源元数据
分步实现指南
- 01
寻找候选视频
解析已知包含目标语言的频道或播放列表,并调用 /transcripts/{video_id}/languages 查看有哪些字幕轨道。
- 02
优先使用现有字幕
有人工字幕时就获取人工字幕,因为它们通常最准确。
- 03
用语音识别补缺
对没有字幕的视频,请求 ASR 并指定语言或自动检测;对混合语言的讲话启用 codeSwitching。
- 04
连同对齐数据一起存储
请求 format.words 获取词级时间戳,并将每份字幕的语言和来源与文本一起存储。
入门代码
这个创意基于“方案 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为什么值得做
实验室和 AI 团队能以低成本获得原本采集代价高昂的语言的评测和研究数据。针对特定语言或领域、整理干净且文档完善的数据集,对模型开发者也很有价值。
需要避开的坑
- 把自动字幕当作标准答案:标注来源,并人工抽样验证。
- 混合方言却没有元数据:记录频道和地区,结果才能被正确解读。
- 忽视授权问题:在重新分发任何数据集之前,先确认平台条款和版权。
关于这个创意的问题
语音识别支持多少种语言?
AI 语音识别支持 99 种语言,具备自动语言检测功能,并可选启用语码转换以处理混合语言的讲话。
能获取词级时间戳吗?
能。请求 format.words 即可获得每个词的时间信息,适用于对齐和语音学研究。
基于 YouTube 构建的数据集可以重新分发吗?
这取决于 YouTube 的条款、版权法和你所在机构的政策。许多研究人员分享的是视频 ID 和代码,而不是字幕本身。