Movie Finder
TikTok 動画からフレーム分析と2つのAIによる議論を通じて映画/シリーズを特定するツール。すべての作業ファイル(動画、フレーム、トランスクリプト、結果)はrclone経由でGoogle Driveに保存 — ローカルには一時的に保存され、後でクリーンアップされます。
ユーザーが設定できるパラメータ(リクエストから質問/推定)
| パラメータ | デフォルト | 説明 |
|---|---|---|
| フレーム数 | 10 | grab_frames.sh の第2引数 |
| 議論モード | per-gambar | フレームごとに3ラウンドの議論(負荷大、10フレームで約30回の議論)。batch モード = すべてのフレームをまとめて3ラウンド議論(効率的、ほとんどのケースで十分) |
| ラウンド数 | 3 | AI1↔AI2 の応答ペア数 |
| rclone remote | gdrive:Linux-Server/movie-finder | 環境変数 MF_REMOTE でオーバーライド可能 |
| ローカル保持 | 0 | 第3引数、1 = 動画をローカルにも保存 |
パイプライン
1. ダウンロード+フレーム分割
bash scripts/grab_frames.sh "<tiktok_url>" [num_frames] [keep_local]
- 出力JSONの内容:
gdrive(保存先フォルダ)、frames_local(フレームjpgのパス)、duration_sec、video_size、scratch_dir。 - スクリプトの自動処理: ダウンロード → フレーム抽出(最初と最後の10%はスキップ)→ gdrive にアップロード → ローカル動画を削除。フレームはセッション中ローカルに残ります(あなたが表示できるように)。
- ダウンロード失敗(地域制限/年齢制限): ユーザーに伝え、代替リンクを提案してください。
2. すべてのフレームを確認
frames_local から各jpgファイルを読み取りツール(画像)で読み込みます。以下の手がかりを自分でメモ: 衣装、場所、俳優、時代/フィルムグレイン、画面上のテキスト、透かし、撮影スタイル、クレジットタイトル。
3. 2つのAIによる議論(サブエージェント、エージェント: general 経由)
2つの役割を交互に実行(WhatsApp チャットのように):
- 🕵️ AI 1 探偵 — プロンプト: フレームの視覚分析(具体的な手がかりを述べて)、1〜3の候補
タイトル + 年 + 理由を推測、確信度を示す。AI 1 はフレームファイルを直接読み取る必要があります(パスを渡してください)。 - 🔍 AI 2 懐疑論者 — プロンプト: Web検索ツールを使用して各候補を検証(
"<タイトル> <年> 映画"+ ユニークなシーンの詳細を検索)、リンクの証拠で反論/確認、新しい候補を提案してもよい。
ルール:
- 1ラウンド = AI 1 分析 → AI 2 検証。デフォルト3ラウンド。
- 各AIが使用したモデルをトランスクリプトと回答に記録・表示(例 ヘッダー:
🕵️ AI 1 — 探偵 [model: custom/auto])。モデル名はサブエージェントのメタデータ/設定から確認;両方の役割が同じモデルを使用している場合は、そのまま記載。diskusi.mdと最終回答にも含めます。 per-gambar(フレームごと)モード: 各フレームで繰り返し、常に前のラウンドのトランスクリプトと既存の候補コンテキストを含めて議論をつなげます。重複除去: 異なるフレームで同じ候補が繰り返される場合、強化ラウンドは1回で十分、完全な3ラウンドは不要。batchモード: すべてのフレーム(パスのリスト)を1回の3ラウンド議論で送信。- サブエージェントの
modelパラメータは設定しない(デフォルトを使用)。 - 推奨制限: AI 1 は分析のみ(ツール不要)、AI 2 はWeb検索に集中。
4. 結論
以下の項目をまとめる: タイトル + 年 + 確信度(高/中/低) + AI 2 からの参照リンク + コンセンサスがない場合のメモ。
シリーズ/TVシリーズの場合、AI 2(最終ラウンド)は以下の情報を必ず補完する:
- シーズンとエピソード: クリップのソースとして最も可能性の高いエピソード(手がかり: 特定されたシーン/キャラクター/衣装 + Web検索 "エピソードガイド"、各エピソードのあらすじ、TMDBの各エピソードクレジット)。
- エピソードタイトル(存在する場合)。
- エピソードの正確な再生時間(分:秒)(形式
47:23)、IMDb(技術仕様/エピソードページ)またはTMDBから — 大まかな丸めではありません。 - 特定のエピソードが確定できない場合、「エピソードは特定できません」と明記し、エピソードの再生時間のみを記載。
- ボーナス(ベストエフォート、「推定」と明記): エピソードガイド/あらすじで特定されたシーンに基づき、エピソード内のクリップ位置のタイムスタンプを推定。
映画の場合: IMDb技術仕様/TMDBから 時間:分:秒 形式(例 1:52:47)で正確な再生時間を記載。「約120分」のような表記は避ける。
5. 結果をgdriveに保存(新しいローカルファイルは作らない)
- 完全なトランスクリプト →
rclone rcat "<DEST>/diskusi.md"(チャット形式: 絵文字 🕵️/🔍、役割名、応答内容)。 - 結論 →
rclone rcat "<DEST>/hasil.md"。
シリーズ用 hasil.md テンプレート(エピソード詳細は必須):
# 識別結果 — Movie Finder
- タイトル / タイプ / 年 / プラットフォーム / 作成者 / 確信度
## エピソード詳細
- シーズンとエピソード : S01E05(確定できる場合、そうでなければ「エピソードは特定できません」)
- エピソードタイトル : "Beautiful Billionaires"
- エピソード再生時間 : 47:23(分:秒、IMDb/TMDBから)
- 総エピソード数 : 11(S1)
- 推定クリップ位置 : エピソード内 ±12:40(ベストエフォート、推定)
## 適合理由
...主要な証拠...
## 参照
...リンク...
映画の場合: 「エピソード詳細」セクションを「映画再生時間: 1:52:47(時間:分:秒)」に置き換えます。
6. ローカルクリーンアップ
rm -rf <scratch_dir>
7. ユーザーへの回答
回答の順序: シリーズの場合はエピソード詳細と再生時間(シーズン、エピソード番号、エピソードタイトル、再生時間)または映画の再生時間 + 簡潔な議論のポイント要約 + 参照リンク + gdriveフォルダの場所 — その後 最終推測(🎬 結果: タイトル/年)を一番下 に配置して締めくくります。完全なトランスクリプトは要求がない限り表示しないでください。
トランスクリプト例
🕵️ AI 1 — 探偵 [model: custom/auto]: フレーム3は19世紀のイギリス軍風の衣装が見られます... 候補: 「1917」(2019)、「The Northman」(2022)
🔍 AI 2 — 懐疑論者 [model: custom/auto]: 確認します... [websearch] 「The Northman」はバイキング時代で、一致しません。「1917」は一致: 塹壕戦、ワンカット。確認済み: [リンク]