使用nodejs完成TTS有声书的制作
本文旨在介绍使用 Node.js、Moegoe、puppeteer 和 ffmpeg 集成批量生成有声书视频的方法,以绫地宁宁为例进行操作。以下为经过改写的文章:
使用 Node.js、Moegoe、Puppeteer 和 ffmpeg 批量生成有声书视频的方法
当前网络媒体中,基于TTS技术的亚文化二次创作形式多样,例如电棍活字印刷、绫地宁宁朗诵等。此类作品通常需要作者手动编辑、输入文本并将之剪辑成视频,效率一般不高。本文主要以绫地宁宁朗诵为例,解释如何通过使用 Node.js 进行自动化操作,高效地制作有声书视频。
使用工具:
1. Node.js:这是一个能够运行在服务器端的 JavaScript 执行环境,允许 JavaScript 作为服务端语言使用。Node.js 提供大量内置模块,用于操作文件、进程和网络等对象,与 CMD 或 PowerShell 相似。
2. Moegoe:这是一款基于 VITS 的 AI 声音合成引擎,专注于 TTS(Text to Sound,文字转语音)功能。Moegoe 集成了多种预处理的音色模型,用户可以通过加载这些模型文件来使用指定音色进行朗诵。最常用的其中一个是绫地宁宁(綾地 寁子)的音色,广泛在 Bilibili 上被二次创作使用。
操作思路:
1. 文本加工:首先,人工手动将《茶花女》的原始文本转换为适合进一步处理的格式。这包括使用正则表达式对文本进行分段、去除不必要的注释分隔符、制表符等。
2. 利用 Node.js 注释信息:使用 JS 中的 String 对象方法,对原文文本中的每个句子进行标签化,包括句子的章节、文档行号与段落号等信息。结果被记录为 JSON 对象数组。
3. 视频与音频制作:
视觉部分:利用 puppeteer,预先建立一个包含文本预置和位置信息的网页记忆卡。该卡允许点取超链接、保存图象及截图,随后由无头浏览器内置功能生成静态图片。
音频部分:将音频通过 Moegoe 输出,直接利用 Node.js 中的 child_process 模块操作 Python 包含的 Moegoe 进程,生成指定音色的朗读片段。重点关注编码问题:通过 iconvlite 库解决 Windows 命令行界面默认的 GB2312 编码与 Python 脚本的兼容性问题。
结合输出:使用 ffmpeg 对渲染的图片与合成的音频进行合并,生成最终视频文件。视频文件通过拼接相应片段并添加片头与片尾构成完整有声书。
面临的挑战与解决方案:
Moegoe 操作封装:重写命令行界面以实现 Node.js API 化操作。理解 Moegoe 命令行结构,重写与之匹配的脚本逻辑。
编码兼容性:引入 iconvlite 库解决字符编码不匹配导致的乱码问题。
批量生成管理:通过分段处理原文信息,集成图片生成、音频生成与视频生成脚本。合理处理异步操作,优化 promise 链的执行流程。
源代码
虽然提供的源代码链接无法访问,但实际的程序结构通常应遵循以下类思路设计:
1. 文本处理脚本:负责文本的读取、分段和标记化。
2. 图片与音频生成:使用 puppeteer 和 Moegoe 分别创建准备好的图片和声音文件。
3. 整合视频:使用 ffmpeg 将图片和音频合并成视频文件。
此外,确保在实际编程中考虑到异步操作的管理,尤其是通过 await、async 关键字与 promise 链的正确使用与优化。这确保整个流程的平滑进行,避免因未处理的异步链导致的流程冻结。
确保将这些阶段分块完成编码工作,并在每个步骤都进行严格的测试,以保证整体方案的稳定性和高效性。
<strong>源代码</strong><br><br>虽然提供的源代码链接无法访问,但实际的程序结构通常应遵循以下类思路设计:
1. 文本处理脚本:负责文本的读取、分段和标记化。
2. 图片与音频生成:使用 puppeteer 和 Moegoe 分别创建准备好的图片和声音文件。