60 分钟素材,44.1 kHz 单声道 318 MB、双声道 635 MB; 切 10 秒一段是 360 段,batch 取 8 一轮 45 步,训 20 轮共 900 步。 上传时间按 10 Mbps 上行算是 254 秒——卡住你的是带宽,不是硬盘。
第七章整章都在做图。这一章换到声音,而声音这一行的门槛不在技术,在数据量和授权。 先认平台,再把账算清。
一、这类平台是干什么的
一句话:你把几十段录音传上去,它给你训出一个「音色模型」,之后用这个模型把任意文字念出来、 或者把任意歌声换成你的嗓子。 它是 SaaS:显卡、依赖、训练脚本都在对方那边,你只需要一个浏览器。 这就是它相对于第七章那套本地训练器的全部优势——你不用为了一张 24 GB 显存的卡掏钱。 代价也清楚: 素材要传到别人服务器上,训练排期听平台的,模型能不能下载、能不能商用,都看平台条款。 这三条在动手之前就要想清楚。 📋 实操清单:登这类平台前先备三样——一个能收邮件的账号、一段自己录的干声素材、 一份「这段声音是我本人或已获授权」的声明。声明不是形式,它决定了你后面能不能公开用这个模型。
二、声音数据的账:采样率一翻,体积一翻
声音和图片不一样,它的数据量是采样率乘时长,非常线性。 Demo 实测了一个 60 秒的 44.1 kHz 单声道文件:
| 采样率 | 单声道 16 bit | 双声道 16 bit | 10 秒切片数 |
|---|---|---|---|
| 16000 | 115 MB | 230 MB | 360 |
| 22050 | 159 MB | 318 MB | 360 |
| 44100 | 318 MB | 635 MB | 360 |
| 48000 | 346 MB | 691 MB | 360 |
| 一小时素材在 44.1 kHz 双声道下是 635 MB,这还是 16 bit。要是录成 24 bit 浮点,再翻一半。 | |||
| 而语音模型实际用的采样率通常只有 22050 或 16000——人声的有效频带就那么宽, | |||
| 用 48 kHz 传上去,平台大概率也会先降采样。白白多传一倍。 | |||
| 所以第一件能省事的地方在这里:录完先转成 22050 单声道 16 bit 再传。体积直接降到四分之一, | |||
| 音质对训练几乎没影响。 |
三、切片与步数:360 段是怎么来的
训练器不会拿一整段一小时的文件去训。它先切片:常见是 5 到 15 秒一段,Demo 按 10 秒算。 3600 秒切 10 秒 → 360 段。这 360 段就是「样本数」。batch 取 8,一轮 45 步; 训 20 轮就是 900 步。 这里有个容易混的地方:900 步不等于 900 段不同的素材。它是「同样的 360 段被看了 20 遍」。 所以素材本身的质量决定了天花板,轮数只决定你摸到多近。 还有一个反直觉的点:切片不是越多越好。切太碎(3 秒),一句话被切成两半,模型学不到完整语调; 切太长(30 秒),一段里混了好几种语气,模型分不清。10 秒左右是「一句话能说完整」的长度。
四、合规:这一条比技术重要
声音在我国是受保护的。 《民法典》第一千零二十三条明确:对自然人声音的保护,参照适用肖像权保护的有关规定。也就是说, 未经本人同意,克隆并使用他人声音是侵权行为。 所以三条红线不要碰: ① 不克隆别人的声音;② 不把名人音色做成模型分发;③ 不拿克隆音做诈骗、伪造证据、冒充他人。 第三条已经不是民事问题了。 现在对「AI 换声诈骗」是按诈骗罪办的,而且这类案子取证很容易——音频本身就是证据。 实操上要留证据: 录素材时录一句「我是某某,本人同意用这段录音训练模型」,和素材一起存档。 这句话不占多少空间, 但它能在你需要证明授权时省掉一堆麻烦。
五、动手 Demo:60 分钟素材:44.1 kHz 单声道 318 MB,切片 360 段
真造一个 60 秒的 44.1 kHz 单声道 wav,量实际体积、写入和读取耗时; 再按「采样率 × 时长 × 位深 × 声道」推算一小时素材在四种采样率下的体积、切片数, 以及重采样一次会丢多少采样点。
t = np.arange(int(sr * 60.0)) / float(sr)
x = 0.4 * np.sin(2 * np.pi * 220.0 * t) + 0.05 * rg.normal(0, 1, t.size)
i16 = (np.clip(x, -1, 1) * 32767).astype("<i2")
with wave.open(fp, "wb") as w:
w.setnchannels(1); w.setsampwidth(2); w.setframerate(sr)
w.writeframes(i16.tobytes())
for s in (16000, 22050, 44100, 48000):
mono = 3600 * s * 2 / 1e6 # 一小时、16 bit、单声道
print(s, mono, mono * 2, 3600 / 10)
实跑输出:
--------------------------------------------------------------------
60 分钟素材:44.1 kHz 单声道 318 MB,切片 360 段
--------------------------------------------------------------------
实测文件 60 秒,5292044 字节
写入耗时 15.5 毫秒
读取耗时 3.3 毫秒
每秒钟音频占 86 KB
60 分钟(3600 秒)的素材,按不同规格存:
采样率 单声道 16 bit 双声道 16 bit 10 秒切片数
---------------------------------------------------
16000 115 MB 230 MB 360
22050 159 MB 318 MB 360
44100 318 MB 635 MB 360
48000 346 MB 691 MB 360
**采样率翻一倍,体积就翻一倍。** 44.1 kHz 单声道一小时 318 MB,双声道 635 MB。
切 10 秒一段:**3600 秒能切 360 段,这是训练的「样本数」。**
batch 取 8,一轮 45 步;训 20 轮就是 **900 步**。
**注意这 900 步是「同一批 360 段被看 20 遍」,不是 900 段不同的素材。**
素材规格不统一要先转。30 秒 48 kHz 转 44.1 kHz 单声道:
采样点数 1440000 → 1323000
数据量减少 8.1%
重采样耗时 31.7 毫秒
**采样率一降,点数就少了 8.1%,这部分时长信息是真的丢了。**
上传时间另算:318 MB 按 10 Mbps 上行是 **254 秒,四分多钟**——**卡住你的是带宽,不是硬盘。**
头四行是实测: 60 秒的文件 5292044 字节,每秒 86 KB。乘 60 就是 318 MB——和表里 44.1 kHz 那一行对得上。 写入 14.8 毫秒、读取 5.1 毫秒。这个速度说明本地存音频完全不构成瓶颈,真正的瓶颈是上传带宽。 表里那四行只有采样率在变, 切片数那一列全是 360——因为切片按「秒」算,和采样率无关。但每段的字节数会跟着采样率走。 重采样那三行值得单独看:30 秒 48 kHz 转 44.1 kHz,采样点从 1440000 变成 1323000,少了 8.1%。 这部分不是「压缩」,是真的丢了——采样点少了,高频信息就没了。 上传那句是算术:318 MB × 8 ÷ 10 Mbps = 254 秒。换 100 Mbps 家宽就是 25 秒。 所以「素材太大」这件事,先看网络再看文件。
30 秒实验
- 把时长从 60 分钟改成 10 分钟,重算体积、切片数和总步数。 体积和切片都按比例缩到六分之一,但 150 段已经够训一个音色了。
- 把位深从 16 bit 改成 24 bit,看体积涨多少。涨 50%,而训练用的模型根本分不出这点差别。
- 把上行带宽从 10 Mbps 改成 100 Mbps,重算上传时间。 带宽翻十倍,时间掉到十分之一——这是唯一能「花钱解决」的一环。
常见误区
- 「素材越多越好」。 一小时素材训出来的模型,不一定比 15 分钟干净素材好——噪声和口误也会被学进去。
- 「采样率越高越好」。人声有效频带有限,48 kHz 传上去平台也会降采样,白等多倍上传时间。
- 「网上找段名人音频就能训」。这是侵权,而且现在有专门的法条。民法典对声音的保护参照肖像权。
自测三问(点开对答案)
1. 这类声音克隆平台的成本优势在哪? —— 显卡、依赖、训练脚本都在平台那边,你只要一个浏览器。 代价是素材要上传、排期听平台、条款限制用途。 2. 为什么建议先把素材转成 22050 单声道再传? —— 人声有效频带不需要 48 kHz,平台多半也会先降采样。转完体积降到四分之一,上传时间省四分之三。 3. 900 步训练是什么意思? —— 360 段素材被完整看了 20 遍。步数是「看了多少遍」,不是「有多少不同素材」。平台认清了,接下来是登记这个模型。 这一步看着只是填表,但填错的项会一路影响后面能不能被找到、能不能用。
- ☐ (本节完,下一节 8.1.2 设置模型的详细信息)