关于 short-translate
Short Translate 是面向创作者的视频配音技能,可用从原片段克隆的创作者声音制作其他语言版本。它保留原始画面但不做口型同步,再将配音片段交给 short-editing 添加字幕并剪辑。
主要功能
- 01将片段配成其他语言
- 02从片段克隆声音
- 03保留原始视频画面
- 04处理已剪辑或原始片段
- 05准备译文字幕和剪辑
适用场景
- 01制作短片段的其他语言版本
- 02先裁剪片段以减少计费时长
- 03为译制片段添加字幕并剪辑
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ melvynx/ video-agent-skills --skill short-translate安装后在 Claude Code 中输入/short-translate确认已加载。
详细介绍
短视频翻译
输入一条原始录制,输出一条相同录制的另一种语言版本,并保留创作者本人的声音(ElevenLabs 会根据录制本身克隆声音)。画面保持原样:不做口型同步。然后,/short-editing 会像处理其他录制一样编辑翻译后的录制,并添加新语言的字幕。
用对方的语言与其沟通。<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. 要翻译的内容
翻译录制内容,而不是已完成的视频:已完成的视频字幕已烧录成旧语言。之后,short-editing 会根据新语音剪辑、添加字幕并调整时间。
- 已剪辑的录制(
video-agent/edits/short-<slug>/source/spec.js存在):只发送保留的片段,避免为静音、口吃或重录内容付费。使用 short-editing 的引擎以正常速度制作纯剪辑:为这条命令在 spec 中添加speed: 1,然后
(node <skill>/engine/short.mjs rough video-agent/edits/short-<slug><skill>= short-editing 技能文件夹),之后删除speed: 1。源文件是video-agent/edits/short-<slug>/output/short-<slug>-rough.mp4。 - 原始录制:建议先运行
/short-editing,直到完成剪辑列表(步骤 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 refused,则不带该字段重新发送。
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
检查时长:与源文件相同(误差在 1 秒以内)。然后请对方在编辑前听一下前 10 秒(检查声音、口音和错词)。
5. 编辑翻译后的拍摄内容
/short-editing <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>,让两个版本并排存放。然后在对应语言的账号上运行 /publish <slug>-<lang>。
最后删除 video-agent/.tmp/<slug>-*,但如果他们之后可能还想下载配音,则保留作业文件。
诚实说明限制
- 不支持口型同步:嘴唇仍会按照原语言说话。如果画面中动作较多、脸部较小或剪辑较快,影响不大;长时间特写时会很明显。
- 语音克隆基于原始拍摄内容:原始内容有噪声或人声下有音乐,都会降低克隆效果。
- 机器翻译可能会误译姓名、术语和笑话。发布前,请让他们(或母语者)检查配音版本的转录内容。
- 配音按分钟消耗 ElevenLabs 点数,价格取决于他们的套餐。先裁剪拍摄内容是最省钱的做法。