콘텐츠 분석가, UX 리서처, 시장 조사 전문가는 사용성 테스트(UT), 포커스 그룹 인터뷰(FGI), 학술 강연, 실적 발표회, 웨비나 등 수 시간에 달하는 방대한 영상 기록을 상시 다룹니다. 기존 워크플로에서는 긴 영상에서 구조화된 이벤트 로그를 추출하기 위해 여러 도구를 파편적으로 조합해야 했습니다. 즉, 자동 음성 인식(ASR)으로 텍스트를 전사하고, 컴퓨터 비전 스크립트로 슬라이드 전환을 감지한 뒤, 수작업으로 타임코드를 맞춰야 했습니다.
Google Gemini의 네이티브 멀티모달 비디오 이해 역량은 이러한 작업 방식을 완전히 혁신합니다. 100만 개 이상의 토큰을 수용하는 초대형 컨텍스트 윈도우와 음성-영상 동기화 아키텍처를 갖춘 Gemini 모델(Gemini 3.8 Flash, Gemini 3.7 Flash, Gemini 2.5 Pro 등)은 원본 영상 파일을 직접 수용합니다. 연구원은 자연어 프롬프트만으로 참가자의 발언과 화면 조작 내용을 교차 검증하고, 특정 순간을 신속히 탐색하여 정확한 MM:SS 타임스탬프가 부여된 구조화된 요약 데이터를 도출할 수 있습니다.
본 가이드에서는 Gemini Files API를 통한 대용량 영상 업로드, 정적 모드와 에이전틱(Agentic) 모드의 전략적 선택, JSON 스키마 기반의 구조화된 출력 제어, 그리고 컨텍스트 캐싱(Context Caching)을 통한 반복 질의 비용 및 지연 시간 절감 방안을 체계적으로 다룹니다.
1. 처리 모드 선택: 정적 처리 vs 에이전틱 비디오 이해
Gemini는 두 가지 비디오 실행 모드를 제공합니다. 토큰 비용, 처리 속도, 분석 정확도 간의 균형을 맞추기 위해 올바른 모드를 선택하는 것이 필수적입니다.
| 평가 기준 | 정적 처리(Static Processing, 기본값) | 에이전틱 비디오 이해(Agentic Video Understanding) |
|---|---|---|
| 작동 메커니즘 | 고정 간격(기본 1 FPS)으로 프레임을 추출하고 오디오(1Kbps)와 함께 단일 패스로 컨텍스트에 일괄 적재 | Think-Act-Observe 루프 기반; 모델이 타임라인을 능동 탐색하며 전사문, 특정 오디오, 주요 프레임을 온디맨드로 호출 |
| 토큰 소모량 | 저해상도 기준 초당 약 100 토큰; 고해상도 기준 초당 약 300 토큰 | 장시간 영상 기준 입력 토큰 최대 88% 절감; 추론은 생각 토큰, 로드된 데이터는 도구 토큰으로 정산 |
| 첫 토큰 생성 시간(TTFT) | 5분 미만의 짧은 클립에서 매우 빠름 | 서버 측 사전 계획 및 다단계 도구 호출로 인해 초기 응답 지연이 소폭 증가 |
| 적합한 시나리오 | 프레임 단위의 연속적 시각 감사, 빠른 모션 추적, 1초도 놓치지 말아야 하는 정밀 분석 | 15분~180분의 장시간 녹화본, 특정 주제 탐색, 챕터 분할 및 주요 이벤트 요약 |
| 지원 모델 | 모든 Gemini 모델 | Gemini 3.8 Flash, Gemini 3.7 Flash, 3.6 Flash, 3.5 Flash Lite |
에이전틱 모드를 선택해야 하는 경우
15분을 초과하는 긴 녹화본에는 에이전틱 모드("processing": "agentic") 사용을 적극 권장합니다. 수만 장의 정적 프레임을 컨텍스트에 무조건 밀어 넣으면 비용이 급증할 뿐 아니라 불필요한 정보로 인해 모델의 주의 집중도가 분산됩니다. 에이전틱 모드에서는 모델이 먼저 음성 전사본을 훑어 주요 구간을 특정한 뒤, 화면 클릭이나 화이트보드 도표 같은 시각적 증거 확인이 필요한 순간에만 고해상도 프레임을 선택적으로 가져옵니다. 이를 통해 입력 토큰 비용을 최대 66% 절감하면서 응답 정확도를 약 7% 향상할 수 있습니다.
정적 모드가 반드시 필요한 경우
발언이 수반되지 않는 연속적인 시각적 관찰(예: 참가자의 시선 이동, 미세 표정 변화, 침묵 상태에서의 UI 헤맴 현상)을 정밀 추적해야 한다면 정적 모드가 적합합니다. 정적 모드에서는 샘플링 주기를 조정(예: fps: 0.5로 설정하여 2초당 1프레임 추출)하여 100만 토큰 한도 내에서 최장 3시간 분량의 세션을 누락 없이 분석할 수 있습니다.
2. Files API를 활용한 대용량 영상 수집
요청 본문에 비디오 데이터를 직접 인라인(base64)으로 전송하는 방식은 20MB(또는 엔드포인트에 따라 100MB) 미만의 작은 파일로 제한됩니다. 긴 리서치 영상을 다룰 때는 유료 기준 파일당 최대 20GB(무료 기준 2GB)를 지원하고 MP4, MOV, MPEG, WEBM, AVI 포맷을 폭넓게 수용하는 Files API를 사용해야 합니다.
수집 프로세스는 다음과 같은 비동기 2단계로 진행됩니다:
- 이어올리기(Resumable Upload): 대용량 미디어 파일을 Gemini 스토리지로 전송합니다.
- 상태 폴링: 서버 측 트랜스코딩과 타임라인 인덱싱이 완료되어 파일 상태가
PROCESSING에서ACTIVE로 전환될 때까지 대기합니다.
업로드된 파일은 48시간 동안 추가 저장 비용 없이 유지되므로, 동일한 연구 데이터에 대해 하루 동안 다양한 관점의 질의를 반복 수행하기에 최적입니다.
3. 프롬프트 엔지니어링 및 JSON 스키마 구조화
모델의 분석 결과를 데이터베이스나 대시보드에 즉각 연동하려면 엄격한 시간 형식 지정과 스키마 설정이 필수적입니다:
- 명시적 타임스탬프 형식 지정: Gemini는
MM:SS(수 시간 분량 영상의 경우HH:MM:SS) 형식을 기본 지원합니다. 감지된 모든 이벤트에 대해 시작 및 종료 타임스탬프를 명시하도록 프롬프트에 지시합니다. - 멀티모달 교차 검증 유도: 음성과 화면의 일치 여부를 대조하도록 지시합니다. 예: “14분 20초 부근에서 참가자가 혼란을 표현했을 때 화면에 오류 팝업이 노출되었는지 확인하라.”
- JSON 스키마 강제:
response_mime_type: "application/json"과 Pydantic 모델을 결합하여timestamp_start,timestamp_end,event_type,summary,visual_evidence,verbal_quote필드를 누락 없이 출력하게 함으로써 불필요한 서두 인삿말을 원천 차단합니다. - 프롬프트 배치 순서: API 입력 배열을 구성할 때 텍스트 프롬프트는 항상 비디오 객체 뒤에 배치해야 합니다.
4. Python 엔드투엔드 구현 코드
다음은 리서처가 60분짜리 사용자 인터뷰 영상을 업로드하고, 에이전틱 모드와 백그라운드 비동기 실행(background=True)을 활성화하여 구조화된 타임스탬프 이벤트를 추출하는 전체 코드입니다:
import time
from google import genai
from google.genai import types
from pydantic import BaseModel, Field
# 1. 클라이언트 초기화
client = genai.Client()
# 2. Files API로 대용량 영상 업로드
print("영상 녹화본 업로드 중...")
video_file = client.files.upload(
file="user_research_session_04.mp4",
config={"mime_type": "video/mp4"}
)
# 3. 서버 측 비디오 전처리 완료 대기
while video_file.state.name == "PROCESSING":
print("서버에서 트랜스코딩 및 인덱싱 진행 중... 5초 후 재확인")
time.sleep(5)
video_file = client.files.get(name=video_file.name)
if video_file.state.name == "FAILED":
raise RuntimeError("서버에서 비디오 처리에 실패했습니다. 파일 포맷을 확인하세요.")
print(f"영상 준비 완료, 리소스 URI: {video_file.uri}")
# 4. 구조화된 출력 데이터 모델 정의
class VideoEvent(BaseModel):
timestamp_start: str = Field(description="이벤트 시작 시간 (MM:SS 형식)")
timestamp_end: str = Field(description="이벤트 종료 시간 (MM:SS 형식)")
event_type: str = Field(description="유형: 페인포인트, 기능 요청, 조작 실수, 논의")
summary: str = Field(description="발생 상황에 대한 간결한 요약")
visual_evidence: str = Field(description="화면에서 관찰된 시각적 증거 및 조작 로그")
verbal_quote: str = Field(description="참가자의 핵심 발언 원문")
class ResearchSummary(BaseModel):
video_overview: str = Field(description="세션 전반에 대한 요약")
events: list[VideoEvent] = Field(description="시간순으로 정렬된 구조화된 이벤트 목록")
# 5. 에이전틱 모드 분석 요청 (백그라운드 비동기 실행 적용)
# background=True는 장시간 심층 추론 중 네트워크 연결 끊김 현상을 방지함
prompt_text = """
이 사용자 연구 인터뷰 녹화본을 분석하세요.
참가자가 겪은 모든 UI 조작 상의 불편함, 기능 제안, 주요 결정 순간을 식별하세요.
음성 발언과 화면 조작 내용을 대조하여 정확한 MM:SS 타임스탬프와 함께 시간순으로 출력하세요.
"""
print("에이전틱 비디오 분석 요청 전송 중...")
interaction = client.interactions.create(
model="gemini-3.8-flash",
input=[
{
"type": "video",
"uri": video_file.uri,
"mime_type": video_file.mime_type,
"processing": "agentic" # 에이전틱 타임라인 탐색 활성화
},
{
"type": "text",
"text": prompt_text
}
],
response_mime_type="application/json",
response_schema=ResearchSummary,
background=True # 서버 측 비동기 백그라운드 실행
)
# 6. 백그라운드 작업 완료 여부 폴링
while interaction.status == "in_progress":
print("모델이 타임라인을 탐색하며 증거를 종합하는 중...")
time.sleep(5)
interaction = client.interactions.get(interaction.id)
print("\n--- 추출 결과 ---")
print(interaction.output_text)
5. 컨텍스트 캐싱(Context Caching)을 통한 반복 정성 분석 최적화
정성 조사 연구에서 동일한 영상을 단 한 번만 조회하는 경우는 드뭅니다. 대개 전체 아젠다를 먼저 파악한 후, 경쟁사 언급 여부, 참가자의 감정 곡선, 특정 기능 플로우 등에 대해 꼬리 질문을 던지게 됩니다.
매번 90분짜리 영상을 새로 전송하고 처리한다면 비용과 대기 시간이 기하급수적으로 증가합니다. Gemini의 컨텍스트 캐싱은 이 문제를 효과적으로 해결합니다:
- 비용 획기적 절감: 캐시 히트된 입력 토큰 단가는 표준 입력 요금의 약 10%~20% 수준에 불과합니다.
- 응답 대기 시간 단축: 비디오 및 오디오 데이터가 메모리 상에 사전 벡터화되어 있어 첫 토큰 생성 시간이 대폭 단축됩니다.
- 구현 방식:
generateContentAPI를 통해 유효 수명(TTL, 예: 2시간)을 가진 명시적 캐시 객체를 생성합니다. 이후 모든 질의는cachedContents/<cache-id>만 참조하여 동일 영상에 대해 수십 차례의 심층 분석을 저비용으로 수행할 수 있습니다.
6. 실무 주의사항 및 문제 해결 가이드
- 네트워크 타임아웃 방지: 15분을 초과하는 긴 비디오에 대한 심층 추론은 수 분 이상 소요될 수 있어 일반 동기식 HTTP 요청 시 게이트웨이 타임아웃이나 인증 토큰 만료(
401 Unauthorized등)가 발생할 수 있습니다. Interactions API에서는 항상background=True를 사용하고, generateContent API에서는 스트리밍(stream=True)을 적용하세요. - 에이전틱 동작 확인: 응답 객체의
interaction.steps를 검사하세요.processing_call및processing_result단계가 기록되어 있다면 모델이 압축된 전역 데이터에서 추측한 것이 아니라 타임라인 내 특정 구간을 실제로 로드했음을 검증할 수 있습니다. - 미디어 해상도 파라미터 조절: 화면 내 작은 글씨, 스프레드시트 수치, 코드 블록을 세밀하게 읽어야 한다면
media_resolution: "high"를 지정하세요. 일반적인 회의 흐름 파악이나 발표 요약에는 기본 저해상도(프레임당 66 토큰)로도 최상의 가성비와 충분한 정확도를 얻을 수 있습니다. - 타임스탬프 오차 보정: 사용자의 음성 발화와 화면 UI 렌더링 간에는 약간의 시차가 발생할 수 있습니다. 단일 시점 대신 시간 구간(
timestamp_start와timestamp_end)을 요청하면 영상 편집 소프트웨어에서 해당 구간을 탐색할 때 정확도가 훨씬 높아집니다.