animate は何をしますか?
参照とざっくりしたアイデアを、すべてのフレームがコードで描画され、サウンドが合成されたMP4に変換します。 ユーザーが味覚を持ち込み、あなたが演出を行います。ざっくりしたブリーフで十分なので、創造的な判断は自分で行い、作品全体を変えるようなことだけを質問してください。
すべては animations/<slug>/ に格納されます:
refs/ study/ style.md beats.md piece.html score.json out/<slug>.mp4
必要に応じて、そこにヘルパースクリプトやメモを追加します。このスキルのフォルダ内にある examples/bee-dance/ は、完成した作品例です。
以下のコマンドで、$SKILL はこのスキルのフォルダを意味します。ユーザーのプロジェクトから、$SKILL/.venv/bin/python が存在する場合はそれを使って、存在しない場合は python3 を使って実行してください。パッケージが不足している場合は、README.md のセットアップを参照してください。ffmpeg と Chrome が必要です。
ジョブを選ぶ
| ユーザーの希望 | ジョブ | 方法 |
|---|---|---|
| 「この画像をアニメートして」 | Move the artwork | 画像をレイヤーに分割して動かします。references/move-an-image.md を読んでください。ステージ3〜4の piece.html はスキップし、レンダリングはPythonスクリプトを使用します。 |
| 「これを描いて」「このシーンを再現して」 | Repaint | シーン全体を piece.html で描画し、参照に忠実に合わせます。 |
| トピックやストーリーを「このスタイルで」 | New film | 以下の全プロセスを実行します。参照がルックを設定し、題材は新しいものになります。 |
長さや形状が指定されていない場合、ムービーは15秒、動く画像は5秒で、1080x1920 を使用します。
コードは、形状、線、グラデーション、テクスチャに強みがあります。フラットベクター、線画、ペーパーカット、リソグラフ、水彩、アニメ背景、植物図版などです。フォトリアリズムや表情の演技には弱いです。参照がフォトリアリスティックな場合は、そのことを事前に伝え、イラスト風の解釈を提案してください。
ステージ1:すべての参照を研究する
ユーザーが多くの参照を渡す場合があるので、それぞれに役割を与え、平均化して台無しにしないようにします。
python3 $SKILL/scripts/study.py animations/<slug>/study <files or folders...>
これにより、参照ごとに、コンタクトシート、パレット、ビデオの場合はカットとペーシングカーブが得られます。ビデオの一部だけが重要な場合は、秒単位で範囲を追加します(例:"reel.mp4@0-12")。トーキングヘッドの映像は結果を歪めます。次に、自分でシートを確認し、テクスチャが重要な部分をクロップします。数値だけでは、なぜ良い感じがするのかを教えてくれません。
style.md を書きます:
- 各参照が私たちに与えるもの、それぞれ一行:これからテクスチャ、あれからタイプ、別のものからペーシング。
- コピーしないもの:ポーズ、キャラクター、ロゴ、署名、正確な構図。スタイルを取り、作品は取りません。例外は、ユーザーがアニメートするよう依頼した画像に対するRepaintまたはMoveジョブです。
- パレット(16進数値)、タイプ(
assets/fonts/には最初に2つあります。またはオープンフォントをコピーします)、テクスチャ、モーションの雰囲気。 - 作品をまとめる一つの仕掛け:レンズ、さざ波、決して途切れない線。これがない映画はスライドショーのように感じられます。
新しい参照ごとに animations/library.md に短いカードを追加し、その教訓がこのプロジェクトを超えて生き続けるようにします。ユーザーが以前使ったスタイルを指した場合はカードを再利用し、新しいことを学んだ場合のみ拡張します。
ゲート: この作品がどのような見た目で、なぜそれがトピックに役立つのかを一文で言えること。
ステージ2:ビート
作品に事実がある場合は、最初にそれらを確認します。間違った主張を美しく描いても依然として間違っており、一般的な「事実」はしばしば曖昧です。最終報告のためにソフトにしたことがあればメモしてください。
beats.md を一つの表として書きます。映像と音響は一緒に計画します。なぜなら、その同期が作品を高級に見せるからです:
| 時間 | 映像 | 音響 |
|---|---|---|
| 0-1.5 秒 | オレンジの雫が落ちて広がる | 滴る音、濡れたブロッサム、パッドが入る |
| 1.5-3 秒 | タイトル行、詳細がポップオン | 単語ごとにプラック、小さなチック音 |
ゲート: 最初の0.5秒以内に動きがあること。形はフック、構築、ブレス、見返り。2秒以上新しい映像のアイデアがないストレッチがないこと。エンドは約1.5秒保持して読めるようにすること。新しいアイデアは言葉ではなく映像が運ぶこと。各キャプションは約1.5秒画面に表示される必要があるため、キャプションを短くする前に削減すること。縦長フレームの場合、上部12%と下部18%にテキストを配置しないこと。
ステージ3:画像を構築する
assets/piece-template.html を piece.html にコピーし、その中で描画します。契約は window.PIECE と window.renderFrame(t) です。
renderFrame(t) は t のみに依存しなければならず、非同期でも構いません。静止画は任意の時間に直接ジャンプするため、フレーム間で何かを記憶したり、シードされていない Math.random() を使用すると壊れます。高価な静的レイヤーは、シードされたジェネレータから window.ready 内で一度ペイントし、フレームごとにコンポジットします。
作品内に別のフィルムを表示するには、そのフレームを clips/ に番号付きJPEGとして抽出し、非同期 renderFrame 内で Image を使って必要なものを読み込み、キャンバスに描画します。
描画する前に references/styles.md を読んでください。ここには動作するレシピ(セル風の雲、葉、歩くフィギュア、水、水彩、紙)とコピー元のソースファイルがあります。奥行きは異なる速度で動くレイヤーから生まれ、生命感は小さな二次的な動き(揺れ、ドリフト、きらめき、ちらつき)から生まれます。
フルレンダリングのかなり前に、早期かつ頻繁に静止画をレビューします:
python3 $SKILL/scripts/render.py animations/<slug>/piece.html --stills 0.5 3 7 12
フルサイズで見て、参照と並べて比較し、ずれている箇所を修正します。数ラウンドを想定してください。最初の静止画は通常ラフドラフトであり、このループが品質を生み出します。
python3 $SKILL/scripts/compare.py animations/<slug>/out/compare.jpg <stills and reference images...>
ゲート: 中間の静止画が、参照と同じ素材(同じ紙、絵の具、線、色)で作られたように見えること。題材は新しくても構いません。参照のクリップアート版は合格しません。
ステージ4:サウンド
beats.md と同じ時間に対して score.json を書きます。scripts/synth.py のヘッダーで利用可能なサウンドを確認してください:プラック、ベル、パッド、ドリップ、チック、スウェル、ウーッシュ、インパクト、キック、ノイズベッド。
python3 $SKILL/scripts/synth.py animations/<slug>/score.json animations/<slug>/out/score.wav
一つのキーに留めてください。グリッドではなく、映像イベントにヒットを合わせてください。見返りの前は本当に静かにしてください。コントラストが決め手になるからです。長い音符の連続は手打ちせず、数行のPythonで生成してください。
音が聞こえないので、synth.py が出力するレベルレポートを読んでください。計画していなかったディップや、シグネチャーサウンドが他に埋もれていないかを確認します。
作品にナレーションが入る場合
ナレーションは映像の前に来ます。なぜなら、言葉のタイミングがすべてのビートを設定するからです。ユーザーが持っている任意の音声ツールで録音し、単語タイミング付きで文字起こし(faster-whisperが有効)し、そのタイミングからビートとキャプションを構築します。Whisperは単語をその前の無音部分で早めに開始することがあるので、ポーズをカットする前に波形を確認してください。
ナレーションをスコアにミックスし、その結果を --audio としてレンダリングします。スコアはナレーションの下でダッキングされ、ポーズ中に音楽が浮かび上がります:
python3 $SKILL/scripts/mix.py animations/<slug>/out/voice.wav animations/<slug>/out/score.wav animations/<slug>/out/mix.wav
ステージ5:レンダリング、チェック、修正
python3 $SKILL/scripts/render.py animations/<slug>/piece.html --audio animations/<slug>/out/score.wav
python3 $SKILL/scripts/qc.py animations/<slug>/out/<slug>.mp4
render.py は out/<slug>.mp4 を書き出し、-14 LUFS でマスタリングします。進捗を表示し、一般的な作品で15秒あたり約1〜2分かかります。作品が重い場合はバックグラウンドで実行してください。サウンドのみの変更後は、--remux を追加して再描画せずに数秒でオーディオを差し替えます。
qc.py はデッドストレッチ、1フレームのグリッチ、ラウドネスをフラグし、コンタクトシートを書き出します。モーションが良いかどうかは判断できないので、シートも読み、リスクのある瞬間(トランジション、テキストのオンオフ、レイヤーの重なり、繰り返しモーションの全サイクル)をクローズアップクロップでフレームごとに確認します。修正し、クリーンになるまで再レンダリングします。
引き渡し
ユーザーの平易な言葉で報告します:何を作成したか、各参照がどのように使用されたか、何をチェックしたか、チェックできなかったもの。スコアを聞いたり、速度で見たりすることはできないので、その旨を伝えます。追加で:
- 知っておくべき事実:主張をソフトにした場合。
- 簡単な調整案:次に依頼できる具体的な変更を3〜4つ。
- 参照が他の誰かの作品であり、商用利用について検討が必要かどうか。