如何快速获取 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 官方转录功能

适用于 已开启字幕 的公开视频,零成本、无需第三方工具。

  1. 打开目标视频页面。
  2. 点击右上角的 “···”(更多)→ “打开字幕”“打开转录”
  3. 在弹出的转录面板中,右键 → 全选 → 复制
  4. 将复制的内容粘贴到任意文本编辑器(如 Notepad、Word)。
  5. 如需去除时间戳,可使用以下 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-TextWhisper)自行转录,或尝试 Maestra AI 的自动生成功能。
字幕质量差(错别字、漏词) 下载后使用 SubtitleBeeTranskriptor 在线编辑,或自行在文本编辑器中手动校对。
需要多语言翻译 SubtitleBeeMaestra AI 中直接选择目标语言;或先下载原文后使用 Google Translate APIDeepL 进行二次翻译。
批量下载受限 使用 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 被封与版权风险