- 2,207개의 GoPro 사이클링 영상을 일일이 다시 보지 않고 원하는 순간을 찾기 위해, 로컬 ML 모델로 영상을 인덱싱·검색하고 best 클립을 DaVinci Resolve 타임라인으로 바로 전송
- M1 Max 같은 애플 실리콘에 최적화된 데스크톱 앱 버전을 사용해, 대화형 에이전트에게 원하는 장면을 요청하면 편집 타임라인으로 직접 전송
- OpenAI Whisper 전사, 프레임 분석(얼굴 인식·객체 탐지·화면 텍스트·장면 설명), 벡터 DB 임베딩으로 구성된 인덱싱 파이프라인 구성
- 628개 영상(668.68GB, 15시간 13분 18초)을 인덱싱하는 데 총 67시간 40분 42초의 연산이 소요되며, 재생 대비 약 4.4배 느린 속도
- 모든 처리가 로컬 GPU/CPU에서 수행되어 클라우드 없이 대용량 영상 라이브러리를 검색 가능하며, 현재 개발 진행 중
프로젝트 개요와 동기
- 사이클링 여정에서 촬영한 2,207개의 GoPro 영상을 하나의 SSD에 보관 중이며, 그 안의 인상적인 순간을 검색하고자 하나 전체를 다시 볼 시간이 부족함
- GoPro로 대부분의 순간을 촬영했으나, 전체 영상을 끝까지 봐야 좋은 순간을 찾을 수 있어 비효율적
- 사이클링 이력: 2024년 Casablanca→Imsouane(5일간 470KM 이상), 2023년 Kenitra→Tangier(1일 반 동안 220KM), 그 사이 산악 자전거 트립
- 이 문제를 해결하기 위해 edit-mind 프로젝트를 직접 제작
- GitHub Repo : https://github.com/IliasHad/edit-mind
데스크톱 앱 사용 이유
- Apple Silicon 최적화 데스크톱 앱 버전을 선택, 대화형 에이전트로 원하는 순간을 찾아 DaVinci Resolve 편집 타임라인으로 직접 전송 가능
- Docker 버전은 M1 Max GPU에 접근하지 못해 GPU 성능을 활용할 수 없음
- 데스크톱 앱은 source-available 버전과 유사한 인덱싱 프로세스를 사용
인덱싱 프로세스
- 데스크톱 앱에서 폴더를 선택하면, 휴대폰 영상과 구분하기 위해
GX로 시작하는 영상만 탐색 - 오디오 트랙이 있을 경우 OpenAI Whisper 모델로 전체 영상을 전사
- 이후 프레임 분석 파이프라인 실행, 영상을 1초 단위(1fps) 개별 장면으로 분할
- 커스텀 얼굴 데이터를 활용한 얼굴 인식 플러그인, 객체 탐지, 화면 내 텍스트, 샷 타입, 장면 설명 포함
- 장면의 얼굴·전사·설명 데이터를 문서 텍스트로 임베딩하여 로컬 벡터 DB에 저장
- 장면 프레임은 이미지 검색용 시각 임베딩 벡터 DB 컬렉션에 임베딩, 장면 오디오도 동일하게 처리
- 최종적으로 영상 정보를 담은 3개의 벡터 DB 컬렉션 확보
- 위치 메타데이터, 카메라 이름, 인식된 얼굴, 탐지된 객체, 화면 텍스트, 전사, 각 장면 설명 등 포함
성능 지표
- 기기의 GPU와 CPU로 처리된 인덱싱 영상의 측정값이며, 프로젝트가 개발 중이라 최종 수치는 아님
-
전체 지표
- 인덱싱된 영상: 628개
- 총 영상 용량: 668.68 GB
- 총 영상 길이: 15시간 13분 18초
- 총 연산 시간: 67시간 40분 42초
- 재생 대비 속도: 0.22배, 즉 재생 대비 약 4.4배 느림
- 분석된 프레임: 57,537개
-
단계별 분석(총 시간 / 영상당 평균 / 연산 비중)
- 전사(Transcription): 25시간 12분 54초 / 2분 25초 / 37.3%
- 프레임 분석(Frame analysis): 24시간 55분 42초 / 2분 23초 / 36.8%
- 장면 생성(Scene creation): 48분 0초 / 5초 / 1.2%
- 텍스트 임베딩(Text embedding): 36분 42초 / 5초 / 0.9%
- 시각 임베딩(Visual embedding): 11시간 49분 17초 / 1분 9초 / 17.5%
- 오디오 임베딩(Audio embedding): 4시간 18분 7초 / 27초 / 6.4%
검색 기능
- 채팅 어시스턴트로 영상에 대해 질문하는 방식을 선호하며, 결과를 DaVinci Resolve 편집 타임라인으로 바로 전송하는 옵션 제공
- 고급 모드 인덱싱에서 Qwen2.5-VL-7B-Instruct 모델을 사용하면 영상을 더 잘 이해·묘사한 인덱싱 데이터를 얻을 수 있으나, 인덱싱 속도는 더 느림
- 이 방식으로 GoPro 영상을 인덱싱하고, 원하는 장면을 검색·전송해 좋은 클립으로 영상을 제작
하드웨어 비교 및 개발 현황
- RTX 3060(12GB VRAM) 같은 NVIDIA GPU에서 실행 시 M1 Max보다 빠르긴 했음
- 프로젝트는 여전히 개발 중이며, 정확도와 속도 최적화를 위한 개선 작업 진행 중
사용 프롬프트 예시
- "내가 자전거를 타는 중에 개가 짖는 모든 클립 찾기"
- "자전거 여행에서 가장 경치 좋고 흥미로운 순간들로 하이라이트 릴 만들기"
- "바람 소리가 들리는 가장 빠른 1인칭 시점 라이딩 순간을 보여주고 DaVinci Resolve로 전송, 중복 장면 제거"