先说结论:想让角色"唱"起来,声音和画面必须分开做。
【为什么别让 TTS 直接唱】
TTS 的旋律是现编的——同一句词唱两遍,旋律都不一样,也不保证落在调内。所以修音救不回来,因为它根本没有音准这个概念。
【流程】
① 原曲拆轨(Demucs)
python -m demucs --two-stems=vocals -n htdemucs --out stems 原曲.wav
得到 vocals.wav 和 no_vocals.wav。这一步不能省,伴奏要原样保留。
② 换声(Seed-VC,只换音色不改旋律)
--diffusion-steps 30 --inference-cfg-rate 0.75 --f0-condition True --auto-f0-adjust True
三个参数是重点:
· 参考音 3–10 秒。短了不像,长了会跑。我实测 9.76 秒的中文参考音,相似度到 0.94。
· cfg 0.75 是平衡点:0.70 咬字清楚但音色偏,0.90 音色像但字全糊。
· f0-condition 必须开,否则它会自己改旋律。
换声前相似度 0.67,换声后 0.94——这个差值才是真变了。
③ 画面:updream 只负责"镜头"
updream 强在分镜和角色一致性,但它没有视频合成节点,心态要摆正:它是素材工厂,不是剪辑台。
提示词结构:[角色]+[服装细节]+[动作]+[环境]+[光线]+[镜头]+[风格]
例:蓝色长发少女,白色荷叶边围裙,站在雪夜的旧戏台上,手里提着一盏昏黄的纸灯,抬头看向飘落的雪,暖色侧逆光,浅景深,中景,国风动画电影质感
三个实测有效的技巧:
· 角色写死在素材库里,每次提示词加一句"沿用素材库中的 XX 角色",一致性明显好。
· 一个镜头只写一件事。写"她在雪中回头"比写"回头、跑开、哭"成功率高得多。
· 先出图再出视频,图便宜,用来试风格。
镜头怎么切:主歌 3–4 个镜头(每个 8–10 秒),副歌 2–3 个(每个 4–5 秒),间奏 1 个空镜。总共 8–10 条素材,剪出来 2–3 分钟。
④ 合成与母带(ffmpeg)
loudnorm=I=-14:TP=-1.0:LRA=11
-14 LUFS / -1.0 dBTP 是 B 站和 YouTube 的通用目标。不做归一化,平台会自己压,动态全没了。
【踩过的坑】
1. TTS 唱歌必然跑调,别试图修音,换工具。
2. 变调会带来金属感。分段生成各段调性不同就要变调,±2 个半音以上能听出来。能一次生成完就别分段。
3. 长音频生成会跑偏。170 秒一次生成,模型开始重复漂移;切 4 段各 40 秒再拼,稳得多。
4. Whisper 打分有坑:condition_on_previous_text 默认开着,遇到混响重的人声会自己复读提示词,看着像"识别不出歌词"。关掉再测。
5. Demucs 拆得再干净也有残留,现场版尤其明显。录音室版优先。
6. 平台会给 AI 内容打标,投稿时主动勾"含 AI 生成内容"。
【参数速查】
拆轨 htdemucs --two-stems=vocals
换声 30 步 / cfg 0.75 / 参考音 3–10 秒
母带 -14 LUFS / -1.0 dBTP
下一支片子我就用这套流程跑:updream 出 8 个镜头,本地换声,ffmpeg 卡点。参数有问题评论区聊,都能复现。