video-translate について
video-translate は、元の映像を保ったまま、撮影テイクを別の言語で吹き替える手順を案内するスキルです。ElevenLabs で声をクローンし、リップシンクは行わず、吹き替え後は /video-edit で編集できます。
主な機能
- 01ElevenLabs による目標言語の吹き替え
- 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を入力して読み込まれたか確認します。
詳細
動画の翻訳
テイクを1つ入れると、同じテイクが別の言語で出力されます。音声はクリエイター本人の声です(ElevenLabsがテイク自体から声をクローンします)。映像は元のままで、リップシンクは行いません。その後、/video-edit でほかのテイクと同じように翻訳済みテイクを編集し、新しい言語の字幕を付けます。
本人の言語で話しかけてください。<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. 翻訳するもの
完成した動画ではなく、テイクを翻訳します。完成した動画には元の言語の字幕が焼き込まれているためです。その後、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>"
1行で提示し、承諾を待ちます:Dub <slug> fr → en · 動画の長さ 0:52 · 1分程度の料金がElevenLabsのクレジットから請求されます(プランの吹き替え料金は elevenlabs.io/pricing で確認してください)· リップシンクなし。
その後、送信します(アップロード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. 翻訳済みテイクを編集
/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>-* を削除します。ただし、吹き替えを再ダウンロードする可能性がある場合はジョブファイルを残します。
正直な制限事項
- リップシンクには対応していません。唇は元の言語のまま動きます。動きが多い映像、顔が小さく映る映像、カットが素早い映像なら問題ありませんが、長いクローズアップでは目立ちます。
- 音声クローンは元の音声から作られます。音声にノイズがある場合や、声の下に音楽が流れている場合は、クローンの品質が低下します。
- 機械翻訳では、名前、専門用語、ジョークが誤訳されることがあります。公開前に、吹き替え版の文字起こしを本人(またはネイティブスピーカー)に確認してもらってください。
- 吹き替えでは1分ごとにElevenLabsのクレジットが消費され、料金はプランによって異なります。最も手軽に費用を抑える方法は、先に映像をトリミングすることです。