M1 Max 컴퓨터와 로컬 ML 모델로 669GB GoPro 영상을 인덱싱함
(iliashaddad.com)- 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로 전송, 중복 장면 제거"
댓글과 토론
Hacker News 의견들
-
며칠 전에 거의 똑같은 머신에서 비슷한 기법으로 같은 일을 했고, 이것도 HN 첫 페이지에 올라갔다는 게 재미있음
https://news.ycombinator.com/item?id=48222733
https://blog.simbastack.com/indexed-a-year-of-video-locally/
이 프로젝트는 몰랐는데 흥미로움
Framedex에 사진 관련 기능을 더 넣어보는 중인데, 로컬에서 할 수 있는 일이 정말 많아져서 신나는 시기임- 글이 첫 페이지에 있었을 때 댓글에서 내 프로젝트가 언급돼서 확인해봤음
글과 프로젝트 모두 좋았고, 로컬 모델은 점점 더 좋아지고 있음
- 글이 첫 페이지에 있었을 때 댓글에서 내 프로젝트가 언급돼서 확인해봤음
-
이런 작업은 로컬 LLM으로 하게 될 것 같음
빠르고 작고 강력한 LLM을 로컬에서 돌려서 이미지, 영상, 문서 같은 개인 데이터를 색인하고, 보강하고, 보강된 메타데이터로 태그를 붙이는 식임
사람별로 묶고 싶으면 태그된 메타데이터를 검색해서 그룹화하고, 설명으로 이미지를 찾고 싶어도 태그된 메타데이터를 쓰고, 무엇이든 정리하고 싶으면 태그된 메타데이터를 쓰면 됨
이게 파일 정리 난장판을 끝내주길 기대함 -
“프레임 분석 파이프라인을 실행하면 영상을 별도 장면으로 나눈다(각 1초 또는 1fps)”와 “분석한 프레임 57,537개”를 보니 납득됨
이 숫자가 “669GB”보다 훨씬 현실적으로 들리고, 실제 처리된 프레임 전체 크기는 10~30GB 정도였을 것 같음
집에서 직접 하려면 항상 실용성 계산이 필요하다는 뜻이지, 작업을 깎아내리려는 건 아님
“총 계산 시간 67시간 40분 42초”라면, 이런 과정을 빠르게 할 수 있는 유료 옵션이 있는지도 궁금함. 그냥 GPU 인스턴스를 띄우면 되는 건가?- “669GB”는 영상 처리에 사용한 원본 촬영분 전체 크기이고, 처리 속도를 높이려고 각 프레임을 720p로 낮췄음
정확한 결과를 얻는 데 원본 전체 품질이 필요하진 않다고 알고 있고 실험도 그렇게 나왔음
지금까지는 12GB VRAM의 RTX 3060 같은 NVIDIA GPU가 M1 Max보다 훨씬 빨랐고, 아직 속도와 정확도 최적화를 계속하는 중임
- “669GB”는 영상 처리에 사용한 원본 촬영분 전체 크기이고, 처리 속도를 높이려고 각 프레임을 720p로 낮췄음
-
예상보다 즐거웠던 기능은 Google Photos와 Apple Photos가 지난 10년 동안의 내 삶과 아이들 삶에서 여러 순간을 추억 사진과 모음으로 보내주는 것이었음
나중에 AI가 보기 좋은 짧은 모음 영상으로 만들어주기 점점 쉬워질 거라 생각해서, 아이들 영상을 더 많이 찍는 쪽에 꽤 낙관적임- 오픈소스 머신러닝 모델이 점점 좋아지고 있음
Spotify 연말 결산 같은 영상을 생성하는 작은 실험을 해봤고, 미리보기 영상은 여기 있음 https://github.com/IliasHad/edit-mind/tree/expirement/year-i... - Android와 iOS를 둘 다 쓰는 건가, 아니면 개인 미디어를 양쪽에 모두 두는 다른 장점이 있는 건가?
- Google이 아이들을 이용해 모델과 광고 알고리즘을 학습시키는 건 괜찮은가?
몇 년 뒤엔 “BIKE BRAND의 최신 저가 자전거를 보세요, 예전에 BIKE BRAND 자전거 탔던 거 기억하시죠” 같은 걸 받게 될 텐데
- 오픈소스 머신러닝 모델이 점점 좋아지고 있음
-
DaVinci 21에는 AI IntelliSearch라는 색인 기능이 내장돼 있음
작업을 깎아내리려는 건 아니지만, 이제 많은 사용자에게 제공되는 기능임. 이름에 AI가 들어가 있으니 아마 Studio 사용자 전용일 가능성이 큼- 그건 아직 살펴보지 않았음
다만 영상을 클라우드에 업로드하는지, 아니면 로컬에서 처리하는지 궁금함
그리고 영상 속 얼굴에 라벨을 붙이는 데 도움이 되도록 사용자 지정 얼굴 데이터를 제공할 수 있는지도 궁금함
Adobe Premiere Pro에도 비슷한 기능이 있는 것 같지만, 클라우드 처리로 알고 있음
- 그건 아직 살펴보지 않았음
-
잘 만들었음
에이전트를 통해 릴을 어떻게 만드는지는 이해가 잘 안 됐음
이미지 링크를 받아 어떤 영상 편집 도구로 릴을 만드는 AI 도구 호출 같은 건가? 아니면 특정 질의로 색인에서 반환된 타임스탬프 전후 시간을 잘라 이어 붙이는 방식인가?- RAG를 쓰고 있고, 모든 영상 장면을 개별적으로 벡터 데이터베이스에 색인해둠
에이전트에게 요청하면 Ollama 모델이 요청을 이해하고, 사용 가능한 검색 도구를 사용함. 검색은 전사 텍스트, 얼굴, 시각 정보, 오디오 또는 조합으로 할 수 있음
Claude나 ChatGPT가 온라인 정보를 찾기 위해 웹 검색 도구를 쓰는 방식과 비슷함
그런 다음 Ollama로 영상 장면을 걸러 더 정확하고 중복이 적은 장면을 보여주고, 그 결과를 DaVinci Resolve API로 보내 영상 클립들로 타임라인을 만듦
- RAG를 쓰고 있고, 모든 영상 장면을 개별적으로 벡터 데이터베이스에 색인해둠
-
포르노 모음에도 작동하나?
- 이 용도라면 LoRA가 필요할 것 같음. 포르노 콘텐츠 거부가 강함
아니면 검열 제거 모델이 필요할 텐데, 비전 쪽에도 되는지는 모르겠음
장면 탐지와 얼굴 인식용으로 YOLO 파인튜닝 같은 것도 추가하고 싶을 수 있음 - 중요한 질문을 하는군
- 왜 항상 같은 질문이 나오는지 모르겠음
Reddit에 프로젝트를 올렸을 때도 똑같은 질문을 받았음 - 예전에 Whisper를 써봤을 때, 때리는 소리와 신음만 듣고도 정교한 대화를 환각으로 만들어냈고, 그걸 한 줄씩 뱉어내는 데 몇 분이 걸렸음
- 비꼬는 건지는 모르겠지만 흥미로운 질문이라고 봄
DeepSeek가 로컬에서 돌아가니까 이런 용도에 유용할까?
- 이 용도라면 LoRA가 필요할 것 같음. 포르노 콘텐츠 거부가 강함
-
M1 Max CPU가 ARM/SoC이고 11세대 Intel i9과 비교될 만하다는 걸 알고 놀랐음
내가 제대로 이해한 건가? Windows ARM도 이런 CPU에서 성능이 비슷할까?
참고: https://www.cpubenchmark.net/compare/4585vs4245/Apple-M1-Max...- 여러 이유로 사과와 오렌지 비교에 가깝지만, 가장 영향이 큰 건 두 가지임
“통합” 메모리 덕분에 시스템 메모리 전체를 VRAM처럼 쓸 수 있고, 전용 AI 보조 가속기도 있음
이 두 가지 때문에 Apple Silicon 칩이 이런 AI 모델 작업 부하에서 일반 CPU를 압도할 수 있음
Windows ARM 쪽이 어느 정도 가능한지는 모르겠지만 Qualcomm Snapdragon 칩을 쓴다는 건 알고 있음 - 비교가 안 됨
M1 Max는 메모리 대역폭이 400GB/s이고, 최신 최상위 Snapdragon X2 Elite도 228GB/s임 - “비교 가능”하다는 말은 단일 코어 성능을 말한다면 어느 정도 맞을 수 있지만, 메모리 대역폭에서는 M1 Max가 약 8배 빠름
더 넓은 버스와 더 낮은 지연 시간 때문에 아예 상대가 안 됨 - 그 질문에 대해서는 부정도 확인도 못 하겠음
아직 이 프로젝트를 Windows 머신이나 그런 구성의 머신에서 시도해보지 않았음
- 여러 이유로 사과와 오렌지 비교에 가깝지만, 가장 영향이 큰 건 두 가지임
-
https://archive.is/O6CLQ
글을 읽으려 했는데, 메인 웹사이트가 안타깝게도 Cloudflare 오류를 내고 있었음- 다시 확인해줄 수 있나? 왜 Cloudflare 오류가 보이는지 잘 모르겠음
-
링크는 https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...