中文视频转英文配音
把中文口播视频转成英文配音成片:克隆原说话人的音色,面向海外买家重写文案,输出单个 MP4。
一条命令
cd "<项目根>"
$env:MINIMAX_API_KEY = "<MiniMax 国内站 Key>"
$env:VOLC_API_KEY = "<火山 API Key>"
.\.venv\Scripts\python.exe scripts\dub.py --src "<视频路径>" --slug "<短名>"
产物:
| 位置 | 内容 |
|---|---|
out/<短名>_EN_dubbed.mp4 | 成片(唯一交付) |
out/<短名>_EN.srt / _ZH.srt | 中英字幕 |
work/batch/<短名>/REPORT.md | 耗时、合成轮次、成本 |
常用参数:--until translate(只出文案,不合成)、--from fit(从某阶段开始)、--force(忽略已存状态)。
六个阶段
1 prep 提取音频 + demucs 人声分离 + 记录视频时长
2 asr 火山词级识别 → 中文分句时间轴
3 translate DeepSeek → 英文文稿(受众切换 + 词数预算 + 数字写单词)
4 fit 跑 N 轮合成 → 各自实测 → 按"最多能填到多少"评分取最优
5 place 按时间轴铺设 + 句界插停顿 + 写字幕(真实词级时间戳)
6 mux 配背景音乐 + 响度归一 → MP4
失败后重跑同一条命令即可,已完成阶段自动跳过(含"产物必须比输入新"校验)。
前置条件
| 项 | 说明 |
|---|---|
| 音色 | work/voice.json,跑一次 clone_voice.py 生成即可,所有视频共用,不需重复克隆 |
| 火山 Key | 录音文件识别(volc.seedasr.auc) |
| MiniMax Key | 国内站 api.minimaxi.com,需实名 + 余额(否则 2038 / 1008) |
| DeepSeek Key | 官方 api.deepseek.com |
| 依赖 | demucs torch numpy requests openai soundfile |
| 音乐 | 一个放 .wav 的目录,见 config.py 的 BGM_DIR |
所有服务直连,dub.py 会强制清掉代理变量。
必读:18 条实测经验
完整清单在 docs/LESSONS.md。最容易踩且代价最高的几条:
- 受众要切换,不只是翻译 —— 很多素材原本是对国内出口商说的("做外贸的朋友们"),英文必须直接对海外买家说话。规则在
translate.py的SYSTEM_FILL里。 - 数字在翻译阶段就写成英文单词 ——
20,000算 1 个词却读成 2 个词,会让所有长度计算偏掉;留着阿拉伯数字还可能被逐位读。 - atempo 已禁用 —— 不要为了铺满而让人说得更快,要把文案压短。
- 句界拼接必须加淡入淡出 —— 切点在非零波形处会产生咔哒声。
- 验收音频瑕疵不能只看全文件最大跳变 —— 会被源文件的更大跳变掩盖,要看跳变分布。
- 断点续跑必须校验产物比输入新 —— 否则会静默交付旧稿配音。
详细机制与踩坑过程见 docs/USAGE.md(原《使用说明》)与 docs/REPORT.md(实施报告)。
已知限制
- 中文信息密度高于英文,极少数素材需要在保留卖点的前提下删句(工具会自动做,报告里会记录)。
- 铺满度一般 93–100%,末尾由背景音乐补足。
Eva之外念不对的专有名词,加进synth_single.py的TTS_RESPELL字典(只影响 TTS 输入,字幕不变)。
建议工作流
新素材先用一条跑完整流程给客户确认(音色/语速/音乐/停顿),确认后再批量。批量时逐条会写明成本。