Communitygithub.com

オームドブ/ポッドキャスト-モーション-アニマティック

ポッドキャストやトーク番組にアニマティック(絵コンテ風)ルックを提供するスキル。音声のみの番組も動画化可能です。

ポッドキャスト-モーション-アニマティック とは?

このスキル(ohmdob/podcast-motion-animatic)は、ポッドキャストやトーク番組の映像に「アニマティック」と呼ばれる手描き風の絵コンテルックを適用します。会話の各ポイントをパネル(カード)として表示し、鉛筆スケッチ風のイラストや文字を、実際の音声に合わせてステップ動作で動かします。スピーカー(実写)はパネルの合間に表示され、オプションでスピーカー横にカードを配置したり、ストーリーに合わせて動くイラストやテーマに沿った設計図スタイルの背景も設定可能です。 このスキルは Claude Code や Cursor などの AI エージェントと連携して動作し、ポッドキャスト制作パイプライン(podcast-playbook)に統合されています。事前に録画された映像、音声のみのデータ、またはスクリプトからでも利用可能で、16:9と9:16の両方に対応。生成されるスケッチはすべてローカル処理されるため低コストで、複数の画像ソースを統一した手描きスタイルに変換できます。主なトリガーは「animatic」「animatic podcast」「audio-only podcast video」「การ์ดอธิบาย」「ภาพเคลื่อนไหวเล่าเรื่อง」など。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ohmdob/podcast-motion-skills/tree/HEAD/.claude/skills/podcast-motion-animatic

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ポッドキャストモーション:アニマティック

ステータス:プロデューサーから承認されたスクリプト付き映像を1本レンダリング済み:2分、2人の描かれたホスト、カード、ブループリント、16:9。 実際の映像と9:16ではテストフレームでしか確認していないため、長時間のレンダリング前にそれらを表示して判断を仰ぎ、その結果を番組の STYLES.md に記録すること。最初に podcast-playbook を読むこと:そこにはサウンド、カット、ゲート、マスターが含まれている。

  • アイデア: ストーリーボードに命を吹き込む。トークの各ポイントをパネルとして表示し、実際の音声に合わせてステップ動作で保持・移動させる。
  • 最適な用途: 描けるものについてのトーク、および音声のみの番組。
  • 追加ステップ: 無し。マットも不要。
  • コスト: 画像(番組が既に持っている場合は除く)。見つけた静止画はすべて再利用する。

顔は自然なまま

パネルはアイデアやオブジェクトを描き、話している人を決して描かない。 イラスト化されたゲストは、このルックが絶対にすべきでないことである。ゲストの信頼性が番組の要点であり、実際の番組で様式化された顔は一目で拒否された。したがって、人物の画像を決して与えてはならず、生成AIに描かせてもいけない。 パネルの合間には、実際のスピーカーが自然な色で表示される。

既にキャラクターであるホストは唯一の例外であり、 プロデューサーが依頼した場合に限る。上記の理由は実在の人物の信頼性に関するものである。彼らはスピーカーの代わりとなり、パネルは依然としてオブジェクトと単語のみを表示する。podcast-playbook 内の references/scripted-show.md を参照。

ビルド

python3 scripts/build.py episodes/EPxx/full --ratio both --frames
python3 scripts/build.py episodes/EPxx/clips/Cnn_name --ratio both --frames

scripts/ はこのスキルのフォルダである。映像フォルダは full_edit.py --render を先に実行し、build/ 内に faces.jsonl と pass1.json が必要である(podcast-playbook の references/full-episode.md を参照)。--frames は判断用の実際のフレームからなるコンタクトシートを書き出す。variant_animatic/ と variant_animatic_9x16/ を書き出す。レンダリングとマスターは podcast-playbook に従う。

パネル

cards.json 内のすべてのカードがパネルとなる。

  • 画像付きのカード(opts.panel、なければ opts.still または opts.obj):画像を鉛筆スケッチとして、カードのタイトルをその下に、各行が着地するたびに前の行を置き換えながら表示する。
  • 画像のないカード: その単語をフレーム内にレタリングする。

assets_src/panels/<name>、次にStudio Cutの静止画、最後にPop Studioのオブジェクトを、.png または .jpg として探す。見つからない名前付き画像は単語として表示され、ビルドはそれを報告する。

スケッチはローカルかつ無料であり、これが低コストを実現している: 任意の写真、または任意のツールからの画像が、同じ手書きスタイルで出力されるため、混在したソースでも1つのストーリーボードのように見える。画像が既に望み通りのスタイルで描かれている場合は、"sketch": false を設定する。

画像の入手 は references/storyboard-and-assets.md に従う:まず見積もりを取り、Ideogramがない場合は、プロデューサーにどの代替手段を使用するか尋ねる。1つの画像が複数のカードに使用できるため、20分のエピソードは約20パネルで動作する。1つの明確なオブジェクトに限定すること。複雑な写真はスケッチするとノイズになるため:

1つのシンプルな白いカップのみを中央に、無地の淡い背景で、柔らかく均一な光、強く明確な輪郭。テキスト、文字、ロゴ、人物、手は無し。

assets_src/panels/cup.png として保存し、カードに {"panel": "cup"} と記述する。

描かれたものとして読める理由: 動きは毎秒6ステップ(steps())で実行され、カットはハードである。スムーズな動きはスライドショーに変えてしまうので、そのままにしておく。

カード、モーション、テーマ

プロデューサーが1回のリクエストごとに依頼したもので、すべてが持続している。それぞれは番組が要求するまでオフであり、コードは scripts/animatic_cards.py にあり、その先頭にすべてのオプションがリストされている。

"looks": {"animatic": {"layout": "card", "blueprint": true, "paper": "#0A1A33", "ink": "#E6F4FF", "pencil": "#9CC4E4", "accent": "#FFB547"}}
  • "layout": "card" はスピーカーを画面に表示し続ける。 フルフレームパネルはスピーカーを隠してしまい、プロデューサーはPop Studioのように画像カードと説明テキストを求めた。カードは話している人の反対側に配置される:最初に見出し、単語に合わせて着地して留まる行、次に単語が残したスペースを埋める画像。現時点では16:9のみ。ホストの背後にあるタイプ(Pop Studioの残りの半分)には切り抜きが必要なため、ここにはない。
  • opts.motion は画像をストーリーに合わせて動かす。 組み込み:still、drop、arc、fly、drift、sway、hop、swarm、flipbook。すべてのパネルにゆっくりとしたプッシュインだけではプロデューサーは満足しなかった。投げられるボールは、見せるだけでなくストーリーを伝える。moves.py で独自のものを記述する:examples/hail-mary/moves.py には3つの描画で語られる1行と、映像の初期から最終的に着地するボールがある。
  • "blueprint": true はテーマを設定する。 テーマをストーリーから取り、尋ねること:海軍グリッドは宇宙映画に適していた。すべてのスケッチを反転し、スクリーンでオーバーレイするため、動く画像にエッジが表示されない。
  • 生成AIがクリーンに提供できないものを描く。 18枚の描画からなるフリップブック、歩くエイリアン、固体の宇宙船はコストがかからず、スケッチされた写真よりも読みやすい。examples/hail-mary/draw_art.py が方法を示している。他人のキャラクターの描画は依然としてその人のものであるため、公開前に確認する。
  • paper.json 内の "wide" はツーショットを提供する。 短いやり取りをするホストがプランナーからツーショットを得ることは決してなく、視聴者は早い段階と最後に両方を見るべきである。

既に支払われた間違い

  • カードは独自のフレーミングに収まらなければならない。 プランナーはショットを少なくとも1秒間保持するため、カードが0.9秒間顔の半分を隠す可能性がある。カードレイアウトでは、ショットはカードの端とスピーカーが変わるたびに正確にカットされるようになった。
  • フレーム端の他のホストの細片はミスのように見える。 カードの背後に、端まで続く無地のストリップを配置する。
  • ウィンドウ内で画像が小さすぎる: 単語が残したものを画像に与え、その後 zoom を使用する。小さなリンゴの上に込み入ったテキストの行があると、未完成に見えた。
  • 後方に飛ぶ画像を反転する。 宇宙船の機首が来た方向を向いていた。
  • ぶら下がっているものが、ぶら下がっているものと合っているか確認する。 操り人形の手前で止まった紐が、別のレビュアーが指摘するまで10秒間画面に表示されていた。
  • レタリングされたカードは、動画のある映像では最も弱いものである。 数字のために残しておき、残りは何か描くこと。

カメラ無し

音声のみの番組の場合、録音から平易なビデオを作成すれば、パイプライン全体が通常通り動作する:

ffmpeg -f lavfi -i "color=c=0xF6F7F5:s=1920x1080:r=25" -i EPxx.wav -shortest -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac 1080p/EPxx.mp4

その後、paper.json で "audio_only": true を設定する。パネル間では、フレームにチャプター名が表示される。faces.swift は顔を見つけられないが、問題ない。スピーカーはトランスクリプトからのみ得られるため、pass1.json の who を修正すること。数秒ごとにパネルを維持すること: 他に動くものがない場合、長いギャップは静止画となり、12秒でマスターのチェックに失敗する。

画面上の表示

  • 16:9: パネル間ではスピーカーがフレームを埋め、パネルは無地の紙上のゆるい鉛筆フレームで、その下に1行のキャプションがある。
  • 9:16: フレームは y 170 から 1070 に位置し、キャプションはその下、アプリのクリアエリア内にあり、その下に番組のマークがある。チャプター名はパネル間でキャプションの代わりとなる。
  • 数字と判定は赤色。 過剰な色はない:鉛筆フレーム内の赤い単語は、すでに画面上で最も目立つものである。
  • 紙は意図的にクールなオフホワイト: クリーム色の紙とセリフは、すべての番組が避けるべきルックである。
"looks": {"animatic": {"paper": "#F6F7F5", "ink": "#1C2126", "pencil": "#59626A", "accent": "#D3261F", "sketch": true}}

手書きフォントはItimで、タイ語とラテン語をサポートする。

確認すべきこと

  • 各キャプションとレタリングされたパネルを電話サイズで読むこと。
  • スケッチは意図されたものとして読めるか? それぞれを確認する。特に健康や法的なポイントにおいて、読めない画像は単語よりも悪い:代わりにレタリングすること。
  • パネルはスピーカーを完全に覆うため、 スピーカーの顔が重要な瞬間にパネルを配置しないこと。
  • 同じ画像の繰り返し は数枚のカードでは問題ないが、それを超えると飽きられる。
  • 意図的に問題ないもの: timeline_track_too_dense。チャプターが多くのタイミング調整されたパネルを保持するため。
  • 各カードの到着フレームをフレーム単位でステップ実行すること。 カードの最初の1秒は、フレーミングと入場の欠陥が潜む場所であり、数秒ごとのサンプルではそれらを見逃す。

関連スキル