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。

相关

  • 项目
  • 项目
  • 项目
  • 项目