零样本 TTS 落地长视频配音的工程路径:从范式选择到工程化的全流程拆解
一、从一个真实的工程问题开始
做过短剧出海或者影视译配的工程师大概都遇到过这样一个场景:拿一段十分钟的中文剧情,翻译成英文之后用一个看起来效果不错的 TTS 模型合成配音,前两分钟听起来非常自然,到第五分钟某个角色的音色开始出现轻微的漂移,到第八分钟某句台词干脆出现了重复词或者吞字。
这并不是模型在某一句上突然"变笨"了,而是当下主流的 TTS 技术路线在面对长序列、多角色、跨语种这三个变量同时叠加的时候,会暴露出底层范式上的结构性弱点。这篇文章我想从工程师的视角,把零样本 TTS 在长视频配音场景下要解决的几个关键技术问题逐个拆开,谈谈业界主流的解法、各自的取舍,以及实际落地时需要在哪些地方做工程优化。
我不会去拆解某一个具体的开源模型,因为这条赛道在过去两年的演进非常快,今天的 SOTA 明天可能就被新工作刷掉。更值得讨论的是那些不会随模型更迭而过时的工程问题——它们是任何想在这个方向落地的团队都要面对的。
二、第一个分岔路:自回归还是非自回归
按照生成范式,过去几年的大规模 TTS 系统大致可以分成两条路线,理解这两条路线的取舍是后面所有工程决策的基础。
第一条是自回归路线。这条路线把语音先离散化成 token,然后用类似语言模型的方式一个 token 一个 token 地生成,本质上是把 GPT 那一套搬到语音上。它的代表性思路最早可以追溯到 Tacotron 系列,后来在 VALL-E 这一类工作上被推到大规模零样本能力的高度。自回归路线的优点是韵律自然,因为时长是隐式建模的——模型自己决定每个音素该说多长、哪里该停顿、哪里该拖音。但它有两个显著的弱点:一是鲁棒性差,长序列下容易出现重复、漏读、幻觉这些 token 级别的错误;二是推理慢,因为每个 token 都要等前面的 token 生成完才能开始,没法并行。
这两个弱点放到长视频配音场景里都会被放大。一段十分钟的对白对应的 token 数量可能是几千上万,自回归生成的小错误会沿着时间轴持续累积,最终让某一段配音听起来"崩"了;而每段都要等自回归一帧帧生成出来,对于动辄上百集的短剧批量生产来说,吞吐量是个硬瓶颈。
第二条是非自回归路线。这条路的思路是:既然自回归慢,那就并行生成所有帧,但前提是得先知道每一帧该对应什么内容。所以传统的非自回归 TTS(比如 FastSpeech 系列)通常会引入一个显式的时长预测器,先预测每个音素该持续多少帧,然后并行生成所有帧的声学特征。这条路鲁棒性好、速度快,但显式时长预测本身会损害自然度——预测出来的时长往往是平均化的,少了真实人类说话时那种呼吸停顿和语气延展。
这两条路都不完美,所以业界一直在思考一个问题:有没有办法既不做自回归,也不做显式时长预测,还能保持自然度和鲁棒性?
这个问题的答案在过去一年逐渐成形,那就是把图像生成领域的"掩码生成"(mask-and-predict)范式迁移到 TTS 上。这条路目前已经有多个开源工作在 ICLR、ICML 这些顶会上发表,整体趋势已经清晰。下面我重点讲这套思路的核心机制和工程意义。
三、掩码生成范式:用并行预测绕开两个老大难
掩码生成的思路在 NLP 里大家都很熟悉——BERT 就是经典的 mask-and-predict。但要把它用到语音上,第一步要解决的是:连续的语音波形怎么变成可以"掩码"的 token?
这就引出了语音生成系统的一个核心组件:离散化语音表征。整个零样本 TTS 系统的搭建,往往可以拆解成这样一个工程链路:
-
第一步,用一个语音自监督学习模型(业界常见的选择有 HuBERT、WavLM、W2v-BERT 这几个)提取语音的高层语义特征。这一步得到的是连续的隐藏状态向量,包含了语音的语义信息但还不能直接做掩码生成。
-
第二步,对这些连续特征做向量量化,得到离散的"语义 token"。早期的做法是直接做 k-means 聚类,但 k-means 是硬聚类,信息损失大,对音调丰富的语言(比如中文)尤其不友好——很多声调信息会在聚类的时候被压平。后来的主流做法是训练一个 VQ-VAE,让它学习一个可重建的码本,配合 VQ-GAN 系列工作里的因子分解码(factorized code)技巧,可以显著降低量化损失。这一步是整个系统的基础,码本设计的好坏直接决定了下游生成质量的天花板。
-
第三步,并行训练一个 Transformer,学习"给定一部分 token,预测被掩码的 token"。这个 Transformer 的训练范式和 BERT 几乎一样,只不过预测目标从文字变成了语音 token。架构上常用的是带双向注意力的 Transformer 主干,配合旋转位置编码(RoPE)和门控线性单元(GLU)这些现代 LLM 的标配组件。一个值得注意的细节是,因为掩码比例在训练和推理中是动态变化的,所以通常会引入一个基于时间步的自适应归一化层,告诉模型"当前这一步处于整体迭代的哪个阶段"——这个设计直接借鉴自图像扩散模型。
-
第四步,推理时采用迭代式并行解码。给定文本和提示音频对应的语义 token 前缀,模型先把目标语音的 token 序列全部初始化为掩码,然后分多轮迭代,每一轮解码出置信度最高的一部分 token,再把剩下的低置信度 token 重新掩码,进入下一轮。通常 25 到 50 步的迭代就能完成一段语音的生成,远少于自回归方法所需的几千步。
-
第五步,把生成出来的语义 token 送给一个独立的"语义到声学"模型,转换成多层声学 token,最后用神经声码器解码成波形。这一环节通常会用残差向量量化(Residual Vector Quantization,RVQ)作为声学 codec 的基础。RVQ 的思路是用多层量化器逐层编码上一层的残差,越靠后的层编码越精细的音质信息——这种"由粗到细"的结构正好契合并行生成模型的分层解码策略。
把这套链路拼起来,一个完整的非自回归零样本 TTS 系统就成形了。它的工程优势是非常直接的:
- 第一,因为不是逐 token 自回归,长序列下的错误累积问题被显著缓解。在 hard case(绕口令、重复词等)上的鲁棒性表现明显优于自回归方案。
- 第二,因为不需要显式预测音素时长,生成出来的语音保留了更自然的韵律变化,但同时支持指定总时长——你可以告诉模型"我想要 8 秒的语音",让它在内部决定每个音节的具体分布。这一点对视频配音场景的画面对齐来说是质变级的功能。
- 第三,推理效率高。25 到 50 步的迭代解码,相比自回归方法按 token 长度展开的几千步,速度优势在批量生产场景下会被放大几十倍。
四、零样本声音克隆是怎么实现的
讲完范式之后,我们看一下零样本能力具体是怎么从这套架构里"长出来"的。
零样本 TTS 的定义是:模型在训练阶段没有见过某个特定说话人的声音,但在推理阶段只需要给一段几秒钟的提示音频,就能用这个说话人的音色和说话风格合成任意文本。这个能力听起来像魔法,但实现机制其实可以拆解清楚。
关键在于训练阶段的提示设计。在训练上面那个 Transformer 的时候,做法是从一段完整的语音 token 序列里随机切出一个前缀,把它当作"提示",让模型预测后面被掩码的部分。这个训练目标本质上让模型学会了一件事:给定一段语音的开头,根据它的音色和风格特征,连贯地生成后续语音。
到了推理阶段,"训练时的前缀"被替换成"用户提供的提示音频对应的 token","训练时要预测的后续部分"被替换成"用户输入的目标文本对应的语义 token"。模型并不知道这段提示音频对应的说话人是谁,但它可以从音色、节奏、能量分布这些声学特征里推断出说话人的特征,并把这些特征延续到后续生成的语音里。
这个机制的精妙之处在于,它不需要任何说话人标签或显式的说话人嵌入向量。说话人信息是通过提示音频"携带"进模型的,整个过程是上下文学习(in-context learning)的产物,和大语言模型从 few-shot 示例里学习任务的机制是同源的。
工程上要让这套机制稳定工作,提示音频的质量是关键变量。我自己实际跑下来的经验是:
提示音频如果有明显的背景噪声或音乐,生成结果会带上类似的噪声特征,所以提示音频必须经过严格的源分离和降噪处理。
提示音频的长度有一个最佳区间,太短(小于 3 秒)模型抓不住稳定的声纹特征,太长(超过 30 秒)反而会引入提示内部的风格抖动。我们的经验值是 8 到 15 秒。
提示音频的内容最好和目标语种、目标情绪相近。比如要生成英文台词,用一段英文提示音频比用中文提示音频效果好得多——虽然理论上跨语种克隆也能工作,但跨语种场景下声纹的稳定性会下降。
五、跨语种声纹一致性:内容出海最难的那块拼图
如果说零样本声音克隆是"让一个角色能说话",那跨语种一致性就是"让同一个角色在十种语言下听上去都像是 TA 自己"。这是短剧出海这类业务最难的工程问题。
传统的级联式翻译配音流水线在这一点上几乎没法做:每个语种用的是不同的 TTS 引擎,英文版的角色音色和日文版完全不一样,听上去就是十个不同的人在演同一部剧。这种割裂感会直接破坏观众的沉浸感。
要让一套系统输出统一的跨语种声纹,技术上需要满足几个条件:
第一,训练数据必须是多语种的,而且是同一套模型一起训。如果是先训一个英文模型再 fine-tune 到中文,声纹建模的内部表示空间会发生漂移,跨语种迁移就会出问题。这就要求训练数据集本身覆盖足够多的语种,并且每个语种都有足够大的规模。这一点上业界有一个里程碑式的开源数据集叫 Emilia,由港中大(深圳)等团队整理发布,包含超过 10 万小时的 in-the-wild 多语种语音,覆盖中、英、日、韩、法、德六种语言。Emilia-Large 的扩展版本超过 21.6 万小时。这是目前公开可用的最大规模学术级语音生成数据集,几乎所有近期的多语种 TTS 工作都在用它,包括我们自己的训练数据流水线。
第二,说话人表征必须是语言无关的。这意味着模型在编码"一个人怎么说话"的时候,提取的应该是音色、共振峰、节奏这些纯声学特征,而不是和具体语言绑定的发音习惯。上一节讲的提示式上下文学习机制天然契合这一点——因为模型从来不需要知道提示音频是哪种语言,它只是在抓声学层面的延续性特征。
第三,训练数据要包含足够的"同一个人说不同语言"的样本对。这种数据在自然界里很稀缺(很少有人在公开场景下说六种语言),所以现实中是通过大规模数据的隐式覆盖来近似这个目标的——模型见过足够多的英文男低音和足够多的日文男低音之后,自然能把"男低音"这个共性特征和具体语言解耦。
实际工程中,跨语种一致性的最终效果还需要在生成端做一些额外处理。我们的做法是为每个角色建立一个"声纹锚点"——在整部剧的不同语种版本中,都使用同一段经过精心筛选的高质量参考音频作为提示,避免不同集采样造成的声纹波动。这个看起来很朴素的工程细节,对最终一致性的提升非常显著。
六、画面对齐:被论文低估、被工程重视的问题
学术论文里很少会谈到一个问题:生成出来的配音怎么对齐画面?
但在视频配音的实际业务里,这是个绕不开的硬需求。原片里这句台词从第 12 秒说到第 14 秒 3 帧,那么配音也必须在这个时间窗口内完成。差几百毫秒,嘴型就对不上,观众一眼就能看出违和感。
掩码生成范式天然支持总时长指定,这是它相比自回归方案的一个重要优势。具体的实现方式有两种:
第一种是把"目标 token 序列长度"作为推理时的硬参数传入。因为模型是并行预测固定长度的 token 序列的,所以你可以通过控制这个长度直接控制总时长。这种方式简单直接,但需要你能从字幕时间码反推出目标 token 数量——这一步通常需要根据语种和帧率做一个换算表。
第二种是单独训练一个时长预测器,在生成主流程之前先用它预测合理的总时长。常见的做法是用基于流匹配(flow matching)的小模型,输入文本和提示音频的时长比例,输出目标语音的总时长。这种方式更自动化,但生成出来的时长不一定能精确匹配画面窗口,所以一般还是要结合硬约束使用。
我们落地时的做法是混合的:对于字幕严格对齐的场景,直接用字幕时间码反推 token 长度作为硬约束;对于解说类不需要严格对齐的场景,让时长预测器自动生成。这两种模式在同一套推理 pipeline 里通过参数切换。
七、从 SOTA 论文到生产可用,中间隔着什么
读到这里,理论上你应该已经对零样本 TTS 在长视频配音场景下的核心技术路径有一个完整的认知了。但从一个能跑通论文 demo 的开源模型,到一个能稳定支撑日均上百集短剧出海生产的系统,中间还隔着很多工程上的细节。这一节我想分享几个我们在落地过程中实际踩过的坑。
第一个坑是音频质量在生产环境下的稳定性。论文里报告的 SIM-O、WER 这些指标都是在干净的测试集上测出来的,但实际业务里输入的剧本质量参差不齐,有的句子里夹着英文人名,有的句子有奇怪的标点符号,有的句子超长。这些边界情况会显著拉低生成质量。我们的做法是在文本预处理阶段做了一个相对完整的 normalize pipeline,包括人名拼音转换、缩写展开、长句拆分、特殊符号过滤等十几个规则。这一步看起来很土,但对线上稳定性的提升是论文方法本身换不来的。
第二个坑是声学 codec 的码率与 CDN 成本的平衡。原版的 RVQ codec 通常用 12 层量化,码率偏高,对于大批量分发来说 CDN 成本不可忽视。我们做了一个码率剪枝实验:在不显著损失主观音质的前提下,把声学 token 的层数压到 6 层,文件大小直接砍半。这个剪枝过程需要做仔细的 A/B 听辨测试,不能只看客观指标——客观指标下降 0.05 的两个版本,主观听感可能差异很大,反过来也成立。
第三个坑是情绪可控性。掩码生成范式本身没有显式的情绪标签输入,情绪是隐式地从提示音频里学到的。如果你要控制"这一句要愤怒、下一句要平静",需要在前置环节做更精细的情绪分段提示。我们的做法是用一个独立的情绪分类器对源语音做分段标注,再针对每个情绪段从该角色的素材库里挑选对应风格的提示片段动态切换。这个机制让最终生成的配音在情绪表达上比固定提示音频的版本自然得多。
第四个坑是长文本的内存占用。掩码生成虽然是并行的,但并行意味着所有帧的中间表示都要同时驻留在显存里。一段十分钟的对白对应的中间表示能轻松吃掉几十 GB 显存。我们的做法是按段落切分后批处理,在段落边界做交叉淡入淡出处理,避免拼接处的不连续。这是一个非常经典的"理论可以一次生成、工程上必须分段处理"的折衷。
第五个坑是提示音频库的版权与合规。零样本声音克隆的能力如果被滥用,可能会涉及到声音权利的法律问题。我们的所有提示音频都来自有明确授权的素材库,每个角色的声纹锚点都对应一份可追溯的授权记录。这一点在做内容出海业务的时候特别重要,因为不同国家对 AI 合成声音的合规要求差异很大。
八、写在最后
零样本 TTS 这个领域在过去两年的演进非常快,从早期把大语言模型那套搬到语音上的尝试,到非自回归路线和掩码生成范式的崛起,再到跨语种统一建模的成熟,每一步都在把"让机器说人话"这件事推得更接近"让机器演角色"。
对工程师来说,这意味着两件事。
一是底层模型能力已经接近能用的水平,你不再需要为每个新场景从零开始训练一个 TTS 模型。零样本能力大幅降低了落地成本,业界开源的几个 SOTA 工作(比如 Amphion 项目下的多个开源模型)都可以作为工程化的起点。
二是底层模型已经足够好,差距主要出现在工程链路上。数据预处理、提示工程、后处理、合规、监控、成本控制,这些"不性感"的环节恰恰是把一个 demo 变成生产系统的关键。
我所在的团队正在把这条技术路径在内容出海方向上的工程经验沉淀成一份完整的技术白皮书,覆盖数据流水线、提示设计、画面对齐、合规链路等环节。这个项目的号是 AI 解说大师,定位是面向短剧出海、影视译配、有声内容跨境分发的工程化语音合成方案。如果你也在做类似方向,欢迎关注后续的技术分享。
参考资料
-
Wang, C. et al. Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers (VALL-E) . arXiv:2301.02111
-
Ren, Y. et al. FastSpeech 2: Fast and High-Quality End-to-End Text to Speech. ICLR 2021
-
Défossez, A. et al. High Fidelity Neural Audio Compression (Encodec) . arXiv:2210.13438
-
Zeghidour, N. et al. SoundStream: An End-to-End Neural Audio Codec. arXiv:2107.03312
-
Hsu, W. N. et al. HuBERT: Self-Supervised Speech Representation Learning. arXiv:2106.07447
-
He, H. et al. Emilia: An Extensive, Multilingual, and Diverse Speech Dataset for Large-Scale Speech Generation. SLT 2024. arXiv:2407.05361
-
Amphion: An Open-Source Audio, Music and Speech Generation Toolkit. github.com/open-mmlab/…