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を入力して読み込まれたか確認します。
詳細
ショート翻訳
1つのテイクを入力すると、クリエイター本人の声で同じテイクが別の言語で出力されます(ElevenLabsがテイク自体から声を複製します)。映像は元のままです。リップシンクは行いません。その後、/short-editing で他のテイクと同じように翻訳済みテイクを編集し、新しい言語の字幕を付けます。
相手の言語で話しかけてください。<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に、1行で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>"
次の1行を表示し、はいという返事を待ちます。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。
その後、送信します(アップロード1分あたり約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を保持してください。処理が止まった場合、同じIDでもう一度ポーリングしても料金はかかりません。401 はキーが間違っていることを示します。402 または「quota」は、プランのクレジットが残っていないことを意味します。「watermark」で拒否された場合は、そのフィールドを付けずに再送信します。
4. 待機してからダウンロード
status が dubbed になるまで15秒ごとにポーリングします(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>-* を削除します。
正直な制約
- リップシンクはありません。唇は元の言語のまま動きます。動きが多い場合、顔が小さい場合、またはカットが速い場合は問題ありませんが、長いクローズアップでは目立ちます。
- 音声クローンはテイクをもとに作成されます。テイクにノイズがある場合や、音声の下に音楽がある場合は、クローンの品質が低下します。
- 機械翻訳では、名前、専門用語、ジョークが誤って翻訳されることがあります。投稿する前に、ダブしたテイクの文字起こしを本人(またはネイティブスピーカー)に確認してもらってください。
- ダブには、プランに応じた料金で、1分ごとに ElevenLabs のクレジットが必要です。最も手軽に費用を抑えるには、まずテイクをトリミングします。