关于 video-translate
video-translate 指导创作者将原始视频片段配音为另一种语言,并保留原画面和片段中的声音风格。它使用 ElevenLabs 克隆声音;不做口型同步,之后可交由 /video-edit 继续剪辑。
主要功能
- 01使用 ElevenLabs 生成目标语言配音
- 02从原始片段克隆声音
- 03可先剪掉未采用片段
- 04保留原画面,不做口型同步
- 05将译制片段交给 /video-edit
适用场景
- 01将一段视频转换为另一种语言
- 02先裁掉重录和静音以减少配音用量
- 03为译制片段重新制作字幕和剪辑
- 04检查配音中的人名、术语和表达
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ melvynx/ video-agent-skills --skill video-translate安装后在 Claude Code 中输入/video-translate确认已加载。
详细介绍
视频翻译
输入一段录制片段,输出同一段片段的另一种语言版本,并保留创作者本人的声音(ElevenLabs 会根据片段本身克隆声音)。画面保持原样:不做口型同步。然后,/video-edit 会像处理其他片段一样编辑翻译后的片段,并添加新语言的字幕。
用他们的语言与他们交流。<slug>:录制片段的 slug;<lang>:目标语言代码(en、es、fr、de、pt、it、ja……);<from>:源语言代码。
1. ElevenLabs 密钥(仅需设置一次)
密钥保存在 video-agent/.env 中,绝不能出现在聊天消息、脚本或提交中:
grep -c ELEVENLABS_API_KEY video-agent/.env 2>/dev/null
如果 0 或文件不存在:
- 让他们在 elevenlabs.io/app/settings/api-keys 创建密钥(需要 ElevenLabs 账户;配音会使用其套餐额度,免费套餐会添加水印)。
- 让他们自行将密钥粘贴到
video-agent/.env,单独占一行:ELEVENLABS_API_KEY=sk_...。可以主动创建空文件并打开它。绝不要让他们在聊天中粘贴密钥;如果他们还是这么做了,就将密钥写入文件,并告诉他们可以重新生成密钥。 video-agent/.env必须列在项目的.gitignore中(如果没有,就添加一行video-agent/.env)。
下面的每条命令都会通过 set -a; . video-agent/.env; set +a 加载密钥,且不会打印密钥。
2. 要翻译什么
翻译录制片段,而不是成片:成片已经烧录了旧语言的字幕。之后,video-edit 会根据新配音剪辑、添加字幕并调整所有时间点。
- 已剪辑的录制片段(存在
video-agent/edits/<slug>/edit.json):只发送保留的部分,这样就不会为静音、口吃或重录的部分付费。用 video-edit 的时间范围制作不带字幕的剪辑(从video-agent/studio/运行):
源文件是SEL=$(node -e 'const e=require("./public/<slug>.edit.json");console.log(e.ranges.map(r=>`between(t,${r.fromMs/1000},${r.toMs/1000})`).join("+"))') ffmpeg -y -i public/<slug>.mp4 -vf "select='$SEL',setpts=N/FRAME_RATE/TB" -af "aselect='$SEL',asetpts=N/SR/TB" -c:v libx264 -crf 18 -c:a aac -b:a 192k ../.tmp/<slug>-cut.mp4video-agent/.tmp/<slug>-cut.mp4。 - 原始录制片段:出于同样的原因,建议先运行
/video-edit,直到生成剪辑列表(步骤 1 到 4)。如果赶时间:直接发送原始片段。
3. 先估算,再发送
ffprobe -v error -show_entries format=duration -of csv=p=0 "<source>"
显示一行并等待对方确认:Dub <slug> fr → en · 0:52 of video · billed on your ElevenLabs credits for about 1 minute (check your plan's dubbing price on elevenlabs.io/pricing) · no lip-sync。
然后发送(上传速度约为每分钟视频耗时 10 秒):
mkdir -p video-agent/.tmp
set -a; . video-agent/.env; set +a
curl -sS --fail-with-body -X POST https://api.elevenlabs.io/v1/dubbing \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-F "file=@<source>" -F "target_lang=<lang>" -F "source_lang=<from or auto>" \
-F "num_speakers=1" -F "watermark=false" -F "name=<slug>-<lang>" \
> video-agent/.tmp/<slug>-<lang>.job.json
cat video-agent/.tmp/<slug>-<lang>.job.json
返回 {"dubbing_id": "...", "expected_duration_sec": ...}。保留这个 ID:如果中途停止,用它再次轮询不收费。401 表示密钥错误;402 或 "quota" 表示套餐额度已用完;如果因 watermark 被拒绝:去掉该字段后重新发送。
4. 等待,然后下载
每隔 15 秒轮询一次,直到 status 为 dubbed(若为 failed:显示错误并停止)。较短的片段通常需要 1 到 5 分钟;在后台运行:
set -a; . video-agent/.env; set +a
curl -sS --fail-with-body -H "xi-api-key: $ELEVENLABS_API_KEY" https://api.elevenlabs.io/v1/dubbing/<dubbing_id>
然后获取配音后的文件:
set -a; . video-agent/.env; set +a
curl -sS --fail-with-body -H "xi-api-key: $ELEVENLABS_API_KEY" -o video-agent/.tmp/<slug>-<lang>.dub https://api.elevenlabs.io/v1/dubbing/<dubbing_id>/audio/<lang>
ffprobe -v error -show_entries stream=codec_type -of csv=p=0 video-agent/.tmp/<slug>-<lang>.dub
- 文件有
video流:它已经是配音后的视频,将它移到video-agent/takes/<slug>-<lang>.mp4。 - 只有音频:将它重新铺到原始画面上:
ffmpeg -y -i "<source>" -i video-agent/.tmp/<slug>-<lang>.dub -map 0:v -map 1:a -c:v copy -c:a aac -b:a 192k -shortest video-agent/takes/<slug>-<lang>.mp4
检查文件:时长应与源文件相同(误差不超过一秒)。然后请他们在编辑前先听前 10 秒(检查声音、口音和错词)。
5. 编辑翻译后的录制片段
运行 /video-edit <slug>-<lang>,并告诉它:
- 语言已更改:在
video-agent/studio/whisper-config.mjs中,将WHISPER_LANG设为<lang>,用于本次转录(英语:WHISPER_MODEL = "medium.en"效果最佳;其他语言:"medium"),完成后再恢复原值。钩子卡片、提示框和post.md均使用<lang>撰写。 - 与原版采用相同的剪辑(如果存在原版):使用相同的钩子卡片和提示框(翻译后),并将它们放在新转录文本中对应的词语上。
<lang>语言的引导行动(CTA):请他们提供一次翻译,或翻译 voice.md 中的引导行动并展示给他们。
所有文件都命名为 <slug>-<lang>,让两个版本并排放置。然后在对应语言的账户上运行 /video-publish <slug>-<lang>。
最后删除 video-agent/.tmp/<slug>-*,但如果他们可能还想重新下载配音文件,则保留任务文件。
坦诚说明限制
- 不支持口型同步:嘴唇会按原语言发音移动。如果画面中动作较多、脸部较小或镜头切换较快,问题不大;长时间的面部特写中会很明显。
- 声音克隆取决于录音质量:录音嘈杂,或人声下方有音乐,都会降低克隆效果。
- 机器翻译:人名、术语和笑话可能会翻译错。发布前,请让对方(或母语人士)检查配音录音的转录文本。
- 配音按分钟消耗 ElevenLabs 点数,价格取决于其套餐。最省钱的做法是先剪短录音。