youtube-transcript-api

youtube-transcript-api

轻松获取YouTube视频字幕的Python API库

youtube-transcript-api是一个Python库,用于获取YouTube视频的字幕和转录文本。该库支持自动生成字幕、字幕翻译,无需使用无头浏览器。它提供简单的API方法,支持批量获取字幕、指定语言和保留格式等功能。此外,youtube-transcript-api还包含命令行界面和代理支持,便于集成到现有应用中。这个库为需要处理YouTube视频字幕的开发者提供了一个实用的工具。

YouTube Transcript API字幕提取Python库视频转录多语言支持Github开源项目
<h1 align="center"> ✨ YouTube 字幕 API ✨ </h1> <p align="center"> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BAENLEW8VUJ6G&source=url"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/1b1f14e1-4e23-4c85-8c98-d93902bc2f04.svg" alt="捐赠"> </a> <a href="https://app.travis-ci.com/jdepoix/youtube-transcript-api"> <img src="https://travis-ci.com/jdepoix/youtube-transcript-api.svg?branch=master" alt="构建状态"> </a> <a href="https://coveralls.io/github/jdepoix/youtube-transcript-api?branch=master"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/a12b1098-c8a4-4fc9-992e-e8d261890234.svg?branch=master" alt="覆盖率状态"> </a> <a href="http://opensource.org/licenses/MIT"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/08989f75-5366-4180-a1c6-49dfa804bbc1.svg?style=flat" alt="MIT 许可证"> </a> <a href="https://pypi.org/project/youtube-transcript-api/"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/1ccb45d7-53a6-4463-b8d9-d15b73e76d64.svg" alt="当前版本"> </a> <a href="https://pypi.org/project/youtube-transcript-api/"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/64b3f064-12e2-4193-bff3-db515b6009a6.svg" alt="支持的 Python 版本"> </a> </p> <p align="center"> <b>这是一个 Python API,允许你获取指定 YouTube 视频的字幕/副标题。它也适用于自动生成的字幕,支持字幕翻译,并且不需要无头浏览器,这与其他基于 Selenium 的解决方案不同!</b> </p> <p align="center"> 这个项目的维护得益于所有的<a href="https://github.com/jdepoix/youtube-transcript-api/graphs/contributors">贡献者</a>和<a href="https://github.com/sponsors/jdepoix">赞助商</a>。如果你想赞助这个项目并在下方显示你的头像或公司标志,<a href="https://github.com/sponsors/jdepoix">点击这里</a>。 💖 </p> <p align="center"> <a href="https://www.searchapi.io"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://www.searchapi.io/press/v1/svg/searchapi_logo_white_h.svg"> <source media="(prefers-color-scheme: light)" srcset="https://yellow-cdn.veclightyear.com/0a4dffa0/261484f9-d204-4568-9b0e-51ebc9e48fe0.svg"> <img alt="SearchAPI" src="https://yellow-cdn.veclightyear.com/0a4dffa0/261484f9-d204-4568-9b0e-51ebc9e48fe0.svg" height="40px"> </picture> </a>&nbsp;&nbsp; </p>

安装

推荐使用 pip 安装此模块

pip install youtube-transcript-api

如果你想从源代码使用,你需要手动安装依赖:

pip install -r requirements.txt

你可以将此模块集成到现有应用程序中,或者通过命令行界面使用它。

API

获取给定视频字幕的最简单方法是执行:

from youtube_transcript_api import YouTubeTranscriptApi YouTubeTranscriptApi.get_transcript(video_id)

注意: 默认情况下,这将尝试访问视频的英文字幕。如果你的视频使用不同的语言,或者你对获取其他语言的字幕感兴趣,请阅读下面的部分。

这将返回一个字典列表,看起来类似这样:

[ { 'text': '嘿,你好', 'start': 7.58, 'duration': 6.13 }, { 'text': '你好吗', 'start': 14.08, 'duration': 7.58 }, # ... ]

获取不同语言

如果你想确保以你想要的语言获取字幕(默认为英语),可以添加 languages 参数。

YouTubeTranscriptApi.get_transcript(video_id, languages=['de', 'en'])

这是一个按降序优先级排列的语言代码列表。在这个例子中,它会首先尝试获取德语字幕('de'),如果失败则获取英语字幕('en')。如果你想先了解有哪些可用语言,可以查看list_transcripts()函数。

如果你只想要一种语言,仍然需要将languages参数格式化为列表:

YouTubeTranscriptApi.get_transcript(video_id, languages=['de'])

批量获取字幕

要获取多个视频ID的字幕,可以调用:

YouTubeTranscriptApi.get_transcripts(["video_id1", "video_id2"], languages=['de', 'en'])

这里的languages参数也是可选的。

保留格式

如果你想保留HTML格式元素,如<i>(斜体)和<b>(粗体),可以添加preserve_formatting=True

YouTubeTranscriptApi.get_transcripts(video_ids, languages=['de', 'en'], preserve_formatting=True)

列出可用字幕

如果你想列出给定视频的所有可用字幕,可以调用:

transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)

这将返回一个可迭代的TranscriptList对象,它提供了方法来筛选特定语言和类型的字幕列表,比如:

transcript = transcript_list.find_transcript(['de', 'en'])

默认情况下,如果请求的语言同时有手动创建和自动生成的字幕,该模块总是优先选择手动创建的字幕。TranscriptList允许你绕过这个默认行为,搜索特定类型的字幕:

# 筛选手动创建的字幕 transcript = transcript_list.find_manually_created_transcript(['de', 'en']) # 或自动生成的字幕 transcript = transcript_list.find_generated_transcript(['de', 'en'])

find_generated_transcriptfind_manually_created_transcriptfind_transcript方法返回Transcript对象。它们包含字幕的元数据:

print( transcript.video_id, transcript.language, transcript.language_code, # 是否为手动创建或由YouTube生成 transcript.is_generated, # 该字幕是否可翻译 transcript.is_translatable, # 字幕可翻译的语言列表 transcript.translation_languages, )

并提供了获取实际字幕数据的方法:

transcript.fetch()

翻译字幕

YouTube有一个可以自动翻译字幕的功能。本模块也可以访问这个功能。Transcript对象提供了一个translate()方法,它返回一个新的翻译后的Transcript对象:

transcript = transcript_list.find_transcript(['en']) translated_transcript = transcript.translate('de') print(translated_transcript.fetch())

示例

from youtube_transcript_api import YouTubeTranscriptApi # 获取可用字幕 transcript_list = YouTubeTranscriptApi.list_transcripts('video_id') # 遍历所有可用字幕 for transcript in transcript_list: # Transcript对象提供元数据属性 print( transcript.video_id, transcript.language, transcript.language_code, # 是否为手动创建或由YouTube生成 transcript.is_generated, # 该字幕是否可翻译 transcript.is_translatable, # 字幕可翻译的语言列表 transcript.translation_languages, ) # 获取实际字幕数据 print(transcript.fetch()) # 翻译字幕将返回另一个字幕对象 print(transcript.translate('en').fetch()) # 你也可以直接筛选你要找的语言,使用字幕列表 transcript = transcript_list.find_transcript(['de', 'en']) # 或只筛选手动创建的字幕 transcript = transcript_list.find_manually_created_transcript(['de', 'en']) # 或自动生成的字幕 transcript = transcript_list.find_generated_transcript(['de', 'en'])

使用格式化器

格式化器旨在对你传递的字幕进行额外的处理层。目标是将字幕从其Python数据类型转换为特定"格式"的一致字符串。比如基本文本(.txt)或甚至有明确规范的格式,如JSON(.json)、WebVTT(.vtt)、SRT(.srt)、逗号分隔格式(.csv)等。

formatters子模块提供了一些基本的格式化器,用于包装你的字幕数据,以便在需要输出特定格式然后将该格式写入文件时使用。可能是为了备份/存储,以便稍后运行另一个脚本。

我们提供了几个格式化器子类供使用:

  • JSONFormatter
  • PrettyPrintFormatter
  • TextFormatter
  • WebVTTFormatter
  • SRTFormatter

以下是如何从formatters模块导入的方法:

# 创建自己的格式化器时要继承的基类。 from youtube_transcript_api.formatters import Formatter # 一些提供的子类,每个子类输出不同的字符串格式。 from youtube_transcript_api.formatters import JSONFormatter from youtube_transcript_api.formatters import TextFormatter from youtube_transcript_api.formatters import WebVTTFormatter from youtube_transcript_api.formatters import SRTFormatter

提供的格式化器示例

假设我们想获取一个字幕并将该字幕以与API返回相同的格式写入JSON文件。代码看起来像这样:

# your_custom_script.py from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.formatters import JSONFormatter # 必须是单个字幕。 transcript = YouTubeTranscriptApi.get_transcript(video_id) formatter = JSONFormatter() # .format_transcript(transcript) 将字幕转换为JSON字符串。 json_formatted = formatter.format_transcript(transcript) # 现在我们可以将其写入文件。 with open('your_filename.json', 'w', encoding='utf-8') as json_file: json_file.write(json_formatted) # 现在应该有一个新的JSON文件,你可以轻松地将其读回Python中。

传递额外的关键字参数

由于JSONFormatter利用了json.dumps(),你还可以在.format_transcript(transcript)中传递关键字参数,例如通过传递indent=2关键字参数使你的文件输出更美观。

json_formatted = JSONFormatter().format_transcript(transcript, indent=2)

自定义格式化器示例

你可以实现自己的格式化器类。只需继承Formatter基类,并确保实现format_transcript(self, transcript, **kwargs)format_transcripts(self, transcripts, **kwargs)方法,这些方法在调用你的格式化器实例时应最终返回一个字符串。

class MyCustomFormatter(Formatter): def format_transcript(self, transcript, **kwargs): # 在这里进行你的自定义工作,但返回一个字符串。 return '你处理后的输出数据作为字符串。' def format_transcripts(self, transcripts, **kwargs): # 在这里进行你的自定义工作以格式化字幕列表,但返回一个字符串。 return '你处理后的输出数据作为字符串。'

命令行界面

使用视频ID作为参数执行CLI脚本,结果将打印到命令行:

youtube_transcript_api <第一个视频ID> <第二个视频ID> ...  

CLI还为你提供了指定首选语言列表的选项:

youtube_transcript_api <第一个视频ID> <第二个视频ID> ... --languages de en  

你还可以指定是否要排除自动生成或手动创建的字幕:

youtube_transcript_api <第一个视频ID> <第二个视频ID> ... --languages de en --exclude-generated
youtube_transcript_api <第一个视频ID> <第二个视频ID> ... --languages de en --exclude-manually-created

如果你更喜欢将结果写入文件或通过管道传输到另一个应用程序,你也可以使用以下命令将结果以json格式输出:

youtube_transcript_api <第一个视频ID> <第二个视频ID> ... --languages de en --format json > transcripts.json

使用CLI翻译字幕也是可能的:

youtube_transcript_api <第一个视频ID> <第二个视频ID> ... --languages en --translate de

如果你不确定某个视频有哪些可用语言,你可以调用以下命令列出所有可用字幕:

youtube_transcript_api --list-transcripts <第一个视频ID>

如果视频的ID以连字符开头,你需要使用\来掩饰连字符,以防止CLI将其误认为是参数名。例如,要获取ID为-abc123的视频的字幕,请运行:

youtube_transcript_api "\-abc123"

代理

你可以指定一个https代理,该代理将在向YouTube发送请求时使用:

from youtube_transcript_api import YouTubeTranscriptApi YouTubeTranscriptApi.get_transcript(video_id, proxies={"https": "https://user:pass@domain:port"})

由于proxies字典被传递给requests.get(...)调用,它遵循requests库使用的格式

使用CLI:

youtube_transcript_api <第一个视频ID> <第二个视频ID> --https-proxy https://user:pass@domain:port

Cookies

有些视频有年龄限制,所以没有某种认证,该模块将无法访问这些视频。要做到这一点,你需要在浏览器中访问所需的视频。然后,你需要将该页面的cookies下载到一个文本文件中。你可以使用Chrome扩展cookies.txt或Firefox扩展cookies.txt

一旦你有了这个,你就可以使用该模块来访问有年龄限制的视频的字幕,如下所示。

from youtube_transcript_api import YouTubeTranscriptApi YouTubeTranscriptApi.get_transcript(video_id, cookies='/path/to/your/cookies.txt') YouTubeTranscriptApi.get_transcripts([video_id], cookies='/path/to/your/cookies.txt')

使用命令行界面:

youtube_transcript_api <第一个视频ID> <第二个视频ID> --cookies /path/to/your/cookies.txt

警告

此代码使用了YouTube API的未公开部分,这部分由YouTube网页客户端调用。因此,如果他们改变了运作方式,无法保证它明天还能正常工作。但如果发生这种情况,我会尽最大努力尽快使其恢复正常。所以如果它停止工作,请告诉我!

捐赠

如果这个项目通过减少你的开发时间让你感到高兴,你可以通过请我喝杯咖啡来让我高兴,或者成为这个项目的赞助者 :)

捐赠

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免��费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多