← 返回文章列表

手机也能跑 AI 语音克隆:脚本、模型,和我踩过的六个坑

手机上的终端工具 + 17 个自写脚本 + 一个在线语音合成模型:一段 8 秒样本,任意文字都能用我的音色读出来。附工具清单、命令、名词小抄与踩坑。

想要一段"自己念的"音频,又实在不想对着麦克风念半小时。做完发现这套东西的构成其实很朴素:手机上的一个终端工具 + 一套自己写的 Python 脚本 + 一个在线的语音合成模型。给它一段 8~20 秒的人声,之后任意文字都能用这个音色读出来。

先把三个词说白,后面就不再解释了:

  • 语音合成(TTS):把文字读成语音的技术。手机导航、有声书用的都是它
  • 音色克隆:不只是"读出来",而是照着某个人的嗓音来读——只给一小段录音就能学个大概(学的是音色,不是说话的语气性格)
  • 样本 / 参考音频:喂给模型"听"的那一小段本人录音,8~20 秒、干净、无背景音乐最好
雨窗前的留声机与一杯热茶
雨天的窗边:老留声机与一杯热茶——把声音留下来的意象

先说清楚用了什么

环节 用的东西 这玩意是干嘛的
运行环境 手机上的终端工具 + Python 3.12 终端工具 ≈ 手机里的命令行窗口;Python 是写脚本的语言
音频处理 ffmpeg 开源的音视频处理工具,切音频、转格式、拼时间轴都靠它
音色克隆模型 **** 在线模型:把"你的样本 + 要读的文字"合成成语音
官方音色 / 唱歌 **** 同一系列,自带 9 套现成音色,还支持唱歌模式
凭空造音色 **** 你写一段描述(年龄、口音、气质),它生成一个全新音色
Python 依赖 、(必需);、(可选) 负责发网络请求;/ 做音频的数值计算

这些模型都通过"OpenAI 兼容接口"调用——意思是请求格式跟主流服务写的一样,哪天想换别家的模型,改一下地址和模型名就行,脚本不用重写。

脚本分工(一共 9 支,各管一段)

  • —— 主力:文字 → 你的音色
  • —— 长文有声化:整篇文章 → 一条完整音频,逐句生成、逐句存盘
  • —— 给视频重新配音:把新录的语音贴回画面
  • —— 从一段长录音里自动剪出候选样本(不用自己找 8 秒)
  • —— 给样本打分:信噪比、停顿、削波、基频(后面小抄里有解释)
  • —— A/B 试听:同一句话用两个样本各合成一遍,比着听
  • —— 相似度对比:合成结果跟真人录音比,"像不像"变成数字
  • —— 兼容层:手机上装不了某些计算库时,自动换一套办法顶上
  • —— 路径总管:所有文件夹位置统一从它推导,整个包没有写死的路径,拷到哪都能跑

三步跑起来

六个最常用动作

① 一段文字 → 我的声音

② 整篇文章 → 一条完整音频(长文有声化)

朗读稿就是"一行一句"的纯文本, 开头的是小节标题。

③ 给视频重新配音

  • :每句贴回原来的时间点,句子太长会自动加速一点(上限 1.35 倍)
  • :一句接一句顺读、句间停 0.35 秒,画面基本不动时用这个最自然
  • "时间轴"是一个记录"哪句话在第几秒到第几秒"的结构化文件

④ 从素材里抽样本并择优

⑤ 不克隆也能用官方预置音色

语气还能用行内标签写进文本:、、、。

⑥ 用一句话造一个全新音色

描述里写清年龄、性别、口音、音质、发声方式;别写混响、EQ 这类后期词。

挂着雨珠的柳枝与水面涟漪
柳枝上的雨珠落进水里,像泛开的声音

真踩过的六个坑

  1. 两段内容放反了就没声音:接口用"谁在说话"来区分——要朗读的正文要放在 assistant(助手)位置,语气要求放在 user(用户)位置,放反了合成出来是静音
  2. 样本每次都要重新发一遍:它是随请求一起上传的(编码成一段文本格式传输),单次不能超过 10MB
  3. 样本质量比调参数重要:8~20 秒干净人声就决定了上限;先给样本打分选出最好的那段,比反复改参数有用
  4. 手机上有些计算库装不上:脚本里有兼容层会自动换一套算法顶上,效果一样——所以"手机算力不够"在这类任务上不成立(重活是在线模型干的,手机只负责切音频、拼时间轴、发请求)
  5. 请求太密会被限流:服务端会返回一个"过载"错误码,脚本会自动等一会儿重试;重跑同一条命令能把失败的句子补齐
  6. 长文必须分段:逐句生成、逐句保存,哪句不满意删掉重跑那一句,不用整篇推倒重来

效果如实说

  • 能用的:念稿、旁白、文章有声化、教学音频、视频重新配音;语速和语气能给指令,长文能整篇跑完,手机上也能出成品
  • 差在哪:跟真人说话的语气细节、情绪起伏还有明显差距;唱歌模式只有官方内置音色支持,克隆出来的音色唱不了
  • 定位:一个省时间的配音嗓子,不是真人替代品

名词小抄(读不懂就翻这里)

词 一句话解释
终端工具 手机里的命令行窗口,敲命令让它干活
Python / 脚本 一种编程语言;"脚本"就是写好的一小段程序,跑一次干一件事
ffmpeg 开源音视频处理工具,剪、转、拼都靠它
模型 / 在线模型 部署在远端服务器上的 AI 程序,通过接口调用,不用在自己手机里跑
接口(API) 程序之间约定好的"怎么问、怎么答",脚本靠它跟模型通话
OpenAI 兼容接口 一种被广泛沿用的请求格式,换服务商时脚本不用改
样本 / 参考音频 给模型听的一小段录音,决定合成出来像谁
编码成文本传输 音频是二进制文件,接口只收文本,所以要先"翻译"成一段字符再发
assistant / user 位置 接口用这个区分"谁在说话":朗读内容归助手位、语气要求归用户位
信噪比 / 削波 / 基频 样本的三个体检指标:人声比噪声清楚多少、有没有录爆、声音的基础音高
重采样 把音频换成另一种采样率,方便拼接与加处理
时间轴 记录"每句话在第几秒开始、第几秒结束"的文件
A/B 试听 同一句话用两个样本各合成一遍,比着听哪个更像

边界(这条最重要)

只能克隆你本人、或者已经取得明确授权的声音。不拿别人的声音去做冒充,也不做用途不明的合成。技术本身是中性的,用在哪一边,是使用它的人自己选的。


🛠 本文由自建 Agent 调度内容流水线自动完成:写稿 → 模型 API 生图 → R2 图床 → 排版 → MCP 落站。
配图由模型 API 生成、托管在自建对象存储上;内容仅供参考。