Mizuoto

项目

项目页:由一组角色逐句朗读整本书、剧本或对话,包括导入脚本、编辑台词、生成、管理版本与导出带字幕的音频。

项目 用来朗读长篇内容:一本书、一份剧本或一段多人对话。一个项目由两部分组成:

  • 脚本:若干章节,每章是一句一句的台词。每句有文本和说话的角色,可以单独加风格指令。
  • 角色表:每个角色有自己的模型、音色(音色库中的音色、预置说话人或模型自带的音色)、语言、说话方式和参数。第一个角色是旁白:没有指定角色的句子都由旁白朗读。没有选模型的角色使用项目的模型。

每一句单独生成,生成结果称为一个版本。改了某句的文本、角色或设置后,只需重新生成这一句;最后把所有句子按设定的停顿拼成一个文件,并附带字幕。不同角色可以用不同引擎的模型。

项目保存在数据文件夹的 projects/<名称>/project.json 中。

项目列表

在导航栏打开 项目。每张卡片显示项目名称、已生成句数/总句数(有失败的句子时显示为红色)、描述、N 章 · N 句、N 个角色、已生成部分的时长,以及一条按句子状态着色的进度条。点卡片打开项目。

新建项目

  1. 点 新建项目。
  2. 填写 项目名称。
  3. 选择 模型:项目的默认模型,旁白和其他没有单独选模型的角色都用它。
  4. 可选:在 脚本 中粘贴一份脚本(格式见下一节),并在 按此切分台词 中选择 每行文本 或 每个句子。
  5. 点 创建。

新项目自带一个名为 旁白 的角色。

脚本格式

导入的脚本是纯文本,规则如下(输入框下方也有提示):

写法含义
# 标题开始新的一章,标题为 # 之后的文字
名字:文本(全角或半角冒号),或 [名字]: 文本该角色的一句台词(见下方规则)
其他行旁白的台词
空行结束一个段落(导出时段落之后的停顿更长)

名字: 前缀在以下任一情况下才被当作角色名,否则整行原样作为旁白的台词:

  • 这个名字已经在角色表中;
  • 同一个名字出现在两行或更多行的开头;
  • 脚本是一段对话(已有某个名字满足上面两条之一),并且这个前缀看起来像名字:以字母或汉字开头、最多三个词,例如 Dr. Watson、林黛玉。

因此,在不是对话的脚本中,偶尔出现的“注意:明天停电”不会被当作角色;但在对话脚本中,任何看起来像名字的前缀都会成为角色。每个名字都只出现一次的对话不会被识别,这时先在 角色 中添加同名角色再导入即可。

新出现的名字自动加入角色表。它们还没有模型和音色(使用项目的模型),导入后在 角色 中为它们选择音色。

第一个 # 之前的台词放进一章:项目还没有任何章节时,这章以项目名为标题,否则不加标题。

按此切分台词:每行文本 时每行是一句;每个句子 时每行再按句子拆成多句。

示例:

# 第一章 夜行列车

列车在黑暗中穿行。车厢里只剩下两个人。

安娜:你也睡不着吗?
老人:这条路,我走了四十年了。
安娜:四十年?
老人:从它还是一条土路的时候起。

窗外,一盏灯一闪而过。

导入后得到一章、六句:“安娜”和“老人”各出现两次,成为两个新角色;其余句子归旁白;第一段、对话段和最后一句各是一个段落。

导入脚本

在项目页底部点 导入脚本(项目为空时页面中间也有这个按钮),粘贴脚本,选择切分方式和 导入方式:

导入方式作用
作为新章节把脚本中的章节追加到项目末尾
加到本章把所有台词追加到当前打开的章节,不新建章节(# 标题行会被忽略)
替换现有脚本用脚本中的章节替换全部现有章节;原有台词的版本会被删除

点 导入。

编辑脚本

项目页有三个标签页:脚本、角色、导出。顶部显示项目名称、保存状态(正在保存…、已保存、有未保存的修改)和“已生成句数/总句数 · 时长”。

所有修改在停止输入后不久自动保存,离开页面时也会保存,不需要手动保存。

章节

左侧 章节 列出所有章节,每章显示“已生成/总句数”;点章节名切换。添加章节 新建一章。右侧上方是 章节标题,旁边的菜单中有 上移、下移 和 删除本章(会同时删除这些句子的版本)。

台词

每句一行,从左到右是:

  • 状态圆点(悬停显示状态名称,见下一节);
  • 角色:选择说这句话的角色;选第一个角色(旁白)就是不指定角色;
  • 文本:在文本框中按 Ctrl+Enter 在下方插入一句;
  • 播放按钮:播放这句当前使用的版本;
  • 重新生成这一句:立即为这句生成一个新版本,即使它已经是最新的;
  • 更多操作菜单:
菜单项作用
在下方插入一句新句沿用这一句的角色
在此结束段落 / 与下一句同段设置段落结尾,影响导出时的停顿
添加风格指令显示 这一句的风格,这句用它代替角色的 说话方式
上移 / 下移调整顺序
在“合成”中试听把这一句的完整请求(模型、音色、文本、参数)载入合成页,方便调试
第 N 版(秒数)这一句的各个版本,当前使用的带有 ✓;点一个切换
删除删除这一句及其版本

本章末尾的 添加一句 在最后追加一句。生成失败的句子下方会显示失败原因。

台词状态

状态含义
已生成有版本,而且与当前的文本和设置一致
修改后未重新生成有版本,但之后改过文本、角色、角色的模型、音色或参数,或者所用的音色库音色本身改过
未生成还没有版本
失败最近一次生成失败,原因显示在句子下方
生成中正在生成
空没有文本,生成和导出时跳过

角色

角色 标签页上方的 项目 部分可以修改项目的 模型、项目名称 和 描述。下面是每个角色一张卡片:

  • 角色名称;第一个角色带有 旁白 标记;旁边显示这个角色的句数和移除按钮。移除角色后,它的台词交给旁白。
  • 模型:没选时标签显示 模型(使用项目的:…);选了之后可以点 使用项目的模型 改回。
  • 音色:音色库中的音色、预置说话人 或 模型自带音色,只列出这个模型支持的方式。选音色库音色时,选择器同样标出这个模型能否使用每个音色。
  • 语言:使用项目的语言,或模型支持的某种语言。
  • 说话方式:这个角色每句话的风格指令(模型支持指令时才显示)。
  • 参数:展开后与合成页的参数面板相同;有改动时显示 已设置 N 项。

添加角色 新建一个角色。项目本身的语言在同一标签页的 项目 中设置(语言;由各模型决定 表示交给各模型),也可以用 mizuoto project set --lang。

修改角色会让句子过期

角色的模型、音色、语言、说话方式或参数变化后,这个角色已生成的句子都会变为 修改后未重新生成。导出设置中的 每句音量统一 也属于生成设置,修改它会让所有句子过期。

生成

页面底部有两个按钮:

  • 生成本章(N):生成当前章节中所有不是 已生成 的句子(未生成、过期、失败的)。
  • 全部生成(N):对整个项目做同样的事。

生成是一个 生成项目 任务,每章一个步骤。它为每句提交一个普通的合成任务,同时保持最多 8 个在排队,这样 设置 › 语音 › 合并等待中的请求 可以把模型、音色和设置都相同、只有文本不同的句子合并为一批运行(在支持批处理的引擎上,例如 Qwen3-TTS、GPT-SoVITS、OmniVoice)。这些合成任务不会逐个弹出提示,只有整个生成任务结束时提示一次。

  • 一句失败不影响其他句子:失败的句子标为 失败 并记下原因,其余继续生成。
  • 取消生成任务会一并取消它已提交的合成任务。
  • 生成过程中仍可以编辑脚本;改过的句子会按新的内容判断是否过期。

版本

每次生成一句都会新增一个版本并立即使用它。每句最多保留 5 个版本,更早的、未在使用的版本会被删除。在台词菜单中点 第 N 版 可以换回旧版本。

版本是 FLAC 格式的结果,不显示在历史中。删除句子、章节或项目时,它们的版本一并删除。

导出

导出 标签页:

设置默认作用
句间停顿(毫秒)350同一段落内两句之间的静音
段间停顿(毫秒)800段落结尾之后的静音
章间停顿(毫秒)2000一次导出多章时,章与章之间的静音
格式WAVWAV、FLAC、MP3、OGG、M4A
采样率24000所有版本重采样到这个采样率(不同角色的模型采样率可能不同)
每句音量统一按响度按响度、按峰值 或 保持原样;在生成每句时应用

导出已生成的部分:关闭时(默认),要导出的范围内每一句都必须是 已生成,否则报错;打开后,从未生成的句子不导出,修改后未重新生成的句子使用它们现有的录音。

然后点:

  • 导出本章:只导出当前章节;文件名为“项目名 — 章节标题”。
  • 全部导出:整个项目导出为一个文件。

导出是一个 导出项目 任务。完成后文件出现在下方的 已导出的文件 中,每个文件可以播放、下载,以及下载 字幕(SRT):每句一条字幕,时间与音频对齐。导出的文件也会出现在历史中。

删除

页面底部的 删除 把项目及其全部版本移到回收站。

命令行

命令作用
mizuoto project new <名称> [-m 模型] [--voice 音色 | --preset 说话人] [-l 语言] [--script 文件] [--split line|sentence]新建项目,带一个旁白和可选的脚本
mizuoto project import <项目> <脚本> [--split …] [--replace] [--chapter 章节id]导入脚本(追加、替换或加到某章)
mizuoto project cast <项目> <角色id> [--name] [-m] [-v] [--preset] [-l] [--instruct] [-p 参数=值] [-O 选项=值] [--remove]添加、修改或移除角色;新的 id 即新角色,'' 表示清空
mizuoto project set <项目> [--name] [-m] [-l] [--line-pause] [--paragraph-pause] [--chapter-pause] [-f] [--sample-rate] [--normalize]修改项目设置
mizuoto project render <项目> [-c 章节id] [--line 句子id] [--force]生成没有最新版本的句子;--force 连已生成的也重新生成
mizuoto project export <项目> [-o 文件] [-c 章节id] [-f 格式] [--srt 字幕文件] [--allow-missing]导出;--srt 写出 .srt 或 .vtt 字幕
mizuoto project show <项目>显示角色表和每句的状态(含章节和句子的 id)
mizuoto project script <项目>把项目打印为可再次导入的脚本
mizuoto project list列出项目
mizuoto project delete <项目>移到回收站

示例:

mizuoto project new "夜行列车" -m qwen3tts/1.7b-custom-voice --preset ryan --script book.txt
mizuoto project cast 夜行列车 anna --name 安娜 --preset serena
mizuoto project render 夜行列车
mizuoto project export 夜行列车 -o book.mp3 --srt book.srt

本页目录