jdepoix/youtube-transcript-api
This is a python API which allows you to get the transcript/subtitles for a given YouTube video. It also works for automatically generated subtitles and it does not require an API key nor a headless browser, like other selenium based solutions do!
这是什么?
youtube-transcript-api 是一个 Python 库,可以获取 YouTube 视频的转录文本(字幕)。它支持手动创建的字幕和 YouTube 自动生成的字幕,可以翻译字幕,并且不需要浏览器(与其他一些工具不同)。
如何安装
使用 pip:
pip install youtube-transcript-api
基本用法
通过传递视频的 视频 ID(而不是完整 URL)来获取转录文本。例如,对于 https://www.youtube.com/watch?v=12345,ID 是 12345。
from youtube_transcript_api import YouTubeTranscriptApi
ytt_api = YouTubeTranscriptApi()
transcript = ytt_api.fetch(video_id)
默认情况下,它会尝试获取英文字幕。返回的对象类似于列表:你可以迭代它、索引它并获取其长度。每个片段都有 text、start(秒)和 duration(秒)。
你也可以使用 transcript.to_raw_data() 获取字典列表形式的原始数据。
选择语言
按优先顺序传递语言代码列表:
ytt_api.fetch(video_id, languages=['de', 'en']) # 优先尝试德语,然后是英语
列出可用的转录文本
要查看视频的所有转录文本:
transcript_list = ytt_api.list(video_id)
你可以按语言和类型(手动创建 vs 自动生成)进行过滤:
transcript = transcript_list.find_transcript(['de', 'en'])
transcript = transcript_list.find_manually_created_transcript(['de', 'en'])
transcript = transcript_list.find_generated_transcript(['de', 'en'])
每个 Transcript 对象都有元数据(视频 ID、语言、是否生成、是否可翻译等)和一个 .fetch() 方法来获取实际的转录文本。
翻译字幕
你可以将转录文本翻译成另一种语言:
translated = transcript.translate('de')
translated.fetch()
处理 IP 封禁
YouTube 有时会阻止云 IP。该库支持使用代理。它内置了对 Webshare 轮换住宅代理的支持,或者你也可以通过 GenericProxyConfig 使用任何通用 HTTP/HTTPS/SOCKS 代理。
自定义 HTTP 设置
你可以传递自己的 requests.Session 来设置标头、SSL 证书,或在实例之间共享 cookie。
格式化器
该库包含格式化器,可以将转录文本转换为常见的格式,如 JSON、文本、SRT、WebVTT 等。你也可以通过继承 Formatter 来创建自己的格式化器。
CLI
还有一个命令行工具:
youtube_transcript_api <video_id_1> <video_id_2> ...
它将转录文本打印到终端。
关于年龄限制视频的说明
基于 cookie 的身份验证目前存在故障,因此可能无法访问年龄限制的视频。
以上所有信息均直接来自项目的 README。
相关
- 项目
- 项目
- 项目
- 项目