如何使用 Node.js 转录 YouTube 视频并生成字幕

realtime news  Jun 26, 2024 01:02  UTC 17:02

1 Min Read

在 AssemblyAI 最近的一篇教程中,开发者可以学习如何使用 Node.js 转录 YouTube 视频并生成 SRT 字幕。本指南不仅涵盖了转录过程,还演示了如何创建字幕并利用 LeMUR 框架使用大语言模型 (LLM) 进行视频提示。

步骤 1:设置开发环境

首先,开发者需要安装 Node.js 18 或更高版本。在设置项目目录并初始化一个新的 Node.js 项目后,package.json 文件应配置为使用 ES Module 语法。

接下来,安装必要的 NPM 模块:

  • assemblyai:安装 AssemblyAI JavaScript SDK,以便与 AssemblyAI API 交互。
  • youtube-dl-exec:yt-dlp CLI 工具的包装器,用于检索和下载 YouTube 视频信息。
  • tsx:允许在无需额外设置的情况下执行 TypeScript 代码。

此外,还需要安装 Python 3.7 或更高版本以支持 youtube-dl-exec。还需要一个 AssemblyAI API 密钥,可以将其配置为机器上的环境变量。

步骤 2:检索 YouTube 视频的音频

要转录视频,需要公共音轨 URL。YouTube 将音频和视频分开存储,youtube-dl-exec 模块可以检索此信息。以下脚本从 YouTube 视频中检索音频 URL:

import { youtubeDl } from "youtube-dl-exec";

const youtubeVideoUrl = "https://www.youtube.com/watch?v=wtolixa9XTg";

console.log("从 YouTube 视频检索音频 URL");
const videoInfo = await youtubeDl(youtubeVideoUrl, {
  dumpSingleJson: true,
  preferFreeFormats: true,
  addHeader: ["referer:youtube.com", "user-agent:googlebot"],
});

const audioUrl = videoInfo.formats.reverse().find(
  (format) => format.resolution === "audio only" && format.ext === "m4a",
)?.url;

if (!audioUrl) {
  throw new Error("未找到仅音频格式");
}
console.log("音频 URL 成功检索");
console.log("音频 URL:", audioUrl);

有了音频 URL,就可以使用 AssemblyAI 转录音频。

步骤 3:保存转录文本和字幕

一旦转录完成,就可以将转录文本保存到文件中。以下代码可保存转录文本并生成 SRT 字幕:

import { writeFile } from "fs/promises"

console.log("将转录文本保存到文件中");
await writeFile("./transcript.txt", transcript.text!);
console.log("转录文本保存到文件 transcript.txt 中");

console.log("检索转录文本为 SRT 字幕");
const subtitles = await aaiClient.transcripts.subtitles(transcript.id, "srt");
await writeFile("./subtitles.srt", subtitles);
console.log("字幕保存到文件 subtitles.srt 中");

要生成 WebVTT 字幕,只需将 "srt" 替换为 "vtt" 并保存文件扩展名为 .vtt。

步骤 4:运行脚本

要执行脚本,使用以下命令:

npx tsx index.ts

转录文本和字幕将被保存到磁盘上,处理时间取决于 YouTube 视频的长度。

奖励:使用 LeMUR 提示 YouTube 视频

AssemblyAI 的 LeMUR 框架允许开发者构建生成性 AI 功能。通过为 LLM 编写提示,开发者可以基于转录文本生成响应。例如,使用项目符号总结视频的提示可以实现如下:

console.log("提示 LeMUR 总结视频");

const prompt = "使用项目符号总结这个视频";
const lemurResponse = await aaiClient.lemur.task({
  transcript_ids: [transcript.id],
  prompt,
  final_model: "default"
});
console.log(prompt + ": " + lemurResponse.response);

有关更多自定义选项,请参阅 LeMUR 文档中列出的各种支持模型。

下一步

在本教程中,开发者学习了如何从 YouTube 视频中检索音频、转录音频、生成字幕以及使用 LeMUR 总结视频。欲了解更多功能,请查看 AssemblyAI 的 音频智能模型LeMUR



Read More