Gemini의 네이티브 비디오 임베딩으로 만든 sub-second 영상 의미 검색 도구 'SentrySearch'
Show HN: Gemini can now natively embed video, so I built sub-second video search
TL;DR Highlight
Google Gemini Embedding 모델이 비디오를 텍스트 변환 없이 직접 벡터로 임베딩할 수 있게 되면서, 자연어로 블랙박스 영상을 검색하는 도구가 등장했다. 'red truck running a stop sign'처럼 설명하면 해당 장면을 잘라서 돌려준다.
Who Should Read
영상 분석, 보안 카메라, 대시캠 영상 처리 등 비디오 데이터를 다루는 백엔드 개발자, 또는 Gemini API를 활용한 멀티모달 검색 시스템을 구축하려는 개발자.
Core Mechanics
- Google Gemini Embedding 모델이 비디오 클립을 텍스트로 변환하지 않고 직접 임베딩 벡터로 만들 수 있게 됐다. 기존에는 영상을 설명하는 텍스트를 먼저 뽑고 그걸 검색하는 방식이었는데, 이제는 영상 자체가 벡터 공간에 들어간다.
- SentrySearch는 대시캠 영상을 일정 길이(기본 30초)로 겹치는 청크(chunk)로 나누고, 각 청크를 Gemini로 임베딩해 로컬 ChromaDB에 저장한다. 검색 시에는 텍스트 쿼리를 같은 벡터 공간으로 변환해 가장 유사한 영상 구간을 찾아낸다.
- 청킹 시 5초 overlap을 두는 이유는 장면이 청크 경계에 걸쳐 발생할 경우 놓치지 않기 위해서다. 예를 들어 30초 청크와 35초 청크가 5초를 공유하면, 32초에 발생한 사건도 두 청크 중 하나에서 포착된다.
- 검색 결과로 해당 구간을 원본 파일에서 자동으로 잘라내어 클립으로 저장한다. ffmpeg를 내부적으로 사용하며, 시스템에 설치되어 있지 않으면 bundled imageio-ffmpeg가 자동으로 사용된다.
- 사용법은 CLI 기반으로 세 단계다. `sentrysearch init`으로 Gemini API 키 설정 → `sentrysearch index /path/to/footage`로 영상 인덱싱 → `sentrysearch search '검색어'`로 검색. Python 패키지로 설치 가능하며 ChromaDB가 로컬에 벡터를 저장하므로 외부 DB 인프라 불필요.
- Gemini API 키는 aistudio.google.com에서 무료로 발급 가능하다. 벡터 저장소로 ChromaDB를 로컬에서 사용하므로 영상 파일 자체가 외부로 나가지 않고, 임베딩 API 호출만 외부로 나간다.
- 댓글에서 '비디오 편집 소프트웨어(예: Adobe Premiere 플러그인)에 적용하면 고양이가 나오는 장면 전부 제거해줘라고 하면 EDL(Edit Decision List)을 자동 생성할 수 있다'는 아이디어가 나왔고, 보안 카메라·홈 모니터링·콘텐츠 인텔리전스 등 다양한 응용 사례가 언급됐다.
Evidence
- 콘텐츠·영상 인텔리전스 분야 종사자가 'Gemini는 이런 use case에 out of the box로 잘 맞는다'고 실무 경험을 공유했다. 기존에 이 분야에서 LLM 기반 영상 분석을 써본 사람도 Gemini의 네이티브 비디오 임베딩이 실용적이라고 평가했다.
- 실제로 Rexing 대시캠을 쓰던 개발자가 SD카드 없이 영상을 탐색하는 프로젝트를 만들던 중, '설명으로 검색하면 얼마나 좋을까'라고 생각했던 경험을 공유하며 이 프로젝트에 통합하겠다고 했다. 현실적인 pain point에서 나온 도구라는 공감대가 형성됐다.
- 프라이버시 우려에 대한 심층적인 댓글이 달렸다. '지금은 카메라가 넘쳐도 실제로 다 볼 사람이 없어서 익명성이 유지되는데, AI가 모든 피드를 실시간으로 인덱싱하면 사실상 팬옵티콘(panopticon, 모든 것이 감시되는 사회)이 된다'는 우려였다. 반면 '범죄 감지, 낙상 알림 같은 설득력 있는 use case가 있어서 규제 없이는 빠르게 퍼질 것'이라는 현실적 전망도 함께 나왔다.
- 5초 overlap의 효과에 대한 질문이 올라왔는데, 원작자의 답변이나 별도 벤치마킹 자료는 아직 없다는 게 확인됐다. 청크 경계에서 발생하는 이벤트를 잡기 위한 설계라는 점은 공감했지만, 실제로 얼마나 효과적인지 정량적 검증이 없다는 한계가 지적됐다.
- 웹훅(webhook)을 연결하면 특정 카테고리 활동이 감지될 때 알람을 트리거할 수 있어서 '가상 보안 요원'처럼 쓸 수 있다는 아이디어가 나왔다. 댓글에서는 이를 'well played'라고 긍정적으로 평가했지만, 동시에 'Where is the Exit to this dystopia?'라는 반응도 나와 기술 자체보다 활용 방향에 대한 양가적 시각이 드러났다.
How to Apply
- 보안 카메라나 대시캠 영상에서 특정 사건을 빠르게 찾아야 하는 경우, SentrySearch를 그대로 클론해서 `sentrysearch index`로 영상 디렉토리를 인덱싱하고, `sentrysearch search '차량이 신호 위반하는 장면'`처럼 한국어나 영어로 검색하면 해당 클립을 잘라서 받을 수 있다.
- 영상 편집 워크플로우를 자동화하고 싶은 경우, SentrySearch의 검색 결과(타임스탬프 + 파일 경로)를 파싱해서 FFmpeg 커맨드로 EDL 파일이나 타임라인 데이터를 자동 생성하는 레이어를 추가하면 Premiere나 DaVinci Resolve용 자동화 편집 도구로 확장할 수 있다.
- 웹훅 알림 시스템을 붙이려면, `sentrysearch search`를 주기적으로 실행하는 크론잡에 Slack/Discord 웹훅 호출을 추가하면 된다. 예: 5분마다 '사람이 넘어지는 장면'을 검색해서 결과가 있으면 알람을 보내는 간단한 스크립트로 홈 모니터링 시스템을 구축할 수 있다.
- Gemini 네이티브 비디오 임베딩을 자체 프로젝트에 통합하고 싶다면, 이 저장소의 임베딩 호출 부분 코드를 참고해 `google-generativeai` 라이브러리로 비디오 파일을 직접 임베딩하는 패턴을 추출할 수 있다. ChromaDB 대신 Pinecone이나 pgvector로 교체하면 프로덕션 규모로 확장 가능하다.
Code Example
snippet
# 설치 및 기본 사용법
git clone https://github.com/ssrajadh/sentrysearch.git
cd sentrysearch
python -m venv venv && source venv/bin/activate
pip install -e .
# Gemini API 키 설정 (aistudio.google.com/apikey 에서 발급)
sentrysearch init
# 영상 디렉토리 인덱싱 (기본: 30초 청크, 5초 overlap)
sentrysearch index /path/to/dashcam/footage
# 청크 설정 커스텀 예시
sentrysearch index /path/to/footage --chunk-duration 30 --overlap 5
# 자연어로 검색
sentrysearch search "red truck running a stop sign"
# → 해당 구간을 원본에서 잘라낸 클립 파일로 저장됨Terminology
임베딩(Embedding)텍스트나 이미지, 영상 같은 데이터를 숫자 배열(벡터)로 변환하는 것. 의미가 비슷한 것들은 벡터 공간에서 가까이 위치하게 되어 '유사도 검색'이 가능해진다.
ChromaDB벡터 데이터를 저장하고 검색하는 오픈소스 데이터베이스. 별도 서버 없이 로컬 파일로 동작해서 개인 프로젝트나 프로토타입에 적합하다.
청킹(Chunking)긴 데이터(영상, 문서 등)를 일정 크기의 조각으로 나누는 작업. 한 번에 처리하기 너무 큰 데이터를 임베딩 모델에 넣기 위해 필요하다.
EDL(Edit Decision List)영상 편집 소프트웨어에서 어느 구간을 어떻게 자르고 붙일지 기록한 텍스트 파일. 편집 작업을 자동화하거나 다른 프로그램으로 전달할 때 사용한다.
팬옵티콘(Panopticon)원래 모든 죄수를 한 명의 간수가 감시할 수 있도록 설계된 원형 교도소에서 온 개념. 현대에서는 '모든 사람이 항상 감시받는 사회'를 비유하는 표현으로 쓰인다.
네이티브 비디오 임베딩영상을 텍스트 설명으로 변환하는 중간 단계 없이 영상 자체를 직접 벡터로 만드는 기능. 텍스트 병목이 없어져 영상의 시각적 내용을 더 정확히 검색할 수 있다.