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网页客户端调用。因此,如果他们改变了运作方式,无法保证它明天还能正常工作。但如果发生这种情况,我会尽最大努力尽快使其恢复正常。所以如果它停止工作,请告诉我!

捐赠

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

捐赠

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多