@danielxceron/youtube-transcript

中文文档
2.0.0发布于 2026/10/24MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 1.5万

从YouTube视频中获取记录

中文使用文档
文档目录13 节
  1. 关于这个叉子
  2. 怎么样
  3. 从1.x升级
  4. 安装
  5. 使用量
  6. 可重用客户端
  7. 批量获取
  8. 选项
  9. 支持的 URL 格式
  10. 处理错误
  11. 发展
  12. 环境相容性
  13. 许可证

自动调试

npm version CI license

关于这个叉子

这是原始的Youtube-transcript包的叉子,有弹性取出管. 它首先尝试了YouTube的"内通"API,并在需要时倒回HTML刮取,因此一个被屏蔽的单一路由不会断断记录稿检索.

怎么样

  • 内立方块先: Android 和 iOS 客户端的签名字幕 URL, 自动旋转
  • HTML 刮回倒计时 当内tube返回无标题时
  • 可重新使用的客户端 有超时、重试、货币限额和缓存
  • 批量获取 包含每集视频结果
  • 有力解析器 srv1、 srv3 和 json3 标题格式
  • 完成 HTML 实体解码 包括数字和双编码实体

见 变动情况 为完整的历史.

从1.x升级

2.0.0版本改变可观察到的行为. 静态 fetchTranscript API持续工作,但这些点可能需要调整:

  1. 首选手动字幕 超过自动的,如果没有 lang 给出。 没有旗帜可以恢复旧的ASR优先.
  2. segment.lang 是所选音轨的语言 (单位:千美元)de-DE)而不是所要求的一个(de) (中文(简体) ). 与需要的前缀比较 :
    const wanted = (segment) => segment.lang?.toLowerCase().startsWith('de');
    
  3. 无害环境管理切入点重新命名 从 dist/youtube-transcript.esm.js 改为 dist/youtube-transcript.mjs通过软件包名称导入或更新直接的 CDN 路径.
  4. 启用缓存和重试 (单位:千美元)5 min, (中文(简体) ), 2 retries, (中文(简体) ), 20 s 暂停). 要模仿 1.x 耐久和新鲜度:
    const youtube = YoutubeTranscript.create({ cache: false, retries: 0 });
    
  5. 新建错误类别数字 : YoutubeTranscriptNetworkError 财务报告和审定财务报表 YoutubeTranscriptAbortError 现在地面运输失败.

安装

$ npm i @danielxceron/youtube-transcript

使用量

import { YoutubeTranscript } from '@danielxceron/youtube-transcript';

const transcript = await YoutubeTranscript.fetchTranscript('videoId or URL');
console.log(transcript);

每段都有形状 { text, duration, offset, lang }时 duration 财务报告和审定财务报表 offset 几秒钟内.

可重用客户端

对于服务器和长期运行的进程,创建一个客户端并共享:

import { YoutubeTranscript } from '@danielxceron/youtube-transcript';

const youtube = YoutubeTranscript.create({
  timeoutMs: 15000,
  retries: 2,
  concurrency: 8,
  cache: { ttlMs: 300000, maxEntries: 500 },
});

const transcript = await youtube.fetchTranscript('videoId', { lang: 'en' });

批量获取

const results = await youtube.fetchTranscripts(['videoIdA', 'videoIdB', 'videoIdC']);

for (const { videoId, transcript, error } of results) {
  if (error) console.error(videoId, error.message);
  else console.log(videoId, transcript.length);
}

复制的标识符只获取一次 .

选项

选项默认说明
fetch全局获取自定义获取执行( 代理、 未编辑、 测试)
timeoutMs20000按 HTTP 请求超时
retries2对网络错误进行检索, 429 财务报告和审定财务报表 5xx
concurrency6每个客户的最大飞行请求
cache启用false 禁用,或 { ttlMs, maxEntries }
clientsAndroid=iOS (英语)自定义内tube客户端
apiKey公钥内部Tube API 密钥
userAgent颜色HTML 策略使用的用户代理
htmlFallbacktrue禁用跳过 HTML 刮取

按呼选项: lang, (中文(简体) ), timeoutMs, (中文(简体) ), retries, (中文(简体) ), signal, (中文(简体) ), cookie。 。 。 .

支持的 URL 格式

  • 标准视频 : https://www.youtube.com/watch?v=VIDEO_ID
  • 短的 URL : https://youtu.be/VIDEO_ID
  • YouTube 短节目: https://www.youtube.com/shorts/VIDEO_ID
  • 现场: https://www.youtube.com/live/VIDEO_ID
  • 内嵌视频 : https://www.youtube.com/embed/VIDEO_ID
  • 直接视频标识 : VIDEO_ID

语言匹配使用区域前缀, 所以 lang: 'en' 接受 en, (中文(简体) ), en-US 财务报告和审定财务报表 en-GB。手动字幕优于自动字幕.

处理错误

  • YoutubeTranscriptTooManyRequestError: 检测到的速率限制
  • YoutubeTranscriptVideoUnavailableError: 视频无法访问
  • YoutubeTranscriptDisabledError: 已禁用录像记录
  • YoutubeTranscriptNotAvailableError: 没有可用的记录
  • YoutubeTranscriptNotAvailableLanguageError: 所请求的语言不可用
  • YoutubeTranscriptEmptyError: 每一个取出策略都未返回
  • YoutubeTranscriptNetworkError: 复试后运输失败
  • YoutubeTranscriptAbortError: 请求中止通过 signal

每个错误都会暴露 name, (中文(简体) ), videoId (在适用时)和 cause (被包裹的时候).

发展

需要20个节点或更新(.nvmrc 针头22).

$ npm ci
$ npm run check         # format:check + typecheck + tests + build
$ npm test              # unit tests, mocked network
$ npm run typecheck
$ npm run format
$ npm run build
$ npm run smoke -- dQw4w9WgXcQ

运行单个文件或监视模式 :

$ npx vitest run tests/transcript.test.ts
$ npm run test:watch

现场测试真的冲击了YouTube

$ YOUTUBE_TRANSCRIPT_LIVE=1 npx vitest run tests/live.test.ts

CI覆盖了节点20,22和24;一个预定的工作流程每周运行一个直播套房. 发布由 GitHub 动作当 a v* 标签被按下,使用 NPM_TOKEN 秘密和npm来源.

环境相容性

战略客户端本地服务器生产服务器
内部Tube API✅✅✅
HTML 拼写✅✅✅

许可证

麻省理工学院 2026年 丹尼尔·塞隆·克拉罗斯

依据 自动调试 由卡库鲁克扬所著.

版本与发布记录

@danielxceron/youtube-transcript 共发布 6 个版本,首次发布于 2025/06/15;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.0latest2026/10/2418 天前
1.2.62026/02/049 个月前
1.2.52026/02/049 个月前
1.2.42026/02/049 个月前
1.2.32025/06/151.4 年前
1.2.22025/06/151.4 年前

关于 @danielxceron/youtube-transcript 的常见问题

@danielxceron/youtube-transcript 是什么?

从YouTube视频中获取记录

如何安装 @danielxceron/youtube-transcript?

在项目目录运行 npm install @danielxceron/youtube-transcript,或使用 pnpm add / yarn add / bun add。

@danielxceron/youtube-transcript 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@danielxceron/youtube-transcript 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@danielxceron/youtube-transcript 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@danielxceron/youtube-transcript 可以商用吗?

@danielxceron/youtube-transcript 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@danielxceron/youtube-transcript 的下载量有多少?

根据 npm 官方下载统计,@danielxceron/youtube-transcript 在 2026/10/12 – 2026/11/10 这 30 天内被下载 14,668 次,日均约 489 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@danielxceron/youtube-transcript 还在维护吗?

最新版本 2.0.0 发布于 2026/10/24(18 天前);至今共发布 6 个版本,其中过去 12 个月发布了 4 个;首次发布于 2025/06/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。