如何快速获取 YouTube 视频字幕并转成可编辑文本
[!info] 阅读导览
三种路径任选:① 官方转录功能(零成本、无需第三方工具)→ ② 开源库 & API(Python / Java,适合批量)→ ③ 自建 FastAPI 服务(DownSub 封装,适合内部集成),文末附常见问题与注意事项。
1. 快速获取 YouTube 字幕的三种路径
本教程提供 官方方法、免费在线工具、以及开发者 API 三种路径,帮助你在几分钟内把 YouTube 视频的字幕导出为纯文本、SRT、VTT 等格式,适用于学习、研究、内容创作等场景。
flowchart LR
A[目标视频] --> B[官方转录<br>右键复制]
A --> C[开源库<br>Python / Java]
A --> D[自建服务<br>FastAPI DownSub]
B --> E[可编辑文本<br>TXT / SRT / VTT]
C --> E
D --> E
1.1. 使用 YouTube 官方转录功能
适用于 已开启字幕 的公开视频,零成本、无需第三方工具。
- 打开目标视频页面。
- 点击右上角的 “···”(更多)→ “打开字幕” → “打开转录”。
- 在弹出的转录面板中,右键 → 全选 → 复制。
- 将复制的内容粘贴到任意文本编辑器(如 Notepad、Word)。
- 如需去除时间戳,可使用以下 Python 正则脚本(可选):
import re
text = """粘贴的转录内容"""
# 删除时间戳(格式如 00:01:23,456 --> 00:01:25,789)
clean = re.sub(r'\d{2}:\d{2}:\d{2}[.,]\d{3}\s*-->\s*\d{2}:\d{2}:\d{2}[.,]\d{3}\n?', '', text)
print(clean.strip())
提示:如果视频没有字幕或仅有自动生成的英文字幕,官方转录仍可使用,但准确率可能受限。
1.2. 开发者专用:开源库 & API
若需要 批量处理、自定义集成,推荐使用以下开源库或自行搭建 API 服务。
1.2.1. Python youtube-transcript-api
- 安装
pip install youtube-transcript-api
- 基本用法
from youtube_transcript_api import YouTubeTranscriptApi
# 只需要视频 ID(URL 中 v= 后面的字符)
video_id = "dQw4w9WgXcQ"
# 获取字幕(返回列表,每项包含 text、start、duration)
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['en', 'zh-CN'])
# 保存为纯文本
with open("transcript.txt", "w", encoding="utf-8") as f:
for entry in transcript:
f.write(entry['text'] + "\n")
- 获取 SRT
from youtube_transcript_api.formatters import SRTFormatter
formatter = SRTFormatter()
srt_formatted = formatter.format_transcript(transcript)
with open("transcript.srt", "w", encoding="utf-8") as f:
f.write(srt_formatted)
- 支持多语言、自动翻译(需自行调用翻译 API)。
1.2.2. Java youtube-transcript-api
官方推荐库为 Thoroldvix/youtube-transcript-api(MIT 协议),Maven Central 可直接引用。
- Maven 依赖
<dependency>
<groupId>io.github.thoroldvix</groupId>
<artifactId>youtube-transcript-api</artifactId>
<version>0.4.0</version>
</dependency>
- 示例代码
import io.github.thoroldvix.api.TranscriptApiFactory;
import io.github.thoroldvix.api.TranscriptContent;
import io.github.thoroldvix.api.YoutubeTranscriptApi;
import java.io.PrintWriter;
public class YouTubeSubtitleDemo {
public static void main(String[] args) throws Exception {
String videoId = "dQw4w9WgXcQ";
// 创建 API 实例并获取英文字幕
YoutubeTranscriptApi api = TranscriptApiFactory.createDefault();
TranscriptContent content = api.getTranscript(videoId, "en");
// 逐条写出文本
try (PrintWriter out = new PrintWriter("transcript.txt", "UTF-8")) {
content.getFragments().forEach(f -> out.println(f.getText()));
}
}
}
- SRT 格式化:库内置
TranscriptFormatters.srtFormatter(),可将内容直接输出为 SRT 字幕。
1.2.3. 自建 FastAPI DownSub 服务
将 DownSub 功能封装为 REST 接口,适合内部系统调用。
核心代码(简化示例)
# app.py
import httpx
from fastapi import FastAPI, Query
from typing import List
app = FastAPI()
DOWN_SUB_API = "https://downsub.com/api"
@app.get("/transcript")
async def get_transcript(url: str = Query(...), fmt: str = Query("txt")):
async with httpx.AsyncClient() as client:
resp = await client.get(DOWN_SUB_API, params={"url": url})
data = resp.json()
# data 中包含不同语言的下载链接
# 这里直接返回第一个可用的 txt 链接内容
txt_url = next((l["link"] for l in data["subtitles"] if l["format"] == fmt), None)
if not txt_url:
return {"error": "未找到对应格式的字幕"}
txt_resp = await client.get(txt_url)
return {"content": txt_resp.text}
- 启动:
uvicorn app:app --reload - 调用示例:
GET http://localhost:8000/transcript?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ&fmt=txt
1.3. 常见问题与注意事项
| 问题 | 解决方案 |
|---|---|
| 视频没有字幕 | 只能使用自动语音识别(如 Google Speech-to-Text、Whisper)自行转录,或尝试 Maestra AI 的自动生成功能。 |
| 字幕质量差(错别字、漏词) | 下载后使用 SubtitleBee、Transkriptor 在线编辑,或自行在文本编辑器中手动校对。 |
| 需要多语言翻译 | 在 SubtitleBee、Maestra AI 中直接选择目标语言;或先下载原文后使用 Google Translate API、DeepL 进行二次翻译。 |
| 批量下载受限 | 使用 Python youtube-transcript-api 循环调用,或自行部署 FastAPI DownSub,避免频繁访问公共网页导致 IP 被封。 |
| 版权合规 | 仅对公开、已获授权或自行拥有版权的视频进行下载与使用,避免侵犯他人权益。 |
| 网络安全 | 选用官方或口碑良好的在线工具,避免在不可信站点输入个人信息。 |
[!success] 核心要点
- 零成本首选:YouTube 官方"打开转录"→ 右键复制,几秒导出
- 批量首选:Python
youtube-transcript-api,一行命令安装、无需 API Key- Java 集成:使用
io.github.thoroldvix:youtube-transcript-api(Maven Central),注意包名为io.github.thoroldvix.api- 内部调用:可自建 FastAPI 服务封装 DownSub 接口
- 注意:仅处理已获授权或公开的视频,避免 IP 被封与版权风险