ショート動画の台本をAIで自動生成する方法【ClaudeCode実例×TikTok・Reels対応】

ショート動画台本AI自動生成

TikTok・Instagram Reels・YouTubeショートで再生数を伸ばすには「最初の3秒」と「構成の型」が決定的な差を生む。ClaudeCodeを使って、プラットフォームごとの最適な台本を自動生成するシステムを構築する方法を解説する。

ショート動画台本の基本構成(バイラル型)

時間役割内容例
0〜3秒フック「これ知らないと絶対損する」「実は〇〇だった」
4〜15秒問題提起視聴者の共感できる悩みを提示
16〜45秒解決策具体的な情報・手順・ノウハウ
46〜55秒まとめ要点の再確認、数字で締める
56〜60秒CTA「フォロー」「保存」「コメント」誘導

ClaudeCodeで台本自動生成スクリプトを作る

import anthropic
import json

def generate_short_script(
    topic: str,
    platform: str = "tiktok",  # tiktok / reels / youtube-shorts
    duration: int = 60,          # 秒数
    style: str = "educational"   # educational / entertainment / tutorial
) -> dict:
    """ショート動画台本をClaudeで自動生成する"""

    client = anthropic.Anthropic()

    platform_rules = {
        "tiktok": "テンポが速く、トレンドの言葉を使う。Z世代向けのカジュアルな語り口。",
        "reels": "ビジュアル重視。テキストオーバーレイを意識した短い文章。おしゃれ・映え意識。",
        "youtube-shorts": "検索されやすいキーワードを冒頭に入れる。情報量を重視した実用的な内容。"
    }

    msg = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=2000,
        messages=[{
            "role": "user",
            "content": f"""以下の条件でショート動画の台本を作成してください。

トピック:{topic}
プラットフォーム:{platform}
動画尺:{duration}秒
スタイル:{style}
プラットフォームルール:{platform_rules.get(platform, '')}

出力形式(JSON):
{{
  "title": "動画タイトル(40文字以内)",
  "hook": "最初の3秒のセリフ(インパクト重視)",
  "sections": [
    {{
      "time": "開始時間-終了時間(例: 0-3秒)",
      "role": "セクションの役割",
      "script": "実際のセリフ・ナレーション",
      "visual": "映像・テロップの指示"
    }}
  ],
  "hashtags": ["ハッシュタグ1", "ハッシュタグ2"],
  "cta": "エンディングの行動喚起",
  "estimated_views_score": 1-10(バイラル予測スコア)
}}"""
        }]
    )

    text = msg.content[0].text
    import re
    json_match = re.search(r'{.*}', text, re.DOTALL)
    if json_match:
        return json.loads(json_match.group())
    return {"error": "JSON parse failed", "raw": text}


# 実行例
script = generate_short_script(
    topic="AfterEffectsの無料テンプレートの見つけ方",
    platform="youtube-shorts",
    duration=60,
    style="tutorial"
)
print(json.dumps(script, ensure_ascii=False, indent=2))

生成結果の例

{
  "title": "AEテンプレートを無料で手に入れる3つの方法",
  "hook": "AfterEffectsのテンプレート、まだ有料で買ってるの?",
  "sections": [
    {
      "time": "0-3秒",
      "role": "フック",
      "script": "AfterEffectsのテンプレート、まだ有料で買ってるの?無料で手に入る方法が3つあります",
      "visual": "テキスト大文字で「無料」を強調表示"
    },
    {
      "time": "4-20秒",
      "role": "方法1",
      "script": "1つ目はMotionArray。毎月無料テンプレートが追加されます。サイトに行って「Free」フィルターをかけるだけ",
      "visual": "MotionArrayサイトの画面録画、フィルター操作をハイライト"
    }
  ],
  "hashtags": ["AfterEffects", "動画編集", "無料素材", "映像制作"],
  "cta": "他にも動画編集の裏技を発信してます。フォローして見逃さないで!",
  "estimated_views_score": 7
}

複数台本を一括生成してCSVに出力する

import csv
import time

topics = [
    ("動画のカット編集を3倍速くする方法", "youtube-shorts", "tutorial"),
    ("TikTokのアルゴリズムを攻略する投稿時間", "tiktok", "educational"),
    ("Reelsで1万再生を取るためのフック10選", "reels", "educational"),
    ("字幕を自動生成する無料ツール比較", "youtube-shorts", "tutorial"),
]

results = []
for topic, platform, style in topics:
    script = generate_short_script(topic, platform, 60, style)
    results.append({
        "topic": topic,
        "platform": platform,
        "title": script.get("title", ""),
        "hook": script.get("hook", ""),
        "cta": script.get("cta", ""),
        "score": script.get("estimated_views_score", 0),
        "hashtags": " ".join(script.get("hashtags", []))
    })
    time.sleep(1)  # API制限を考慮

with open("scripts_output.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.DictWriter(f, fieldnames=results[0].keys())
    writer.writeheader()
    writer.writerows(results)

print(f"{len(results)}件の台本を生成しました")

フックのA/Bテスト自動化

同じトピックで複数のフックを生成し、投稿後のパフォーマンスを比較する。

def generate_hook_variants(topic: str, count: int = 5) -> list:
    """同じトピックで異なるフックを複数生成する"""
    client = anthropic.Anthropic()
    msg = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1000,
        messages=[{
            "role": "user",
            "content": f"""「{topic}」についてのショート動画のフック(最初の3秒のセリフ)を{count}パターン作成してください。

パターン別に異なるアプローチで:
1. 数字を使ったフック
2. 疑問形のフック
3. 意外性・驚きのフック
4. 共感を呼ぶフック
5. 否定形のフック

JSON配列で出力:["フック1", "フック2", ...]"""
        }]
    )
    import re, json
    text = msg.content[0].text
    arr_match = re.search(r'[.*]', text, re.DOTALL)
    return json.loads(arr_match.group()) if arr_match else []

hooks = generate_hook_variants("動画編集の時短テクニック")
for i, hook in enumerate(hooks, 1):
    print(f"パターン{i}: {hook}")

プラットフォームごとの最適化ポイント

  • TikTok:音楽との同期が重要。台本にビート合わせの指示を入れると効果的
  • Instagram Reels:テキストオーバーレイが多い視聴者(音なし視聴)向けにテロップ指示を充実させる
  • YouTubeショート:検索流入を意識し、冒頭にキーワードを自然に盛り込む

まとめ

ClaudeCodeを使った台本自動生成は、月に数十本のショート動画を運用するクリエイターにとって制作時間を大幅に短縮できる。特に「フックの複数生成→A/Bテスト」のサイクルを自動化することで、データドリブンにバイラルコンテンツを量産できるようになる。まずは自分のジャンルで5本分の台本を一括生成してみてほしい。

あわせて読みたい

ツール導入で終わらない「本当のDX」を、一緒に作りませんか

AE→Lottie→Remotionの動画自動生成から、業務プロセス全体の自動化まで。
自分で作って動かしている仕組みを、あなたのビジネスにも実装します。

プロダクト・サービス一覧開発実績を見る
タイトルとURLをコピーしました