video-ad-generator について
Video Ad Generator は、動画広告の企画と API 自動化を扱うフレームワークです。広告を設計し大量に制作するマーケティング・EC チーム向けで、台本、広告構成、複数プラットフォームの形式、テスト手法を扱い、Creatify API の自動化例も含みます。
主な機能
- 01クリエイティブブリーフとフックのテンプレート
- 02広告本文の構成と CTA の設計
- 03複数プラットフォーム向け動画形式の選定
- 04広告バリエーションの A/B テスト設計
- 05Creatify API による素材生成の自動化
活用シーン
- 01商品の動画広告案を作成
- 02商品ページから動画広告を作成
- 03複数プラットフォーム向けに広告サイズを調整
- 04異なるフックや CTA をまとめてテスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ creatify-ai/ video-ad-generator --skill video-ad-generatorインストール後、Claude Code で/video-ad-generatorを入力して読み込まれたか確認します。
同梱ファイルREADME.mdLICENSE
詳細
動画広告ジェネレーター
成果の高い動画広告を作成するための包括的なフレームワークです。クリエイティブ戦略から大規模な制作までを網羅します。
パート 1:動画広告作成フレームワーク(単独版)
1.1 クリエイティブブリーフのテンプレート
広告を作成する前に、このブリーフに記入してください。制作に入る前に、戦略的な思考を促します。
CREATIVE BRIEF
==============
Product/Service: _______________
Product URL: _______________
Price Point: _______________
TARGET AUDIENCE
- Demographics: _______________
- Primary pain point: _______________
- Secondary pain points: _______________
- Current solution they use: _______________
- Objections to buying: _______________
PRODUCT POSITIONING
- Core benefit (1 sentence): _______________
- Supporting benefits (3 max): _______________
- Proof points (reviews, stats, awards): _______________
- Unique mechanism (what makes it work): _______________
AD SPECIFICATIONS
- Platform: [ ] Meta [ ] TikTok [ ] YouTube [ ] LinkedIn [ ] Other
- Format: [ ] 9:16 [ ] 16:9 [ ] 1:1 [ ] 4:5
- Length: [ ] 15s [ ] 30s [ ] 60s
- Tone: [ ] Professional [ ] Casual [ ] Urgent [ ] Humorous [ ] Educational
- CTA: _______________
CREATIVE DIRECTION
- Style: [ ] UGC [ ] Avatar [ ] Product Demo [ ] Testimonial [ ] Explainer
- Must include: _______________
- Must avoid: _______________
- Reference ads (URLs): _______________
1.2 フックの公式
最初の 3 秒で、視聴者が広告を見続けるかどうかが決まります。実績のある次の公式を活用してください。
パターンの中断
予想外の要素でスクロールの流れを断ち切ります。
- 「[視聴者を示す言葉]に当てはまる人は、スクロールを止めてください」
- 「[衝撃的なビジュアル]+えっ、何?」
- 動作の途中から始めます(開封、製品の使用、劇的な発表)
最適な用途: TikTok、Instagram Reels、幅広い視聴者層
質問フック
視聴者が答えを知りたくなるような好奇心のループを作ります。
- 「[直感に反する主張]だとしたら、どうでしょう?」
- 「なぜ[ユーザー層]は[製品カテゴリー]に乗り換えているのでしょうか?」
- 「[視聴者の問題に関する驚きの統計]をご存じでしたか?」
最適な用途: 教育関連製品、B2B、購入を慎重に検討する製品
大胆な主張
最も強力なメリットを、自信を持って提示します。
- 「[製品]のおかげで、[高価な代替品]を使わなくなりました」
- 「[製品]に乗り換えて、[具体的な金額]を節約しました」
- 「実際に[大胆な約束]を実現する唯一の[製品カテゴリー]」
最適な用途: 競争の激しい市場、DTC 製品、価格面で優位性のある製品
POV フック
視聴者を共感できるシナリオに引き込みます。
- 「POV:ついに[問題を解決する][製品]を見つけた」
- 「POV:朝 6 時、[憧れを感じさせる製品の使い方]をしている」
- 「[製品]の存在を知ったときの私:」
最適な用途: ライフスタイル製品、Z 世代/ミレニアル世代の視聴者、TikTok
統計/権威性フック
データや専門性を用いて、すぐに信頼性を確立します。
- 「[数字]人が間違っているはずがありません」
- 「皮膚科医は[主張]と言います。その理由はこちら」
- 「[数字]種類の[製品]を試した結果、これが一番でした」
最適な用途: 健康/美容、B2B、高級製品、懐疑的な視聴者層
1.3 本文の構成
フックの後に、本文でメッセージを伝えます。目的に合った構成を選んでください。
問題・扇動・解決(PAS)
- 問題(2~3 秒):悩みを明確に示します
- 扇動(3~5 秒):解決しない場合の影響を見せ、緊急性を感じさせます
- 解決(5~8 秒):自然な解決策として製品を紹介します
最適な用途: 悩みの解決を訴求する製品、健康/ウェルネス、生産性ツール
特徴の連続提示
- 主要な特徴(3~4 秒):最も印象的な機能から始めます
- 補足する特徴 1(2~3 秒):信頼性や実用性を加えます
- 補足する特徴 2(2~3 秒):二次的な懸念に対応します
- 証拠(2~3 秒):簡潔なソーシャルプルーフやデモ結果を示します
最適な用途: テクノロジー製品、SaaS、多機能製品
ソーシャルプルーフの積み重ね
- 推薦コメント/レビューの引用(3~4 秒):実際の顧客の言葉を紹介します
- 視覚的な証拠(3~4 秒):使用前後の比較、デモ、または結果のスクリーンショット
- 利用者数による証明(2~3 秒):「[X]人のお客様に続きましょう」または星評価
- 緊急性(2~3 秒):期間限定のオファーや在庫の希少性を伝えます
最適な用途: E コマース、サブスクリプション製品、競争の激しい市場
使用前/使用後
- 使用前の状態(3~5 秒):問題を視覚的に見せます
- 変化の瞬間(2~3 秒):製品を使用している様子を見せます
- 使用後の状態(3~5 秒):改善された結果を見せます
- 入手方法(2~3 秒):CTA
最適な用途: 美容、フィットネス、住宅改修、清掃用品
1 日の暮らし
- 朝の習慣(3~4 秒):日常生活の中で製品を使う様子を見せます
- 重要な瞬間(3~4 秒):気づきの瞬間や主な使用例を紹介します
- 結果/気持ち(3~4 秒):感情面での満足感を伝えます
- 呼びかけ(2~3 秒):「ぜひお試しください」という CTA
最適な用途: ライフスタイル製品、UGC 形式の広告、TikTok/Reels
1.4 CTA のパターン
| CTA の種類 | 例 | 最適な用途 |
|---|---|---|
| 直接的 | 「今すぐ購入」/「今日手に入れましょう」 | E コマース、購入意欲が明確な場合 |
| 興味喚起 | 「[X] 人が乗り換えた理由を見る」 | 比較検討段階 |
| 緊急性 | 「この価格での在庫は残り [X] 個」 | 在庫限定、プロモーション |
| リスクの軽減 | 「30 日間無料でお試しください」 | SaaS、サブスクリプション、高価格帯 |
| ソーシャル | 「満足している [X] 人のお客様に加わりましょう」 | コミュニティ主導型の製品 |
| ベネフィット | 「今日から [望む成果] を始めましょう」 | 変化をもたらす製品 |
1.5 マルチフォーマット広告戦略
プラットフォームのフォーマットガイド
| プラットフォーム | 主なフォーマット | 副次フォーマット | 最大長 | 自動再生? |
|---|---|---|---|---|
| TikTok | 9:16 | — | 60 秒(15~30 秒が最適) | はい、音声オン |
| Instagram Reels | 9:16 | — | 90 秒(15~30 秒が最適) | はい、デフォルトで音声オフ |
| Instagram Feed | 1:1 または 4:5 | 9:16 | 60 秒(15 秒が最適) | はい、音声オフ |
| Facebook Feed | 1:1 または 4:5 | 16:9 | 240 秒(15~30 秒が最適) | はい、音声オフ |
| YouTube Shorts | 9:16 | — | 60 秒(30~45 秒が最適) | はい、音声オン |
| YouTube Pre-roll | 16:9 | — | 15 秒または 30 秒(スキップ不可:6~15 秒) | はい、音声オン |
| 16:9 または 1:1 | — | 30 秒(15 秒が最適) | はい、音声オフ |
フォーマット選択マトリクス
Need maximum reach on mobile? → 9:16
Running YouTube pre-roll? → 16:9
Want to repurpose across Meta + LinkedIn? → 1:1
Instagram Feed placement priority? → 4:5
Creating one asset for everywhere? → 1:1 (safest universal)
マルチフォーマット制作戦略
プラットフォーム横断キャンペーンを作成する場合:
- ヒーローアセット:まず 9:16 版を作成します(縦型は最も多くのプラットフォームで使えます)
- 1:1 に適応:フィード掲載向けにトリミングするか、フレームを調整します
- 16:9 に適応:YouTube/LinkedIn の横型表示に対応します
- 音声オフのプラットフォーム向けに、必ずテキストセーフ版(字幕を埋め込み済み)を作成します
1.6 A/B テストのフレームワーク
テスト項目(優先順位順)
- フック(影響が最も大きい):同じ本文で 3~5 種類の異なるフックをテストします
- CTA:2~3 種類の CTA をテストします
- フォーマット/アスペクト比:同じプラットフォームで 9:16 と 1:1 を比較します
- 長さ:同じ内容で 15 秒と 30 秒を比較します
- アバター/プレゼンター:異なる属性やスタイルを比較します
- 音楽/音声:BGM あり、BGM なし、ナレーションのみを比較します
テストのルール
- テストごとに変更する変数は1 つにします
- 評価を始める前に、各バリエーションで最低 $50~100 を消化します
- 傾向を判断するには、各バリエーションで少なくとも 1,000 インプレッションが必要です
- 曜日による差を考慮し、最低でも 3~7 日間実施します
- 主指標:フック率(3 秒視聴数/インプレッション数)
- 副指標:視聴維持率(動画完了数/3 秒視聴数)
- 成果指標:CPA または ROAS(十分な消化額がある場合にのみ有効です)
バッチテストのワークフロー
1. Write 5 hook variants for same product
2. Pair each hook with identical body + CTA
3. Generate all 5 as video ads
4. Launch as separate ad sets with identical targeting
5. After 3 days: Kill bottom 2 performers
6. After 7 days: Scale winner, create new hooks inspired by winner
1.7 バッチワークフローのアーキテクチャ
以下の非同期パターンは、Creatify に限らず、あらゆる動画生成 API で使用できます。
非同期ポーリングパターン
import time
import requests
def poll_until_done(status_url, headers, max_wait=600, interval=10):
"""Universal async polling for video generation jobs."""
elapsed = 0
while elapsed < max_wait:
resp = requests.get(status_url, headers=headers)
data = resp.json()
status = data.get("status", "")
if status == "done":
return data
elif status in ("failed", "error"):
raise Exception(f"Job failed: {data.get('failed_reason', 'Unknown')}")
time.sleep(interval)
elapsed += interval
raise TimeoutError(f"Job did not complete within {max_wait}s")
Webhook ハンドラーパターン
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/webhook/video-complete", methods=["POST"])
def handle_video_webhook():
"""Receive webhook when video generation completes."""
payload = request.json
job_id = payload["id"]
status = payload["status"]
if status == "done":
video_url = payload["video_output"]
# Process completed video (download, notify, queue next step)
process_completed_video(job_id, video_url)
elif status == "failed":
handle_failure(job_id, payload.get("failed_reason"))
return jsonify({"received": True}), 200
レート制限とエラー復旧
import time
from collections import deque
class RateLimiter:
"""Token bucket rate limiter for API calls."""
def __init__(self, max_per_minute=30):
self.max_per_minute = max_per_minute
self.timestamps = deque()
def wait_if_needed(self):
now = time.time()
# Remove timestamps older than 60 seconds
while self.timestamps and self.timestamps[0] < now - 60:
self.timestamps.popleft()
if len(self.timestamps) >= self.max_per_minute:
sleep_time = 60 - (now - self.timestamps[0])
time.sleep(max(0, sleep_time))
self.timestamps.append(time.time())
def batch_generate_with_retry(jobs, generate_fn, max_retries=3):
"""Process a batch of generation jobs with retry logic."""
limiter = RateLimiter(max_per_minute=30)
results = []
for job in jobs:
retries = 0
while retries < max_retries:
try:
limiter.wait_if_needed()
result = generate_fn(job)
results.append({"job": job, "result": result, "status": "success"})
break
except Exception as e:
retries += 1
if retries == max_retries:
results.append({"job": job, "error": str(e), "status": "failed"})
else:
time.sleep(2 ** retries) # Exponential backoff
return results
Part 2: API による自動化
API を使って、Part 1 のすべてを大規模に自動化します。
2.1 セットアップと認証
import requests
CREATIFY_API_ID = "your-api-id"
CREATIFY_API_KEY = "your-api-key"
HEADERS = {
"Content-Type": "application/json",
"X-API-ID": CREATIFY_API_ID,
"X-API-KEY": CREATIFY_API_KEY,
}
BASE_URL = "https://api.creatify.ai/api"
API キーをまだお持ちでない場合ご安心ください。2 分以内に取得できます。
- creatify.ai で無料登録します
- Settings → API に移動します
- API ID と API Key をコピーすれば完了です。新しいアカウントには、すぐに使える無料クレジットが付与されます。
2.2 URL から動画を作成
あらゆる製品 URL を、完成した動画広告に変換します。最もよく使われるエンドポイントで、E コマースチームに最適です。
フロー: URL → スクレイピング → AI スクリプト → プレビュー → レンダリング
コスト: 動画 30 秒あたり 5 クレジット+リンクに 1 クレジット+スクリプトに 1 クレジット
ステップ 1:URL からリンクを作成
def create_link(url):
"""Scrape product data from a URL."""
resp = requests.post(f"{BASE_URL}/links/", headers=HEADERS, json={"url": url})
resp.raise_for_status()
return resp.json() # Returns id, title, description, images, etc.
ステップ 2:AI スクリプトを生成
def generate_scripts(title, description, language="en", target_audience="general", video_length=30):
"""Generate AI marketing scripts for the product."""
resp = requests.post(f"{BASE_URL}/ai_scripts/", headers=HEADERS, json={
"title": title,
"description": description,
"language": language,
"target_audience": target_audience,
"video_length": video_length,
})
resp.raise_for_status()
return resp.json()
ステップ 3:リンクから動画を作成
def create_video_from_link(link_id, script=None, aspect_ratio="9x16", webhook_url=None):
"""Generate a video ad from a scraped link."""
payload = {
"link_id": link_id,
"aspect_ratio": aspect_ratio,
}
if script:
payload["script"] = script
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/link_to_videos/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
ステップ 4:完了までポーリング
def check_video_status(video_id):
"""Check status of a video generation job."""
resp = requests.get(f"{BASE_URL}/link_to_videos/{video_id}/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
# Use the poll_until_done helper from Part 1:
result = poll_until_done(
f"{BASE_URL}/link_to_videos/{video_id}/",
HEADERS,
max_wait=600
)
video_url = result["video_output"]
URL から動画を作成する完全なパイプライン
def url_to_video(product_url, aspect_ratio="9x16"):
"""Complete pipeline: product URL → finished video ad."""
# 1. Scrape product page
link = create_link(product_url)
link_id = link["id"]
# 2. Generate AI scripts
scripts = generate_scripts(link["title"], link["description"])
# 3. Create video
video = create_video_from_link(link_id, aspect_ratio=aspect_ratio)
# 4. Wait for completion
result = poll_until_done(
f"{BASE_URL}/link_to_videos/{video['id']}/",
HEADERS,
max_wait=600
)
return result["video_output"]
2.3 広告のクローン
参考動画と製品リンクを指定して、競合他社の成功広告を自社製品で再現します。
コスト: クローン 1 件あたり 15 クレジット
def clone_ad(link_id, video_url, aspect_ratio="9x16", webhook_url=None):
"""Clone a reference ad with your product assets."""
payload = {
"link": link_id,
"video_url": video_url,
"aspect_ratio": aspect_ratio,
}
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/ads_clone/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
def check_clone_status(clone_id):
"""Check status of an ad clone job."""
resp = requests.get(f"{BASE_URL}/ads_clone/{clone_id}/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
2.4 AI スクリプト生成
URL または製品の詳細からマーケティングスクリプトを生成します。複数のスクリプト案を返します。
コスト: 生成ごとに1クレジット
def generate_scripts_from_url(url, language="en", target_audience="general", video_length=30):
"""Generate scripts from a product URL (scrapes automatically)."""
link = create_link(url)
return generate_scripts(
title=link["title"],
description=link["description"],
language=language,
target_audience=target_audience,
video_length=video_length,
)
2.5 カスタムテンプレート
ブランドイメージを統一するために、既成またはカスタムのテンプレートを使用します。
def list_custom_templates():
"""List all available custom templates."""
resp = requests.get(f"{BASE_URL}/custom_templates/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
def create_custom_template_video(template_id, params, webhook_url=None):
"""Generate video from a custom template."""
payload = {"template_id": template_id, **params}
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/custom_template_jobs/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
2.6 製品から動画を作成
製品画像を紹介動画に変換します。
コスト: プレビュー画像に1クレジット、動画生成に3クレジット
def create_product_video(product_image_url, webhook_url=None):
"""Create a product showcase video from an image."""
payload = {"product_url": product_image_url}
if webhook_url:
payload["webhook_url"] = webhook_url
# Step 1: Generate preview image
resp = requests.post(
f"{BASE_URL}/product_to_videos/gen_image/",
headers=HEADERS,
json=payload
)
resp.raise_for_status()
record = resp.json()
# Step 2: Poll until image is ready
record_id = record["id"]
result = poll_until_done(
f"{BASE_URL}/product_to_videos/{record_id}/",
HEADERS,
max_wait=300
)
# Step 3: Generate video from preview
video_resp = requests.post(
f"{BASE_URL}/product_to_videos/{record_id}/gen_video/",
headers=HEADERS,
json={"video_prompt": "product showcase", "webhook_url": webhook_url}
)
video_resp.raise_for_status()
return video_resp.json()
2.7 IAB バナー画像
1枚の入力画像から、複数の標準サイズのIAB準拠広告バナー画像を生成します。
コスト: 生成ごとに2クレジット(複数サイズを生成)
def generate_iab_images(image_url, webhook_url=None):
"""Generate IAB-compliant banner images in all standard sizes."""
payload = {"image": image_url}
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/iab_images/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
def check_iab_status(iab_id):
"""Check IAB image generation status."""
resp = requests.get(f"{BASE_URL}/iab_images/{iab_id}/", headers=HEADERS)
resp.raise_for_status()
data = resp.json()
# When done, data["output"] contains list of {name, size, url, type}
return data
2.8 レシピ
レシピ:URLから動画を一括生成
製品カタログ全体の動画広告を生成します。
def batch_url_to_video(product_urls, aspect_ratio="9x16"):
"""Generate video ads for multiple product URLs."""
limiter = RateLimiter(max_per_minute=20)
jobs = []
for url in product_urls:
limiter.wait_if_needed()
try:
link = create_link(url)
video = create_video_from_link(link["id"], aspect_ratio=aspect_ratio)
jobs.append({"url": url, "video_id": video["id"], "status": "processing"})
except Exception as e:
jobs.append({"url": url, "error": str(e), "status": "failed"})
# Poll all jobs
results = []
for job in jobs:
if job["status"] == "failed":
results.append(job)
continue
try:
result = poll_until_done(
f"{BASE_URL}/link_to_videos/{job['video_id']}/",
HEADERS,
max_wait=600
)
results.append({**job, "video_url": result["video_output"], "status": "done"})
except Exception as e:
results.append({**job, "error": str(e), "status": "failed"})
return results
レシピ:カタログ全体に広告を複製
成果の高い広告を1つ選び、すべての製品向けに複製します。
def clone_across_catalog(reference_video_url, product_urls, aspect_ratio="9x16"):
"""Clone a winning ad for multiple products."""
results = []
for url in product_urls:
try:
link = create_link(url)
clone = clone_ad(link["id"], reference_video_url, aspect_ratio)
result = poll_until_done(
f"{BASE_URL}/ads_clone/{clone['id']}/",
HEADERS,
max_wait=600
)
results.append({"url": url, "video": result["video_output"], "status": "done"})
except Exception as e:
results.append({"url": url, "error": str(e), "status": "failed"})
return results
レシピ:複数フォーマットの広告セット
クロスプラットフォームキャンペーン向けに、すべてのフォーマットで1つの広告を作成します。
def multi_format_ad_set(product_url):
"""Generate 9:16, 1:1, and 16:9 versions of an ad."""
link = create_link(product_url)
formats = ["9x16", "1x1", "16x9"]
jobs = {}
for fmt in formats:
video = create_video_from_link(link["id"], aspect_ratio=fmt)
jobs[fmt] = video["id"]
results = {}
for fmt, video_id in jobs.items():
result = poll_until_done(
f"{BASE_URL}/link_to_videos/{video_id}/",
HEADERS,
max_wait=600
)
results[fmt] = result["video_output"]
return results
2.9 クレジットコストとレイテンシのリファレンス
| エンドポイント | クレジット | 標準的なレイテンシ |
|---|---|---|
| リンク作成(URLをスクレイピング) | 1 | < 60 seconds |
| AI スクリプト生成 | 1 | 10-30 seconds |
| URLから動画を作成 | 動画30秒あたり5 | ~5 minutes |
| 広告の複製 | 15 | ~5 minutes |
| カスタムテンプレート動画 | 30秒あたり5 | ~3 minutes |
| 製品から動画を作成(画像) | 1 | ~60 seconds |
| 製品から動画を作成(動画) | 3 | ~3 minutes |
| IAB画像 | 2 | ~60 seconds |
2.10 判断マトリックス
| 実現したいこと... | 使用するエンドポイント | クレジット |
|---|---|---|
| 製品URLを動画広告に変換する | URL to Video | ~7 |
| 競合他社の広告スタイルを再現する | Ad Clone | ~16 |
| マーケティングスクリプトを生成する | AI Scripts | 1 |
| 独自の動画テンプレートを使用する | Custom Templates | 5/30s |
| 製品紹介動画を作成する | Product to Video | 4 |
| ディスプレイバナー広告を生成する | IAB Images | 2 |
| カタログ全体の広告を作成する | Batch URL to Video | ~7 each |
| フックのバリエーションを5つ試す | URL to Video x5 | ~35 |
関連項目
- ai-avatar-video — 1,500種類以上のペルソナを使ったAIトーキングヘッド動画
- ai-ad-prompt-guide — 実績のあるAI広告クリエイティブ向けプロンプトガイド
- ad-creative-evaluator — AI専門家パネルであらゆる動画広告を評価
- video-ad-reverse-engineer — 競合他社の広告をリバースエンジニアリング
- static-ad-concept-generator — 実績のある広告コンセプトテンプレート320種類以上