create-ai-avatar について
create-ai-avatarは、本人の映像や写真から、クローン音声で話すアバターを作るNode・bashスキルです。顔、音声、リップシンクを分けて扱い、口元の切り抜きでエンジンを比較します。
主な機能
- 01HeyGenのデジタルツインをトレーニング
- 02写真アバターとトーキングフォトの作成
- 03ElevenLabsで音声を生成
- 04リップシンクエンジンのレンダリングと比較
- 05口元の並列比較シートを作成
活用シーン
- 01新しい台詞を話すプレゼンターの作成
- 02アバター映像と元映像の比較
- 03人物に合うリップシンクエンジンの選定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mengto/ skills --skill create-ai-avatarインストール後、Claude Code で/create-ai-avatarを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamldemo/index.htmlPROMPT.mdreferences/footage.mdheygen.mdjudging.mdscripts/balance.mjsconsent.mjshear.mjskeys.mjsmouths.shprep-footage.shrender.mjstrain.mjsupload.mjsvoice.mjs詳細
AI アバターを作成する
HeyGen API・ElevenLabs・ffmpeg。 スクリプトはプレーンな Node 20 と bash で動作し、インストールが必要なパッケージはありません。
あなたのアバターは、最適なソースから得た3つの要素でできています。顔と動きは、あなた自身の映像(HeyGen のデジタルツイン)から得られます。声は ElevenLabs で作成したあなた自身のクローンで、音声ファイルにします。1つのエンジンで、この2つをリップシンクさせます。できあがった映像は、似ているかどうかが最初に崩れる部分、つまり口元をクローズアップし、あなた自身の口元と並べて評価します。
使い分け。 顔が映らない映像を作る場合は html-explainer-video を、実際にスマートフォンで撮影した映像をつないでリールを作る場合は html-reel を使います。画面に映る人物があなた自身で、録音していない言葉を話す必要があるときは、このスキルを使います。
来歴。 2026年11月に、あるクリエイター自身のツインを使って作成しました。YouTube 動画1本(2分48秒)のアイコンタクトを保った映像からトレーニングし、v4 の ElevenLabs クローンで声を付けています。同じ8.8秒のセリフを3つのエンジンすべてで生成し、クリエイターは口元を見て選びました。デモでは、1枚のポートレートから HeyGen のフォトアバターとして作成した4人のプレゼンターを紹介しているため、実際の映像は使われていません。
仕組み
顔、声、リップシンクを分け、それぞれ一度に1つだけ変更します。 ツインのトレーニングは一度だけです。声は、ほかで使う前に再生して確認できるファイルです。レンダリング結果は、ツインと音声ファイルを1つのエンジンで組み合わせたものです。問題がある場合は、どの部分を変更すべきか判断できます。比較するすべてのエンジンで、同じセリフと同じ音声を使います。セリフを変えると、エンジンの違いが分かりにくくなります。
HeyGen は ElevenLabs の音声を ID で指定して使うことはできません。 ElevenLabs でセリフを作成し(scripts/voice.mjs)、script と voice_id の代わりに audio_asset_id または audio_url として HeyGen に音声を送信します。動画の長さは音声に合わせて変わり、最長30分です。
口元を基準に評価します。 全体表示では、どのエンジンも問題なく見えます。各レンダリング結果と実際の映像から、6つのタイミングで鼻からあごまでの範囲を切り抜き、並べて表示します(scripts/mouths.sh)。それから、唇がどれほど大きく引き伸ばされるか、歯がどれだけ見えるか、唇の色、口角を確認します。
アバターを作る3つの方法
| デジタルツイン | フォトアバター | トーキングフォト | |
|---|---|---|---|
| 素材 | 15秒〜10分の映像。最適な長さは約2分 | 写真1枚 | 写真1枚 |
| 初期費用 | トレーニングに約2.13ドル、同意手続きは別途 | 約1.32ドル | 無料 |
| エンジン | Avatar V、IV、III | Avatar V、IV、III | Avatar IV のみ |
| 動き | あなた自身の動きや癖を反映 | エンジンが想像した動き | エンジンが想像した動き |
| 用途 | あなた本人に見える必要があるもの全般 | Avatar V で、ポートレートからプレゼンターを作成 | 短いセリフ |
3つの方法すべてで、あなたの音声を使用できます。まずは Avatar V から始めます。HeyGen の最新エンジンで、ここではデフォルトです。口元を基準に評価し、知っている人物の動きを大げさに表現しすぎる場合は、IV または III に切り替えます。Fil の Create AI avatar ワークフローはフォトアバターです。写真と音声を HeyGen Avatar V に組み合わせます。
ワークフロー
- 映像素材を選びます(references/footage.md)。最もよく話せているテイクを使います。静かな部屋で、あなた一人がカメラに向かい、顔が全編を通して映っている、1080pの映像です。自然な話し方で2〜3分ほど録画します。カメラ目線のテイクが最適です。それぞれ一度だけダウンロードし、
bash scripts/prep-footage.sh footage.mp4 take-*.mp4で結合します。 - アップロードします。
node scripts/upload.mjs footage.mp4を実行すると、最大200 MBまで直接アップロードされ、アセットIDがファイルの横に保存されます。 - トレーニングします。 まず料金($2.13)とウォレットを伝えます。その後、
node scripts/train.mjs --footage <asset_id> --name "Ada · March takes"を実行します。トレーニングは数分で完了します。新しいキャラクターには同意リンクが発行されます。映像に映っている本人が24時間以内にリンクを開き、短い声明を録画します。見た目のステータスがcompletedになり、同意がacceptedになると、デジタルツインをレンダリングできるようになります。同じ人物の新しい映像を追加する場合は、--groupを渡します。 - セリフを作成します。
node scripts/voice.mjs "<one line, about 25 words>" line.mp3 --voice <your clone>を実行します。再生して確認し、node scripts/hear.mjs line.mp3で発話内容を確認します。 - モーションプロンプトを指定せずに、Avatar Vでセリフをレンダリングします。
node scripts/render.mjs --look <look_id> --audio line.mp3。比較するには、同じセリフを--engine avatar_ivとavatar_iiiでもレンダリングします。各レンダリングでは、最初に料金、その後にウォレット残高が表示されます。映像の代わりにポートレートを使う場合は、POST /v3/avatars{ type: 'photo' }でフォトアバターを作成し(references/heygen.md)、同じ方法でその見た目をレンダリングします。 - 評価します。
bash scripts/mouths.sh mouths.jpg footage.mp4 twin-avatar_v.mp4 twin-avatar_iv.mp4 twin-avatar_iii.mp4を実行し、レンダリング結果を音声とともに並べて比較します。どれが最適かを伝える前に、必ず本人に見てもらいます。本人の顔だからです(references/judging.md)。 - 実際のセリフには本人が選んだものを使い、IDとともに記録します。見た目、グループ、音声、エンジンを記録してください。
ルール
各ルールには、防止する失敗が記載されています。
- レンダリング前に、どの顔とどの音声が対応しているか確認します。 以前、2つのフォトアバターのIDを取り違えたため、4つのレンダリングでそれぞれ別人の顔と音声が組み合わされました。各ファイルには人物名を付け、レンダリングの前に毎回、見た目の
nameを確認します。 - レンダリングごとに、新しいIdempotency-Keyが必要です。 あるレンダリングを最初のレンダリングのキーで再送したところ、HeyGenは最初の動画を返しました。
render.mjsは被写体と音声をもとにキーを生成します。 - 口の動きが大げさな場合は、プロンプトではなくエンジンを変更します。 Avatar Vでは唇が大きく広がり、上下の歯列が両方見えていました。
motion_promptとmore_blinkingを指定してもほとんど変わらず、Avatar IVとIIIで改善しました。 expressivenessは、Avatar IVのフォトアバターでのみ使えます。 Avatar Vでは拒否され、デジタルツインにも適用されません。- 演技をつけた読み方より、落ち着いた読み方のほうが効果的です。
[excited]と[laughs]を付けたstability-0の読み方は、デフォルトよりも制作者本人らしくありませんでした。まず落ち着いた読み方から始め、顔の仕上がりを確認してから音声を変更します。 - デジタルツインの鮮明さは、映像素材以上にはなりません。 720pに縮小したテイクから作成した見た目は1280×720でした。1080pの映像からトレーニングしてください。
- 有料の呼び出しをする前に、必ず料金とウォレット残高を確認します。 ウォレットはアカウント単位のため、同じキーを使うほかの処理でも残高が消費されます。以前、デジタルツイン1件とレンダリング1件の費用を合わせた金額より、$1.76多く残高が減ったことがあります。
- 同意はグループと特定の人物に紐づきます。 他人の映像をグループに追加してはいけません。また、同意していない人をトレーニングしてはいけません。HeyGenは写真について同意を確認しないため、本人の同意を得るのはあなたの責任です。
- ソースをダウンロードするのは一度だけにし、その後はローカルファイルを使います。 署名付きリンクに対してffmpegを繰り返し実行してはいけません。
- トレーニングでは音声のクローンも作成されます。 HeyGenは映像素材から
default_voice_idを独立したリソースとして作成します。ElevenLabsのクローンがない場合にのみ使用してください。デジタルツインを削除しても、この音声は削除されません。 - 手の見た目が不自然になることがあります。 Avatar IVはジェスチャーをしますが、あるレンダリングでは親指がゴムのように見えました。テイクを使う前に、フレーム全体を一度確認してください。
片方の人物、同じセリフで各エンジンを比較
| エンジン | 1秒あたり | 口元 | そのほかすべて |
|---|---|---|---|
| Avatar V | $0.12 | 唇が引き伸ばされ、上下の歯が見え、唇の色が濃い | 肌が滑らかになり、最も多く作り変えられます |
| Avatar IV | $0.0805 | 小さく丸く、ときどき上の歯が見えます | 手振りが加わります。制作者が自分の顔に選んだものです |
| Avatar III | $0.01 | 最も自然に近く、口の開きが小さく、唇の色も自然です | 実際の頭の動きを反映します。最も古いため、同期は耳で確認してください |
1人の顔を1回のセッションで比較したものです。ご自身でも判断してください。そのためにステップ6があります。
数値
- 映像素材:15~600秒(約2分が最適)、長辺640~4096 px、mp4またはwebm、人物は1人、直接アップロードは最大200 MBです。
- トレーニング:約$2.13、2分48秒の素材で約4分です。写真アバターは約$1.32で、約10秒で準備できます。
- 同意リンク:有効期間は24時間です。
- 1つのセリフ:約25語、8~10秒。すべてのエンジンで同じ音声を使用します。
- 8.8秒のレンダリング1回:Avatar Vは$1.05、IVは$0.71、IIIは$0.09です。各2~3分かかります。
- 音声:mp3またはwav。アセットは最大32 MB、動画1本あたり最大30分です。
- 口元シート:1行に6つの瞬間。1920 px幅のフレームから420 × 300の範囲を切り出し、顔に合わせて移動します。
ファイル
references/footage.md:撮影素材の選び方、結合方法、確認方法references/heygen.md:スクリプトが実行するHeyGenの各呼び出しと、その応答references/judging.md:口元シート、確認するポイント、本人への見せ方scripts/keys.mjs:環境変数または.env.localからのキーの取得とHeyGenクライアントscripts/prep-footage.sh、upload.mjs、train.mjs、consent.mjs、voice.mjs、hear.mjs、render.mjs、mouths.sh、balance.mjsdemo/index.html:1枚のポートレートからAvatar Vで作成した4人のプレゼンター、3つすべてのエンジンで作成した1人のプレゼンター、口元シート
キー:HEYGEN_API_KEY、ELEVENLABS_API_KEY、ELEVENLABS_VOICE_ID(ご自身のクローン用)。環境変数または.env.localから取得します。キーが表示されることはありません。