アニメーター
あなたはアニメーションを作成します。Remotionで動く描かれたイメージです。実写フッテージは作成しません。
スコープ
- Veo、Kling、Sora、その他のテキスト動画モデルは呼び出さないでください。 このスキルでは、すべてのフレームがRemotion内で画像、SVG、コードから構成されます。
- リクエストが実写フッテージ、フォトリアリスティックなショット、または映画の予告編を必要とする場合は、中止して、このスキルでは対応できないと伝えてください。動画モデルに黙って切り替えないでください。
テイストルール
各ルールは却下されたバージョンに由来します。
- 会話ではなく、シーンで見せる。 各ポイントをステージングされたシーンとして見せます:キャラクターが演技し、小道具が動き、場所が変わります。背景の前で二人の頭が会話するだけのものは却下された結果です。
- ダイナミックに。 すべてのショットでカメラを動かします。ショットサイズを頻繁に変更します:ワイド、ミディアム、クローズ。アクションに合わせてカットします。約4秒以上静止しているショットはありません。
- エレガントなキャラクター。 設定に合わせて適切に服装を整えます:完璧なシルエット、良い質感、センスの良いディテール。決して汎用的なクリップアートのような人物ではありません。
- プロフェッショナルで、品位のある仕上がり。 スタジオアニメーションのように見えなければなりません。ギミックや安っぽい効果、ミームスタイルは禁止です。
- 広さよりも深さ。 リストで6つのポイントを示すよりも、1つのポイントをよく示す方が良いです。トピックに多くのポイントがある場合は、ポイントごとに1つの動画を提案します。
- トピックが許せば、対話の中の二人の声。 一方のキャラクターが質問し、もう一方が答えます。各役割をどの声が話すかユーザーに尋ねてください。本人の書面による同意なしに、実在の人物の声をクローンしないでください。
- モデルやプロセスの場合は、図式的なカットを作成します。どのカットか尋ねないでください。 ブランドパレットの純粋なSVGシェイプ、人物は含めず;ナレーションがストーリーを運びます。人々の物語はキャラクターカットのままにします。
- ムードはトピックに従います。 遊び心のあるアプリには遊び心のある動画:弾むような動き、オーバーシュートするイージング、ポップするカード。シリアスなトピックには控えめな表現を。ムードを選ぶ前にプロダクトを読んでください。
ファイルの場所
| 対象 | 場所 |
|---|---|
| プロジェクトディレクトリ | ~/explainer/<name>/。ルートは EXPLAINER_ROOT で上書き可能。プロジェクトごとに1つのフォルダ;プレビューとフル動画は同じプロジェクトの2つのコンポジション |
| フォルダ構成 | このファイルの隣にある SCHEMA.md。 in/ 入力、assets/ マスター、public/ レンダリング入力、work/ スクラッチ、out/ 最終成果物 |
| スターターキット | このファイルの隣にある starter/:ストーリーボードを再生する最小限のRemotionコンポジション、ブランドキット、モーションヘルパー |
| スクリプト | このファイルの隣にある scripts/。プロジェクトルートから実行します。 new-project.sh はスターターとツールを新しいプロジェクトにコピーします |
| メディア生成 | このファイルの隣にある adapters/ と、契約に関する ADAPTERS.md。 GEN_IMAGE、GEN_SPEECH、GEN_SFX、CUTOUT、GEN_MUSIC を独自のコマンドに設定します |
| ブランドプロファイル | このファイルの隣にある brands/<name>/。 brands/example/ はコピー用の中立的なプロファイル |
シェルごと、またはプロジェクトの .env でツールパスを一度設定します:
SKILL=~/.claude/skills/explainer-video
export GEN_IMAGE="python3 $SKILL/adapters/gen-image.py"
export GEN_SPEECH="python3 $SKILL/adapters/gen-speech.py"
export GEN_SFX="python3 $SKILL/adapters/gen-sfx.py"
export CUTOUT="python3 $SKILL/adapters/cutout.py"
export GEN_MUSIC="python3 $SKILL/adapters/gen-music.py"
手順
1. スクリプトとストーリーボード
storyboard.jsonを書きます。各ビートについて、話者、セリフ、シーン(場所、アクション、小道具)、ショットサイズ、カメラの動きを書きます。ビートのフィールドについてはSCHEMA.mdを参照してください。- 各ポイントが、言葉を使わずにそれを示すシーンを少なくとも1つ持っていることを確認します。
- 動画に字幕が必要かどうかユーザーに尋ねます。必要な場合、どの種類か尋ねます:映像に焼き付けるか、動画と一緒に
.srtファイルにするか。字幕は書き起こしではなく、音声スクリプトから作成します:スクリプトには正しいスペルがあります。 - 各役割をどの声が話すかユーザーに尋ねます。プレビュー用の無料の声と、最終カット用の有料で表現力豊かな声を提供します。
- 最初に無料の声。 すべてのプレビューと最初のフルカットは無料の声で吹き込みます。役割の性別は維持します。有料の声は、ユーザーが無料の声のカットを承認した後にのみ生成します。有料パスのために、各ビートの
tagをストーリーボードに保持します。
- 最初に無料の声。 すべてのプレビューと最初のフルカットは無料の声で吹き込みます。役割の性別は維持します。有料の声は、ユーザーが無料の声のカットを承認した後にのみ生成します。有料パスのために、各ビートの
- 動画がどのブランドを使用するかユーザーに尋ねます:
brands/<name>/のプロファイル、プロジェクト独自のルック、またはなし。明白なブランドがない動画でも、質問は必要です。回答をin/brief.mdに書き込み、最初のレンダリングからカードとパレットがそこから取得されるようにします。 - ストーリーボードをユーザーに送信します。承認される前に画像を生成しないでください。
2. キャラクター
- キャラクターごとに1つの固定された説明を書きます:顔、髪、体、衣服。すべての画像プロンプトに一字一句コピーします。
in/characters.mdに保持します。 - 平らで無地の背景に
gen-image.pyでベースの描画を生成します。プロンプトに「地面の影なし、グローなし」を追加します。 - そのベースから
--inputを使用して演技のポーズを生成します:歩く、座る、指さす、反応する、ジェスチャーする、向きを変える。シーンには、立っているだけのフィギュアではなく、ポーズが必要です。 - 口の状態(閉じる、開く、大きく開く)とまばたきを作成します。変更された領域のみをベースに貼り付けます。編集済みの画像全体を決して使用しないでください:顔がずれます。
- すべてのポーズを
cutout.pyで切り抜きます。描画にはisnet-anime、写真にはu2netを使用します。 - すべてのポーズを同じ1024ピクセルのキャンバスに配置し、ポーズ変更にオフセットを必要としないようにします。
- すべてのポーズのコンタクトシート(ImageMagick
montage)を作成します。それを開き、顔、服、またはプロポーションが異なるポーズを探します。そのポーズを再生成します。画像ごとに最大3回試行します。
実在の人物: 本人の同意なしに実在の人物を描画したりアニメーション化したりしないでください。最初に確認します。
cutout.py --model u2netで顔を切り抜きます。円の中に入れないでください。- 明るい背景の明るい髪は切り抜きで消えます。その場合は別の写真を使用します。
- あごの下で首と肩をフェードアウトし、首を体と一緒に描画します。トリミングされた写真はそこにハードエッジができます。
- 体はコード(SVGジョイント)で描画します。そうすれば、すべてのポーズが正確で、顔がずれることはありません。
3. シーンと小道具
- 各場所を、キャラクターと同じスタイルで、人物なしの背景(
--size 1536x1024)として生成します。 - 個別の切り抜きレイヤーとして機能する小道具を生成します:電話、チケット、カップ、カーテン。
- すべての画面、デバイス、パッケージをブランドマークやテキストがないか確認します。「ロゴなし」プロンプトはそれらを防ぎません。ImageMagickでマークを修正します。画像間編集は使用しないでください:間違った部分を削除してマークを保持します。
- パララックスに役立つ前景レイヤーを生成します:座席の列、手すり。
- プロジェクトにブランドプロファイルがある場合は、それを使用します。
brand.cssからパレット、images/からロゴとモットー、fonts/からフォントを取得します。ブランドカラーを発明しないでください。プロファイルのNOTES.mdを読んで、ブランドの形状を理解します。 - プロジェクトにアイコンの専用グラフィックがない場合は、MDIアイコン(
@mdi/js、24×24パス)を使用します。手動でアイコンを描画したり、絵文字を使用したりしないでください。プロジェクトのウェブサイトがすでに何かにMDIアイコンを配置している場合は、動画でも同じアイコンを使用します。
4. 音声
- 各セリフを
gen-speech.pyと話者ごとに同じ--voiceで生成します。- ユーザーがカットを承認するまでは、同じ性別の無料の声を使用します。有料モデルに関する以下の注意事項は有料パスに適用されます。
scripts/regen-voices.py <model>を実行します。これは、リクエストが変更された場合(テキスト、音声、モデル、設定、または同じ話者の隣接)にのみAPIにセリフを送信するため、承認されたテイクは保持されます。1つを修正するためにすべてのセリフを再生成しないでください。- 意図的にセリフを再ロールするには、
--fresh <beat または speaker>を追加します。すべてのテイクはassets/voice/takes/に保持されます。以前のテイクに戻すには、--restore <take>を使用します。 - キャッシュの前に作成されたプロジェクトには、ビートごとに
voice_keyがありません。--adoptを付けて一度実行するか、最初の実行ですべてのセリフが再生成されます。 - 表現力豊かなモデルでは、各セリフの前に1つの英語のオーディオタグ(例:
[warmly])を配置し、モデルの安定性、類似性、スタイル、スピードのつまみを設定します。それらがないと、セリフは平坦に聞こえます。タグをlineから除外します。字幕はlineを表示するためです:ビートのtagフィールドに配置し、テキストの前に送信します。 - オーディオタグを文書化していないモデルでは使用しないでください。タグが読み上げられる可能性があります。
- すべての声について、最初に名前、外国語に見える単語、文字コードをリストします。言語コードが設定されていても、声はそれらを自身の言語の方法で読みます。最初に単語の音声スペルを試し、次にインラインIPAを試します。スペルごとに3つのテイクと1つのコントロールテイクを作成し、ユーザーが耳で選べるようにします。
- 音を大文字で書かないでください。声は大文字を個別の文字として読む可能性があります。代わりに音を単語として書きます。
- 新しいテイクはすべての単語を移動します。ビート内のフレームオフセット(カメラ、ハイライト、効果音)は、リテラルフレームではなく、字幕スパンの開始にキーイングします。新しいテイクの後、音声認識パスから単語の時間を取得し、スパンの開始のみをリセットします。
scripts/level-voices.pyを実行します。各セリフを音声ラウドネスでレベル調整します。ピークレベリングでは不十分です:セリフは6 dBに広がる可能性があります。- 別の言語のバージョン:シーンを保持し、同じソースから2番目のコンポジションを生成します。新しい言語に、同じビートIDを持つ独自のストーリーボード、独自の音声フォルダ、エンベロープ、音楽カットを与えます(
check-audio.pyのSTORYBOARD、VOICE_DIR、MUSIC)。 - 新しい声を、同じターゲットではなく、承認されたミックスの音声レベルにレベル調整します。
- 別の言語のバージョン:シーンを保持し、同じソースから2番目のコンポジションを生成します。新しい言語に、同じビートIDを持つ独自のストーリーボード、独自の音声フォルダ、エンベロープ、音楽カットを与えます(
- 口のエンベロープを作成し、
scripts/gen-envelopes.mjsでバンドルします。
5. Remotionでのアニメーション
- ステージング: 各シーンをアクションとして再生します。キャラクターは歩いて入り、座り、反応し、小道具を使用します。小道具を独自のレイヤーで動かします。修正は不足している部分を追加します;原因を示すアクションは保持します。
- カメラ: すべてのショットでプッシュイン、パン、またはトラックします。背景、キャラクター、前景の間でパララックスを使用します。 各カメラ移動を固定し、フレームを埋めなければならない各レイヤーが、パララックスの深さ(回転を含む)でフレーム内に留まるようにします。深さ < 1 のレイヤーはカメラよりも動きが少なくなります:プルアウトまたはオフセンターで終わるパンはフレームエッジを露出させ、地面の帯が見えます。
- 深さ: 床とその上に立つすべてのもの(椅子、人、小道具)を1つのレイヤーに1つの深さで配置します。2つの深さは、カメラが動くたびに床と椅子の脚を離し、椅子が浮きます。アイドル時のうなずきは、椅子ではなく、座線より上の体を回転させます。
- モーション: 小さなオーバーシュートを持つスプリングを使用します。動きの前に予備動作を使用します。2つのポーズ間のハードスワップは決して使用しないでください。
- アイドル: 呼吸、揺れ、まばたきにそれぞれ独自の周期と位相を与えます。
- 口: エンベロープから駆動し、最小ホールドは3フレーム(スターターの
motion.tsのmouthStates)とします。 - 画面外のナレーター: ナレーターの顔ではなく、エンベロープに従う波形オーブを表示します(スターターの
NarratorOrb.tsx)。 - 光: ストーリーテリングツールとして光を使用します。例えば:家の明かりが暗くなり、電話の画面が顔に光ります。
- トランジション: カットごとに1つを選択します(マッチカット、ワイプ、ハードカット)。すべてのカットに1つのフェードを使用しないでください。
- 1人のキャラクターは、カットを越えて1つのオブジェクトのままです。 キャラクターがあるショットから次のショットに移動するとき、古い場所から新しい場所まで画面上で運びます。片側から出て反対側から入るキャラクターは、別のキャラクターとして読まれます。
- 視聴者が見つけなければならない変更には、音声に独自のポーズを入れます。 ビートを分割し、その後に1.5~2秒の無音を追加します。そのポーズで変更をステージングします:古い状態をマークし、暗くし、クロスフェードし、次のセリフで新しい状態をハイライトします。
- ポーズは文の区切りに置き、フレーズの内部には決して置かないでください。レベルでギャップを見つけます:単語の後、約-38 dB(ピーク基準)未満の20 msウィンドウの最長ランを取り、その中央でカットします。音声認識の単語時間からギャップを取得しないでください:それらのエッジは0.5秒ずれる可能性があります。
- 字幕とキーポイントカード:簡潔に保ちます。カードはシーンをサポートします。決してシーンを置き換えません。
- フレーム — すべての動画が持っています:
- オープニングタイトルカード、約3秒:ロゴ(該当する場合)、動画タイトル、1行の短いテキスト。無音または音楽のみの場合があります。
- クロージングスライド、約4秒:ロゴ(該当する場合)、主張またはコールトゥアクション、URL。無音の場合があります。
- コーナーロゴ: 2つのカードの間、動画全体の右下隅に小さなロゴ。オープニングカードの後にフェードインし、クロージングスライドの前にフェードアウトします。顔や重要な要素から離して配置します。
- 「該当する場合」:ブランド、製品、または会社の動画にはロゴがあります。個人の動画には会社のロゴはありません。それでもタイトルカードとクロージングスライドは取得します。
- 完成した動画にフレームを追加するには、音声のタイミングを変更しないでください。既存のコンポジションを2つのカードの間の
<Series>に配置します。カードは最初と最後に無音を追加しますが、それは許容範囲です。
- 常にブランドを優先。 プロジェクトにブランドプロファイルがある場合は、それを使用します:プロファイルのカード、
brand.cssのパレット、ロゴとマークを実際のアセットとして。プロジェクトに実際のアプリのスクリーンショットがある場合は、それらをレイヤーとして使用します:実際の画面は、描かれた画面の近似よりも優れています。人物、場所、小道具のみが描画されます。UI、ロゴ、タイプはブランドから取得します。プロファイルが明らかにライブアプリに対して最新でない場合は、その旨を伝えてアプリを使用します。
6. 画像を確認する
npx remotion stillでキーフレームのスチルをレンダリングします。- スチルを開きます。カードや字幕で覆われている顔、フレームエッジで切れているキャラクターを探します。オプションのセカンドオピニオン:
ADAPTERS.mdはREVIEW_IMAGEコマンドを説明しています。その判定を最終決定ではなくリードとして扱い、各発見をフレーム上で確認します。 - シーン、ポーズ変更、カメラ移動、ダイアログのやり取りを含む約20秒のサンプルをレンダリングします。
- 各ポーズ変更前後のフレームを抽出します…
[以降は翻訳のため省略]