# 9:16 Short Video Analysis Workflow

作成日: 2026-06-17

対象: `/Users/s30519/Downloads/Kalodata20260616movie` のローカル動画10本

## 1. 結論

Gemma4は「動画の意味補助」には使えるが、「演者性別」「ナレーション性別」を自動で確定する最終判定器にはしない。

今回の設計では、Gemma4は以下を補助抽出する。

- 演者の見え方: 顔出し、手元のみ、商品中心、混合
- 顔の見え方: 明確、一部、なし
- 話し方の見え方: 本人が話す構成、VO寄り、テキスト主導
- 演出型: 個人レビュー、使い方/実演、開封、オファー訴求など
- 役割: creator testimonial, product close-up review など

一方、以下は人間レビューで決定する。

- 演者性別
- ナレーション性別
- 判定根拠メモ

理由は、性別は本人の性自認ではなく広告分析上の分類として扱う必要があり、顔や声だけで自動断定すると誤判定と運用リスクが高いから。Gemma4の出力は補助材料として使い、最終分類はレビュー担当者が決める。

## 2. データフロー

```mermaid
flowchart LR
  A["Local MP4 files"] --> B["ffmpeg / ffprobe"]
  A --> C["Frame sampling"]
  A --> D["Audio window analysis"]
  C --> E["OCR"]
  C --> F["Gemma4 vision annotation"]
  B --> G["Deterministic metrics JSON"]
  D --> G
  E --> H["OCR snippets / product candidates"]
  F --> I["VLM basics: performer visibility, face visibility, delivery style"]
  G --> J["Dashboard data model"]
  H --> J
  I --> J
  J --> K["Reviewer dashboard"]
  K --> L["Human decisions: performer gender, narration gender, notes"]
  L --> M["Review JSON export"]
```

## 3. 処理レイヤー

### Layer 1: Deterministic video metrics

使用ツール: `ffprobe`, `ffmpeg`, Python, Pillow

目的: モデルに頼らず、動画ファイルから安定して取れる指標を作る。

出力例:

- 尺
- 解像度
- FPS
- カット頻度
- 初回カット秒
- 1fps動き量
- 高モーション率
- テキスト/字幕proxy
- 商品接写proxy
- 手元実演proxy
- 音声アクティブ率
- 明るさ、彩度、中心ディテール

使い道:

- 大量動画を同じ基準で比較する
- 勝ちパターン候補の初期タグを作る
- VLMに渡す動画を絞る

### Layer 2: OCR / text extraction

使用ツール: Tesseract OCR

目的: 画面上の字幕、商品名、価格、CTA、問題提起ワードを拾う。

出力例:

- OCR断片
- 商品名候補
- offer / problem / how-to / PR 文言フラグ

注意:

- OCRはノイズが多い
- 商品名は確定値ではなく候補
- 商品マスター照合または人間確認が必要

### Layer 3: Gemma4 VLM assistance

使用モデル: `gemma4:12b`

目的: 数値やOCRだけでは取れない「構成の意味」を補助する。

出力例:

- `performer_visibility`
- `face_visibility`
- `presenter_count_visible`
- `speaking_setup_visual`
- `delivery_style_visible`
- `creative_role`
- `evidence`
- `confidence_0_to_1`

運用ルール:

- 1動画ずつ、10分割フレームシートで見る
- `format=json`, `think=false`, `temperature=0`
- 推測ではなく、見える根拠だけを返させる
- 商品名や性別は確定させない

### Layer 4: Human review

目的: 誤判定コストが高い項目、広告判断に必要な項目を人間が決める。

入力項目:

- 演者性別
- ナレーション性別
- 判定根拠メモ
- レビュー済み
- クリエイティブ所感メモ

出力:

- ブラウザlocalStorage
- `レビューJSON` からエクスポート

## 4. なぜ性別はGemma4自動判定にしないか

Gemma4は顔出しや手元中心などの視覚構成は比較的取れる。ただし、性別分類は以下の理由で最終自動判定にしない。

- 顔や声からの性別推定は誤判定しやすい
- 本人の性自認と広告上の見え方は別物
- ナレーションが本人の声とは限らない
- BGM、効果音、複数人、AI音声、吹き替えが混在する
- モデル出力をそのままCSV化すると、後工程で確定値として扱われる危険がある

そのため、ダッシュボードでは以下の設計にする。

- AI欄: `AI性別推定 = 未推定`
- 人間レビュー欄: `演者性別`, `ナレーション性別`
- メモ欄: 判定根拠や迷った理由

## 5. 推奨データスキーマ

```json
{
  "file": "7610372843389390098.mp4",
  "video_metrics": {
    "duration_s": 176.17,
    "aspect": "9:16",
    "scene_changes_per_min": 13.6,
    "text_overlay_pct": 100.0,
    "product_closeup_pct": 97.7,
    "hands_on_demo_pct": 99.4,
    "audio_active_pct": 85.5
  },
  "ocr": {
    "product_name_candidates": [
      {"name": "WHIP SPICE", "hits": 1}
    ],
    "snippets": []
  },
  "vlm_basics": {
    "performer_visibility": "face_to_camera",
    "face_visibility": "clear",
    "speaking_setup_visual": "talking_head",
    "delivery_style_visible": "personal_review",
    "creative_role": "creator testimonial",
    "confidence_0_to_1": 1.0
  },
  "human_review": {
    "reviewed": false,
    "performer_gender": "",
    "narration_gender": "",
    "gender_decision_note": "",
    "memo": ""
  }
}
```

## 6. 大量動画分析時の推奨ワークフロー

1. 全動画を deterministic metrics で一括処理
2. OCR/ASRで商品名、訴求、CTA、価格を候補抽出
3. Gemma4で構成タグを補助抽出
4. 信頼度の低い項目だけ人間レビューに回す
5. 人間が性別分類、商品名確定、ナレーション分類を決める
6. レビューJSONをエクスポート
7. 集計テーブルで勝ちパターンを比較

## 7. 次に強化すべき処理

- ASR導入: 文字起こし、話速、語尾、口調、ナレーション有無
- 音声分類: 声の数、本人話者かVOか、AI音声らしさ
- 顔検出: 顔出し秒数、顔面積、目線、表情変化
- 商品マスター照合: OCR候補を商品DBにマッチング
- レビューJSONの集計: 性別分類、演出型、商品カテゴリ別のクロス集計

