它解决什么问题
人工转录把研究规模限制在几十个视频,而临时写的爬虫脚本容易失效,也难以复现。研究人员需要一种可靠的方式,为确定的频道和日期样本采集完整字幕,连同元数据存储,并公开方法以便他人复现。
第一版应该包含哪些功能
- 有记录的频道样本和日期范围
- 以原始 JSON 存储的完整字幕及元数据
- 记录每个视频的字幕来源(人工、自动或 AI)
- 导出为 CSV 或文本,供 R、Python、NVivo 或 ATLAS.ti 使用
- 可重复运行的采集脚本,便于复现
分步实现指南
- 01
确定样本
列出要研究的频道和时间段,并记录纳入标准,供方法部分使用。
- 02
解析视频列表
对每个频道调用 /channels/resolve,并按发布日期筛选结果。
- 03
采集字幕
把视频 ID 发送到 /batch,存储完整的 JSON 响应,包括每份字幕的语言和字幕来源。
- 04
准备分析
把字幕连同视频 ID、频道、日期和时间戳导出为文本或 CSV,然后用主题模型、词频统计或质性编码进行分析。
入门代码
这个创意基于“方案 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为什么值得做
对研究人员来说,回报是以远低于人工转录的成本和时间获得可复现的数据集。也有团队为媒体监测公司和智库打造付费数据集或分析服务。
需要避开的坑
- 混用自动字幕和人工字幕却不加标注:要记录字幕来源,因为准确度不同。
- 不保存原始响应:存储原始 JSON,以便重新运行分析。
- 忽视伦理审查和平台条款:发布数据集前,先确认所在机构的要求和 YouTube 的条款。
关于这个创意的问题
可以把 YouTube 字幕用于学术研究吗?
很多研究人员都在这么做。请确认所在机构的伦理要求、YouTube 的条款和版权法,尤其是在公开分享数据集之前。
YouTube 自动字幕的准确度如何?
取决于音质、口音和话题。API 会注明每份字幕来自人工字幕、自动字幕还是 AI 语音识别,方便你在分析中加以考虑。
一次能采集多少个视频?
Business 套餐下,单次批量请求最多接受 3,000 个视频 ID。规模更大的研究可以运行多个批次。