mcpField
V
video-translate

video-translate

github.com/melvynx创意与媒体6446 次安装1 周前更新
代码仓库

关于 video-translate

video-translate 指导创作者将原始视频片段配音为另一种语言,并保留原画面和片段中的声音风格。它使用 ElevenLabs 克隆声音;不做口型同步,之后可交由 /video-edit 继续剪辑。

主要功能

  1. 01使用 ElevenLabs 生成目标语言配音
  2. 02从原始片段克隆声音
  3. 03可先剪掉未采用片段
  4. 04保留原画面,不做口型同步
  5. 05将译制片段交给 /video-edit

适用场景

  1. 01将一段视频转换为另一种语言
  2. 02先裁掉重录和静音以减少配音用量
  3. 03为译制片段重新制作字幕和剪辑
  4. 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 或文件不存在:

  1. 让他们在 elevenlabs.io/app/settings/api-keys 创建密钥(需要 ElevenLabs 账户;配音会使用其套餐额度,免费套餐会添加水印)。
  2. 让他们自行将密钥粘贴到 video-agent/.env,单独占一行:ELEVENLABS_API_KEY=sk_...。可以主动创建空文件并打开它。绝不要让他们在聊天中粘贴密钥;如果他们还是这么做了,就将密钥写入文件,并告诉他们可以重新生成密钥。
  3. 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.mp4
    
    源文件是 video-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 点数,价格取决于其套餐。最省钱的做法是先剪短录音。

评论

支持 Markdown