Communitygithub.com

nathankim0/viral-ad-remix

実証済みのバイラルショート広告(TikTok / Reels / Shorts形式)を、AI動画モデルで自分のモバイルアプリ用にリメイクし、AIが作り出す問題(偽の電話画面、乱れた手、リップシンクのずれ、無音部分)を修正し、実際のアプリ録画、キャプション、エンドカードで仕上げます。

viral-ad-remix とは?

このスキルは、既存のバイラル広告の構造を解析し、AI動画モデルを使ってユーザーのアプリ向けにリメイクするためのワークフロー全体を提供します。参照広告の発見、キャラクターシートの生成、AI出力の分析、実際のアプリ録画への画面置き換え、キャプション・エンドカードの追加、そして音声同期を維持した編集を自動化します。特に、AIが苦手とする電話画面の歪みや手の不自然さ、リップシンクのずれを修正することに重点を置いており、最終的に広告としての品質を保証します。Claude Code(Codex CLI)やffmpeg、Pythonスクリプトを活用し、Meta、YouTube Shorts、TikTokなどのプラットフォームに対応可能です。

対応~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/nathankim0/viral-ad-remix/tree/HEAD/skills/viral-ad-remix

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

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

ドキュメント

バイラル広告リミックス

実証済みの広告構造をユーザーのアプリ向けに作り変えます。AIモデルが人物と背景を提供し、電話画面に表示されるものはすべて実際のアプリ録画から取得します。編集では、音声ラインはそれを話している顔に合わせて維持します。

$S = このスキルのディレクトリ内の scripts/。ffmpeg、Python 3(numpy pillow opencv-python-headless)、音声チェック用に mlx-whisper(Apple Silicon)または openai-whisper が必要です。アプリのフッテージは app-demo-recorder スキルなどの画面録画ツールで記録します(リリースビルド、実際のアカウント、広告表示なしの状態)。

最初の編集の前に references/lessons.md を一度読んでください。このワークフローが回避するために設計された失敗事例がリストされています。

0. 目標の合意(1メッセージ)

ターゲットオーディエンス(実際にアプリに留まる人、あなたが使ってほしいと思う人ではない)、チャンネル(Meta / YouTube Shorts / TikTok)、表示する1つの機能、そしてクレジット予算を決定します。年配の視聴者は、より遅いペース、大きなテキスト、画面に映る同年代、具体的なメリット(お金、時間)を好みます。予算なしで有料生成を開始しないでください。

1. すでに機能している参照を見つける

python3 $S/find_reference_ads.py search --country KR --objective app_install --period 180 --order like
python3 $S/find_reference_ads.py search --country KR --keyword 앱테크 --lang ko
python3 $S/find_reference_ads.py download <id> <id> --out refs

4~30秒の広告(リメイクモデルが受け付ける範囲)を選び、その構造が機能に合っているものにします:発見 → 試用 → 結果 → CTA。「いいね」は広告費によって水増しされています。同じ検索内でのみ比較し、検索をまたいで比較しないでください。参照動画には透かしが入っており、広告主に帰属します。リメイクジョブの構造的なソースとしてのみ使用してください。

2. 人物のキャスティング(キャラクターシート)

リメイクモデルにはコピーする顔が必要です。ユーザーにタレントの写真がない場合は、動画クレジットを使う前に人物ごとに1枚のキャラクターシートを生成し、ユーザーの承認を得てください。

  • 誰: ターゲット視聴者の同年代(同じ年齢、地域、職業、服装)、モデルのような美貌ではなく普通の外見、参照広告の役割(プレゼンター、顧客、隣人)に一致する人物。
  • シート: 1枚の横長画像(約1600x900)、フォトリアリスティック、同じ人物と服装で3つのビュー:正面のヘッドアンドショルダークローズアップ、半身、全身。ニュートラルな明るい背景、柔らかい日光。手はリラックスしてはっきりと見え、指は5本それぞれ。テキスト、ロゴ、透かし、手に持った電話はなし。
  • プロンプトの骨格: "Photorealistic character reference sheet of ONE fictional , <face/hair details>, wearing . Three views side by side on a plain light background: front close-up, half body, full body. Natural skin texture, soft daylight. No text, no logos, no props."

ツール(安い順):

# Codex CLI 画像生成(ChatGPTプランに含まれ、動画クレジットは消費しない)
codex exec --skip-git-repo-check --sandbox workspace-write -C cast \
  "Use your image generation tool to create ONE image: <prompt skeleton>. Save it as ./cast_<name>.png and print its path."
  • Higgsfield(または他の画像API)をエージェントのツール経由で使用:generate_image に同じプロンプト、またはマルチビューシート用のキャラクターシートワークフロー。クレジットを消費します。事前に見積もりを取ってください。
  • ユーザーがすでに支払っている任意の画像モデル。

画像を開いて確認:ビュー間で一貫した顔、自然な手、テキストなし、実在の人物や有名人に似ていないこと。架空の人物は、プラットフォームまたは法律で要求される場合、AI生成であることを開示する必要があります。キャラクターシートはブリーフの横に保管し、リメイクジョブにキャスト画像として渡します。

3. リメイクを生成する

準備:参照動画、ステップ2のキャラクターシート、アプリアイコン、1~2枚の実際のアプリスクリーンショット。

AIの出力が簡単に修正できるようにブリーフを作成します:

  • 参照のビートとペースを維持し、キャスト、設定、製品を置き換えます。話すセリフはそのまま、短く、ターゲット言語で記述します。証言的な表現(「使ってみたら…」)は、それが真実でない限り避け、デモンストレーション(「計算してみましょう…」)を好みます。
  • キャプションや画面テキストなし(文字化けするため)、および電話でタイピングする手のクローズアップなし(手が不自然に見え、指が画面を横切るため、画面置き換えができない)を要求します。
  • 電話画面は置き換えられるため、電話は静止してカメラに向けて持つように要求します。
  • 最初にコストを提示し、最低解像度でドラフトを作成し、1回に1つの出力を生成します。

4. AI出力を触る前にマッピングする

python3 $S/analyze_source.py ai.mp4 work/ana        # ショット、音声ライン、コンタクトシート work/ana/shots.jpg
python3 $S/analyze_source.py ai.mp4 work/ana --no-speech --rms 17.2-17.6   # ライン近くの正確な音声カットポイント

shots.jpg を確認します。すべてのショットを分類:keep(人物、背景)、screen-replace(電話がカメラに向いている)、drop(タイピングの手、歪んだ顔、読み取れないアクション)。各ラインがどのショットで話されているかを記録します。認識のライン開始は0.3~0.7秒早いことが多いため、音声をカットする前に --rms で確認します。

5. すべての電話に実際のアプリを表示する

python3 $S/screen_replace.py auto ai.mp4 3.33 6.50 app.mp4 work/shotB.mp4 --work work/B --app-start 2.4
python3 $S/screen_replace.py auto ai.mp4 17.46 21.25 app.mp4 work/shotE.mp4 --work work/E --app-start 10.6 --blank 0,1740,1080,2020

auto はショットを抽出し(範囲内のカットで停止)、キーフレームと画面コーナーを見つけ、ベゼルにスナップし、ショット全体を通して電話をトラッキング(平面トラッキング、双方向、回転対応)、一致した明るさとわずかなグレアで合成し、work/X/key_preview.png(クワッド+ピクセルグリッド)と work/X/qa.png(オリジナルと合成の比較)を書き出します。

常に両方の画像を開いてください。 クワッドがずれている場合は、グリッドからコーナーを読み取り、--key K --quad "x,y x,y x,y x,y"(TL TR BR BL、内側の画面端)で再実行します。解析の安全範囲からSTART/ENDを使用します。アプリクリップをラインに合わせます:人物が質問している間は入力画面を、反応している間は結果画面を表示します。--blank で古いUIやプライベートなUIを塗りつぶします(アプリのピクセル座標)。

6. 結果モーメントとテキストを構築する

python3 $S/pop_highlight.py result_clip.mp4 x0,y0,x1,y1 work/pop.mp4 --blank 0,975,720,1145   # キー数字がポップ、グロー、スパークル
python3 $S/captions.py captions.json work/caps     # フック、ラインキャプション、エンドカードをPNGとして

テキストルール:最初のフレームにフック(視聴者が抱く質問)、話されたラインごとに1つのキャプション、最大2行、大きく、高コントラスト、下部20%と右端から外して、視聴者が読まなければならないアプリUIの上には決して重ねない。テキストはユーザーが受け入れる最小限に抑え、法的に必要な通知は残すが小さく。エンドカード=アプリアイコン+名前(+ユーザーが望む場合はCTA)。

7. 同期を維持してアセンブルする

タイムラインJSON(形式は scripts/assemble.py --help を参照)を作成し、実行:

python3 $S/assemble.py timeline.json out.mp4
  • 音声はソース自身の音声をセグメントにカットしたものです。話している顔があるショットは、ビデオと音声に同じソース時間を使用します。アプリ画面、ワイドショット、エンドカードでは、ラインはナレーションとして再生できます。
  • 不必要な無音(ライン前の沈黙、ショット間)は、すべてをスピードアップするのではなく削除します。
  • 人物ショットは最初のフレームから動いていなければなりません。時間を埋めるために顔を静止させないでください。反応を長くするには、無音部分をフレーム補間(minterpolate)でスローモーションにし、必要なソースよりも少し多めに与えます。
  • ディゾルブはカットポイントを超えた実際のフレームを使用します。アプリ画面はハードカットでも構いません。
  • ビデオと音声の合計時間は一致する必要があります(そうでないとツールが拒否します)。

8. こだわりある視聴者のように検証する

python3 $S/verify.py out.mp4 --forbid ai.mp4:10.79-17.29 --person 0-3.2 --person 5.2-8.8 --sheet work/sheet.jpg

その後、シートを見て、トランスクリプトをキャプションと照らし合わせ、一度再生します。典型的な見落とし:次のショットの境界フレーム、4フレーム静止する顔、間違った顔の上で再生されるライン、置き換えられた画面の端にある偽のUI、アプリを覆うテキスト、アプリUIの上に留まるフック。修正して再検証してからユーザーに提示します。

9. 納品

1つのフォルダ:最終mp4、AIの生出力、合成データ、タイムラインJSON、タイムラインテーブル付きREADME、使用したクレジット、および未解決のリスク(AI人物の開示、証言的な表現、ブランド名の誤った発音など)。独立したレビューが必要な場合は、新しいコンテキストのレビューアにフレームシート、トランスクリプト、タイムラインを渡し、保持すべき構造を指示します。「準拠させて速くする」とだけ指示されたレビューアは、人物やアプリのフッテージを削除してしまいます。

関連スキル