mcpField
S
short-translate

short-translate

github.com/melvynxクリエイティブ・メディア64364 回インストール1 週間前に更新
リポジトリ

short-translate について

Short Translateは、動画のテイクを本人のクローン音声で別の言語に吹き替えるクリエイター向けスキルです。元の映像を口の動きの同期なしで維持し、short-editingで字幕付けと編集を行います。

主な機能

  1. 01テイクを別の言語に吹き替え
  2. 02テイクから音声をクローン
  3. 03元の映像を維持
  4. 04編集済み・未編集のテイクに対応
  5. 05翻訳字幕と編集を準備

活用シーン

  1. 01短いテイクの多言語版を作成
  2. 02テイクを先にカットして課金時間を短縮
  3. 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 またはファイルがない場合:

  1. elevenlabs.io/app/settings/api-keys でキーを作成してもらいます(ElevenLabs アカウントが必要です。吹き替えにはプランのクレジットを使用し、無料プランではウォーターマークが付きます)。
  2. video-agent/.env に、1行で ELEVENLABS_API_KEY=sk_... と入力してもらいます。空のファイルを作成して開くことを提案してください。チャットにキーを貼り付けるよう求めてはいけません。貼り付けてしまった場合は、ファイルに書き込み、キーを再生成できることを伝えてください。
  3. 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 のクレジットが必要です。最も手軽に費用を抑えるには、まずテイクをトリミングします。

コメント