Movie Finder
TikTok 비디오의 프레임 분석과 두 AI의 토론을 통해 영화/시리즈를 식별하는 도구입니다. 모든 작업 파일(비디오, 프레임, 대화 기록, 결과)은 rclone을 통해 Google Drive에 저장되며, 로컬에는 임시로만 사용되고 정리됩니다.
사용자가 설정할 수 있는 매개변수 (요청에서 묻거나 추측)
| 매개변수 | 기본값 | 설명 |
|---|---|---|
| 프레임 수 | 10 | grab_frames.sh의 두 번째 인수 |
| 토론 모드 | per-gambar | 프레임당 3라운드 토론(무거움, 10프레임 기준 약 30회 토론). batch 모드 = 모든 프레임을 한 번에 3라운드로 논의(가벼움, 대부분의 경우 충분) |
| 라운드 | 3 | AI1↔AI2 응답 쌍의 수 |
| rclone 원격 경로 | gdrive:Linux-Server/movie-finder | env MF_REMOTE로 재정의 가능 |
| 로컬 유지 | 0 | 세 번째 인수, 1일 경우 비디오를 로컬에도 저장 |
파이프라인
1. 다운로드 + 프레임 분할
bash scripts/grab_frames.sh "<url_tiktok>" [num_frames] [keep_local]
- 출력 JSON에는 다음이 포함됩니다:
gdrive(대상 폴더),frames_local(jpg 프레임 경로),duration_sec,video_size,scratch_dir. - 스크립트 자동화: 다운로드 → 프레임 추출(처음/끝 10% 건너뜀) → gdrive 업로드 → 로컬 비디오 삭제. 프레임은 세션 동안 로컬에 유지됩니다(사용자가 볼 수 있도록).
- 다운로드 실패(지역/연령 제한): 사용자에게 알리고 대체 링크를 제안합니다.
2. 모든 프레임 보기
frames_local의 각 jpg 파일을 읽기 도구(이미지)를 사용하여 읽습니다. 직접 단서를 기록하세요: 의상, 위치, 배우, 시대/필름 그레인, 화면 속 텍스트, 워터마크, 촬영 스타일, 크레딧 제목.
3. 두 AI 토론 (subagent 도구, agent: general)
두 역할이 WhatsApp 채팅처럼 번갈아 실행됩니다:
- 🕵️ AI 1 형사 — 프롬프트: 시각적 프레임 분석(보이는 구체적인 단서 언급), 1~3개의 후보
제목 + 연도 + 이유추측, 신뢰도 제시. AI 1은 프레임 파일을 직접 읽어야 합니다(경로 제공). - 🔍 AI 2 회의론자 — 프롬프트: 웹 검색 도구를 사용하여 각 후보를 검증(
"<제목> <연도> 영화"+ 고유 장면 세부정보 검색), 링크 증거로 반박/확인, 새 후보 제안 가능.
규칙:
- 1라운드 = AI 1 분석 → AI 2 검증. 기본 3라운드.
- 각 AI가 사용한 모델을 대화 기록 및 답변에 기록하고 표시합니다(예:
🕵️ AI 1 — 형사 [model: custom/auto]). subagent/설정 메타데이터에서 모델 이름을 확인하세요. 두 역할이 같은 모델을 사용하는 경우 그대로 작성합니다.diskusi.md와 최종 답변에도 포함합니다. per-gambar모드: 각 프레임에 대해 반복하며, 항상 이전 라운드의 대화 기록과 기존 후보 컨텍스트를 포함하여 논의가 이어지도록 합니다. 중복 제거: 다른 프레임에서 동일한 후보가 반복되면 1라운드 강화만으로 충분하며, 전체 3라운드는 필요 없습니다.batch모드: 모든 프레임(경로 목록)을 하나의 3라운드 토론으로 보냅니다.- subagent의
model매개변수를 설정하지 마세요(기본값 사용). - 각 subagent의 범위를 제한하는 것이 좋습니다: AI 1은 분석만(도구 불필요), AI 2는 웹 검색에 집중.
4. 결론
다음 항목을 정리합니다: 제목 + 연도 + 신뢰도(높음/중간/낮음) + AI 2의 참조 링크 + 합의가 없는 경우 메모.
특히 TV 시리즈/SERIAL인 경우, AI 2(최종 라운드)는 다음을 반드시 완성해야 합니다:
- 시즌 및 에피소드: 클립 출처로 가장 가능성이 높은 에피소드 번호(단서: 식별된 장면/캐릭터/의상 + 웹 검색 "에피소드 가이드", 에피소드별 시놉시스, TMDB 에피소드별 크레딧).
- 에피소드 제목 (있는 경우).
- 에피소드 재생 시간(분:초 정밀) (형식
47:23), IMDb(기술 사양/에피소드 페이지) 또는 TMDB에서 가져오기 — 대략적인 반올림 금지. - 특정 에피소드를 확정할 수 없는 경우 "에피소드를 확인할 수 없습니다" + 에피소드 재생 시간만 명시적으로 작성합니다.
- 보너스(최선의 노력, "추정" 표시): 에피소드 가이드/시놉시스에서 식별된 장면을 기반으로 클립의 대략적인 타임스탬프 위치 추정.
특히 영화인 경우: IMDb 기술 사양/TMDB에서 정확한 재생 시간 시:분:초 (형식 1:52:47)을 명시하며, "±120분"과 같은 대략적인 표기는 금지합니다.
5. 결과를 gdrive에 저장 (새 로컬 파일 없이)
- 전체 대화 기록 →
rclone rcat "<DEST>/diskusi.md"(채팅 형식: 이모지 🕵️/🔍, 역할 이름, 응답 내용). - 결론 →
rclone rcat "<DEST>/hasil.md".
SERIAL용 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"이 일치합니다: 참호전, 원테이크. 확인됨: [링크]