Communitygithub.com

editar-criativo

動画クリエイティブを一括生成するファクトリ。オファー用9:16広告(Meta/TikTok向け)を作成します。

editar-criativo とは?

このスキルは、マーケティングオファー向けの動画クリエイティブを一括生成する「ファクトリ」です。Meta(Facebook/Instagram)やTikTokで配信する9:16の縦型広告動画を、スクリプト作成からナレーション生成、B-roll編集、字幕、効果音、BGM、書き出しまで完全自動化します。ユーザーは「3つのモード」から選択できます。**新規クリエイティブモード**では全く新しい角度のスクリプトを複数作成し、**モデリングモード**では既に成果の出ているクリエイティブの構造を分析し、同じ構成で新しい動画を生成します。**バリエーションモード**では、検証済みの動画の冒頭フックだけを複数パターン差し替えます。出力は`01_prontos`フォルダにMP4ファイルとCSVレポートとして保存されます。本スキルはClaude CodeなどのAIエージェント向けに設計されており、ユーザーから「クリエイティブを編集して」「/editar-criativo」といった指示があると自動で起動します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/matheuserick038-crypto/editar-criativo/tree/HEAD

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

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

ドキュメント

Editar criativo (クリエイティブ編集)

キットは kit/(このファイルと同じ階層)にあります。すべてのスクリプトは Python 3.10+ で、ffmpeg/ffprobe を使用します。 Windows では python(python3 ではない)で実行してください。ffmpeg がセッションの PATH にない場合、スクリプトは自動的にユーザー PATH から見つけます。

KIT = <この SKILL.md があるフォルダ>/kit

1. オファーとフォルダ

オファー名を確認してください(リクエストにない場合はユーザーに質問)。デフォルトのルートは ~/Documents/Ofertas(Windows では %USERPROFILE%\Documents\Ofertas)です。

python "$KIT/criar_oferta.py" "Velas de Natal"

以下の構造を作成(または既存を補完、削除はしません)します。

フォルダ内容
_work一時ファイル(最後にクリーンアップ)
01_prontos最終クリエイティブ .mp4 + lote_XX_resumo.csv
02_brutosBロール、参考動画
03_apresentadoraUGC・プレゼンター録画
04_imagens商品写真、ページスクリーンショット
05_audiosナレーション(<id>.mp3 + <id>.palavras.json)
06_efeitosキットの9つの効果音 + オプションの musica*.mp3(BGM)
07_roteirosスクリプトのロット .json
08_validados既に売れているクリエイティブ(モデリング/バリエーションのベース)

oferta.json を読み込んでください。produto/publico/promessa が空の場合は、ユーザーに質問するか(ユーザーがリンクを渡した場合はセールスページを読んで)入力してください。スクリプトはこれに依存します。

2. 4つの質問(AskUserQuestion の1回の呼び出し)

  1. モード — 「何をしますか?」
    • 新規クリエイティブ — 新しい角度やスクリプトをテスト
    • クリエイティブのモデリング — 既に売れている/スケールしているクリエイティブの構造を基に、ゼロから動画を作成(ユーザー自身のものか、市場のもの)
    • 検証済みのバリエーション — 検証済みの自分の動画を再利用し、フックだけを差し替え

注意 — 「この検証済みを改善してバリエーションを作って」: ユーザーが自分の売れているクリエイティブを送り、バリエーションや改善版を依頼した場合、デフォルトは モデリング(送られた動画は構造の参考としてのみ使い、新しいスクリプトと画像で全く新しい動画を作成)。「検証済みのバリエーション」(送られた動画の画像と音声を再利用)は、ユーザーが明示的に元の動画を保持するよう指示した場合のみ使用します。 2. 数量 — 「バリエーションはいくつ?」 5 / 10 / 20 / 50 3. 字幕 — 「字幕のスタイルは?」

  • 両方を使い分ける(推奨)— バリエーション間で紫のボックスと黄色の単語を交互に使用
  • 紫のボックス — 話された単語を紫のボックス内に表示
  • 黄色の単語 — 話された単語を黄色で、背景なしで表示
  1. ナレーション — 「新しいフックとボディのナレーションはどうしますか?」
    • 無料音声で生成(推奨)— ポルトガル語のニューラル音声、無料
    • ElevenLabs で生成 — ユーザーのアカウントを使用、クレジット消費
    • 既にナレーションがある — 05_audios に音声を配置

ユーザーがリクエストですでに答えている場合は、再度質問しないでください。

ElevenLabs: APIキーは ~/.config/editar-criativo/.env に保存します(ELEVENLABS_API_KEY= と、オプションで ELEVENLABS_VOICE_ID=)。ない場合は、メモ帳でファイルを開いて貼り付けるようユーザーに提案してください。キーを絶対に表示したり、シェルコマンドに含めたりしないでください。

3. ビジュアル素材

02_brutos、03_apresentadora、04_imagens をリストアップします。素材ソースの優先順位は以下の通りです。

  1. ユーザー自身の素材(商品写真/動画、ページ録画): 常に最良。
  2. 無料ストック(Pexels + Pixabay) — 補助的なBロール、商用利用可:
    python "$KIT/buscar_midias.py" "<oferta_folder>" "candle making" --qtd 6
    python "$KIT/buscar_midias.py" "<oferta_folder>" "christmas candle" --tipo foto --qtd 4
    
    • ナレーションで示される内容(工程、材料、結果、使用シーン、感情)をカバーする 英語 の用語で3~5回検索します。--listar でダウンロード前に確認できます。
    • ローカルライブラリを優先: すべてのダウンロードは ~/Documents/Ofertas/_biblioteca に保存されます(videos/、fotos/、indice.json(データベースのタグ+検索済み用語を含む))。各検索ではまずライブラリ内を探し、不足分だけAPIを呼び出します。ファイルはハードリンクでオファーに追加されるため、重複しません。--sem-api はライブラリのみ使用、--forcar-api はライブラリを無視します。そのため、オファー間で一貫した英語の用語を使用してください("stretching"、"back pain"、"yoga mat"...)。
    • デフォルト: 縦型を優先し、横型で補完します(キットが切り抜きます)。動画は最長40秒、各タイプ --qtd 個の新しいアイテム。動画は 02_brutos/、写真は 04_imagens/、クレジットは 02_brutos/creditos.csv(列 origem: ライブラリまたはデータベース)。
    • ダウンロード後、ランダム選択ではなく、各クリエイティブに適切なメディアを midias/midias_baixo に手動で選択してください。発話に合ったBロールはコンバージョンが高まります。
    • 証言を偽装するためにストック画像を使用しないでください。識別可能な人物がオファーを推奨しているように見えてはいけません。
    • 無料キーは ~/.config/editar-criativo/.env(PEXELS_API_KEY、PIXABAY_API_KEY)。ない場合はスクリプトが警告し、メモ帳で開いて貼り付けるようユーザーに提案します。一つだけでも動作します。(2026年11月、Pexelsは新規キー発行を停止しました。ユーザーは再開までPixabayのみ使用します。)
  3. ソーシャルメディアの参考(モデリング/バリエーション用)、ユーザーが承認したリンクを使用: python "$KIT/baixar.py" "<oferta_folder>" <url1> <url2> ... --pasta 08_validados。 ユーザーが使用権を持つ素材のみ使用してください。

Webアプリ/ページの画面録画: ユーザーが録画(Win+Alt+R)し、02_brutos に保存します。

4. モード別スクリプト作成

ブラジルポルトガル語で記述します(オファーがポルトガル向けの場合はポルトガルポルトガル語)。口語的なUGC調で、短い文を使います。

  • hook: 1文、6~14語、話して3秒以内。パターンを破る、好奇心、痛み、または結果。
  • gancho_tela: 赤い帯のテキスト、7語以内、hookを補完(繰り返さない)。
  • body: 話して15~35秒(約40~90語): 問題 → メカニズム/デモ → 証明 → CTA。
  • cta_tela(オプション): 最後の3秒間の緑の帯の短いテキスト(「LINK NA DESCRIÇÃO」)。
  • ロット内で角度を変える: 痛み、好奇心、ビフォーアフター、社会的証明、反論、デモ、価格/アンカリング、季節の緊急性、「よくある間違い」、リスト。同じ冒頭を繰り返さない。
  • 広告ポリシーを遵守: 治癒の約束、保証された収入、「あなたは [個人属性]」は禁止。

新規クリエイティブ: 異なる角度のN個のスクリプト。

クリエイティブのモデリング: 参考クリエイティブは 08_validados に配置(またはリンクからダウンロード)。文字起こし: python "$KIT/transcrever.py" "<arquivo>" — ビジュアル部分が重要な場合は、watch スキルで視聴。構造(フックの種類、各ブロックとその長さ、CTA)をマッピングし、このオファーに対して 同じ構造 でN個のスクリプトを作成します。テキストをコピーしないでください。参考動画のフレームや音声は新しい動画に一切使用しません。

モデリングのチェックリスト(ロットの estrutura_modelada にメモ):

  1. 長さとスピーチブロック — 例: フック 0~3.5秒 → 商品紹介 → ベネフィット → 価格付きCTA。
  2. ビジュアルフォーマット — 全画面または分割; 常に表示されているもの(デモ、プレゼンター、画面)。
  3. 売れる固定要素 — キットで再現:
    • 上部に固定された名前+価格の帯 → faixa_fixa(最初の1秒で広告感を出さないため、フックの後に配置);
    • エクササイズ/ステップ上のカウンター(「12 reps」、「8 x lado」) → rotulos;
    • 字幕スタイルと声の性別 → 検証済みと同じ legenda と voz。
  4. 価格とオファーは検証済みと正確に同じ(それが売れているものだから)。別途指示がある場合を除く。
  5. 検証済みが低CTRで売れている場合: ボディは機能しており、冒頭が指を止めていない。ボディの構造を維持し、フックに注力: 緊張、テスト(「tenta encaixar a mão no chão…」)、数字/カウント(「117 exercícios por menos de R$ 10」)、信念の打破。0秒からフック帯、フック用の独自画像を midias_gancho(コイン、骸骨、ジム)に、約1.8秒ごとにカット、Bロールが横型で全画面の場合 encaixe: "desfoque"。

検証済みのバリエーション(ユーザーが元の動画を保持したい場合のみ): 既に売れているクリエイティブを文字起こしし、元のフックが終了する場所(最初の文の終わり、通常2~5秒)を見つけ、N個の新しいフックを作成します。各クリエイティブには hook のみ(body はなし)と "base": {"video": "08_validados/arquivo.mp4", "a_partir_de": <segundos>} を含めます。キットが新しいフックのナレーションと元のフック後の元の音声を結合して動画を組み立てます。

  • a_partir_de はフック後の最初の単語の直前(無音部分をスキップ — 例: フック終了3.56秒、次の単語4.16秒 → 4.05)。transcrever.py で各単語のタイミングを取得します。
  • 元のナレーションと同じ性別の声を使用します(声が変わると継ぎ目が不自然)。検証済みに似た字幕がある場合は同じ字幕を使用。キットは新しいフックの音量を検証済みに自動調整します(LUFS)。
  • 低CTRで売れている = ボディは売れており、冒頭が指を止めていない: 最初の3~6秒のみ交換(緊張/テスト/数字のフック、0秒からのフック帯、約1.3秒ごとのカット、"ritmo": 1.3)。

5. スクリプトのロット

<oferta>/07_roteiros/lote_NN.json に保存(次の空き番号):

{
  "modo": "novos",
  "legenda": "variar",
  "narracao": {"motor": "edge", "voz": "pt-BR-AntonioNeural", "velocidade": "+8%"},
  "criativos": [
    {
      "id": "c01",
      "angulo": "curiosidade",
      "layout": "dividida",
      "hook": "Ninguém acredita que essa vela foi feita em casa.",
      "gancho_tela": "Ninguém acredita que foi feita em casa",
      "body": "Eu comecei com uma panela comum e um pote de vidro...",
      "cta_tela": "Link na bio",
      "midias": ["02_brutos/x.mp4", "04_imagens/y.jpg"],
      "midias_baixo": ["02_brutos/z.mp4"]
    }
  ]
}

フィールド:

  • legenda: variar | caixa_roxa | palavra_amarela(クリエイティブごとに legenda を指定することも可能)。
  • narracao.motor: edge(無料) | eleven | existente(05_audios/<id>.mp3 を読み込み文字起こし)。 Edge の声: pt-BR-AntonioNeural、pt-BR-FranciscaNeural、pt-BR-ThalitaMultilingualNeural、 pt-PT-DuarteNeural、pt-PT-RaquelNeural。クリエイティブ間で男性/女性の声を交互に使用(クリエイティブに "voz" を指定)。
  • layout: dividida(赤い線で分割画面、デフォルト) | cheia。
  • midias / midias_baixo: オプション。指定しない場合、キットは 02_brutos、04_imagens、03_apresentadora からランダムに選択(上半分、下半分)。発話に合うメディアがある場合は手動で選択してください。
  • ritmo: カット間の秒数(デフォルト 2.2)。sfx: false で効果音オフ。musica: false でBGMオフ。
  • gancho_duracao: フック帯を画面に表示する時間を強制(デフォルト: フックが話し終わるまで)。
  • midias_gancho(全画面): フック中のみ使用するメディア。ボディは midias のみ使用。フックのインパクト画像(コイン、骸骨など)が動画の途中で再表示されるのを防ぎます。キットは常にフック終了時にカットします。
  • faixa_fixa: {"texto": "117 Exercícios de\nMobilidade e Estabilidade\nApenas R$ 9,90", "cor": "#F97316", "cor_texto": "#111111", "desde": "fim_hook", "y": 0.07, "tamanho": 66, "caixa_alta": false} — フック終了から終わりまで(または fechamento まで)表示される帯。\n で改行。texto のみ必須。
  • rotulos: ["12 reps", "8 x lado", "30 seg"] — フック後の各カット上に表示される小さなラベル、循環。
  • encaixe: corte(デフォルト、中央を切り抜き) | desfoque — 全画面で、横型動画をぼかした背景の上に幅広の帯として表示、動きを失わない(エクササイズデモに有効)。

ID: 新規クリエイティブは c01…cNN、モデリングは m01…、バリエーションは v01… — オファー内で一意(05_audios/<id> と 01_prontos/<id>.mp4 が ID を使用するため)。新しいロットでは番号を継続。

ユーザーに短い表(id、角度、フック)を表示し、レンダリングに進みます(ただしユーザーが事前に確認を依頼した場合は除く)。

6. レンダリング

python "$KIT/montar.py" "<oferta>/07_roteiros/lote_NN.json"

ネットワーク: 無料音声(edge)と ElevenLabs はインターネット接続が必要です。シェルがサンドボックス内にあり、getaddrinfo failed / ClientConnectorDNSError でナレーションが失敗した場合は、コマンドをサンドボックス外で実行してください。無料音声は断続的に失敗します。キットはそのクリエイティブを諦める前に5回再試行します(他のクリエイティブは続行)。

まだナレーションがないものをナレーションし、すべてを 01_prontos/<id>.mp4(1080x1920、30fps、H.264 + AAC)に出力。さらに 01_prontos/lote_NN_resumo.csv を出力。大きなロットは時間がかかります(クリエイティブあたり約20~60秒): バックグラウンドで実行してください。--ids c03,c07 で一部のみ再実行、narrar.py --refazer --ids c03 で音声を再生成。

7. 確認と納品

2~3個のクリエイティブから1フレーム抽出し、Readで確認: ffmpeg -ss 1.5 -i "01_prontos/c01.mp4" -frames:v 1 "_work/check_c01.jpg" 確認項目: フック帯が読めるか、字幕が同期して画面内に収まっているか、カットに黒画面がないか。 納品: 01_prontos フォルダ、数量、そして管理画面で広告に名前を付けるためのCSV。

関連スキル