1년 치 비디오 로컬 인덱싱: 레거시 Apple Silicon에서 Gemma 4 31B 활용하기

많은 영상 제작자와 콘텐츠 크리에이터들에게 아카이브는 점점 커지는 부담입니다. 영상 소스는 SSD와 클라우드 드라이브에 편집 속도보다 더 빠르게 쌓여가며, IMG_*.movDJI_*.mp4와 같은 이름의 파일들이 모인 "디지털 무덤"을 만들어냅니다. 병목 현상은 편집 소프트웨어가 아니라 인덱스에 있습니다. "골든 아워의 기린 와이드 샷"과 같이 특정 순간을 평범한 영어로 검색할 수 있는 방법이 없다면, 수 시간 동안 수동으로 영상을 훑어봐야 합니다.

최근 로컬 대규모 언어 모델(LLM)과 시각-언어 모델의 발전은 그 힘을 상류 단계로 옮겨 놓았습니다. 로컬 인덱스를 먼저 구축함으로써, 이후의 편집 과정은 단순한 오케스트레이션 레이어로 변하게 됩니다. 이것은 2021년형 M1 Max MacBook Pro와 Gemma 4 31B를 사용하여 1년 치 고해상도 비디오 푸티지를 로컬에서 인덱싱한 이야기입니다.

로컬 비디오 인덱스의 아키텍처

클라우드 업로드의 비용과 개인정보 보호 문제를 피하기 위해, 인덱싱 파이프라인은 로컬 우선(local-first) 철학으로 설계되었습니다. 목표는 메타데이터가 미디어와 함께 저장되어 시스템이 휴대성과 내구성을 유지할 수 있는 검색 가능한 아카이브를 만드는 것이었습니다.

파이프라인 워크플로우

이 프로세스는 다단계 파이프라인을 사용하여 원본 비디오 파일을 구조화된 사이드카 파일(.description.md)로 변환합니다:

  1. 메타데이터 추출: ffprobeexiftool을 사용하여 기술적 메타데이터와 GPS 좌표를 추출합니다.
  2. 지리 위치 정보: 좌표는 Nominatim을 통해 역지오코딩되어 사람이 읽을 수 있는 위치 이름으로 제공됩니다.
  3. 시각적 샘플링: ffmpeg를 사용하여 클립의 시각적 내용을 나타내기 위해 1920px 크기의 프레임을 일정한 간격으로 5개 추출합니다.
  4. 오디오 트랜스크립션: WhisperX는 97개 언어에 대해 단어 수준의 정렬 및 화자 분리(diarization)를 제공합니다.
  5. 얼굴 인식: insightface가 얼굴을 감지하고, 아카이브 간 인물 검색을 위해 512차원 ArcFace 임베딩을 중앙 집중식 SQLite 데이터베이스에 저장합니다.
  6. 시각 분석: 시각 모델(Gemma 4 31B)이 샘플링된 프레임, 트랜스크립트 조각, 폴더 컨텍스트를 분석하여 구조화된 YAML 헤더와 산문 형태의 설명을 생성합니다.

사이드카 접근 방식

중앙 데이터베이스에 의존하는 대신, 시스템은 모든 클립 옆에 .description.md 파일을 작성합니다. 이를 통해 인덱싱 도구가 고장 나거나 파일이 다른 드라이브로 이동되더라도 메타데이터가 온전하게 유지되며 grep으로 검색할 수 있습니다.

하드웨어 한계 돌파: M1 Max와 50GB의 스왑

이 프로젝트의 가장 놀라운 결과 중 하나는 2021년형 M1 Max(64GB RAM)의 성능이었습니다. LM Studio를 통해 Gemma 4 31B(Q4 양자화)를 실행하는 것은 기계를 극한까지 몰아붙였습니다.

대량 실행 중 시스템은 약 50.89 GB의 스왑 메모리를 사용했습니다. macOS Activity Monitor에서 "노란색 띠"로 표시되는 높은 메모리 압박은 일반적으로 일상적인 작업 중에는 피해야 하지만, Apple Silicon의 통합 메모리 아키텍처와 높은 메모리 대역폭 덕분에 배치 프로세싱에는 실행 가능합니다.

한 커뮤니티 관찰자가 언급했듯이:

"50GB 스왑이 여기서 가능한 이유는 Apple Silicon의 메모리 대역폭 때문입니다. x86에서는 그 정도의 스왑을 사용하면 추론 속도가 사용 불가능할 정도로 느려질 것입니다."

발열과 팬 소음에도 불구하고, 하드웨어는 이 노트북을 구매했을 당시에는 존재하지 않았던 소프트웨어인 31B-파라미터 모델을 사용 가능한 속도로 실행할 수 있음을 증명했습니다.

기술적 교훈과 버그 트리아지

시스템을 구축하면서 LLM 오케스트레이션과 실제 데이터의 교집합에서 몇 가지 중요한 통찰을 얻었습니다:

1. Enum 제약 조건 vs. 개방형 산문

개방형 프롬프트는 환각(confabulation)이 발생하기 쉽습니다. 예를 들어, 모델이 광원을 잘못 해석하면 밤 장면을 "밝게 빛나는" 상태로 설명할 수 있습니다. 모델이 엄격한 enum(예: golden_hour | bright_daylight | nighttime | mixed) 중에서 선택하도록 강제함으로써, 모델은 유효한 옵션 세트트 내로 제한되어 환각을 크게 줄일 수 있습니다.

2. 방어적 API 통합

WhisperX와 같이 빠르게 변화하는 AI 라이브러리를 사용할 때는 API 시그니처의 중단된 변경(breaking changes)이 흔합니다합니다. 스크립트가 하나의 키워드 인자를 사용하여 시도하고 TypeError가 발생할 경우 다른 인자로 대체하는 "방어적 생성자 호출"을 구현함으로써 라이브러리 업데이트에 대한 보험을 제공할 수 있습니다.

3. "Vibe"를 기준으로 한 컬링(Culling)

"나쁜" 푸티지를 걸러내는 초기 시도에서는 전문적인 사진 촬영 기준(모션 블러, 소프트 포커스)을 분석했습니다. 하지만 이는 블러가 미학적 요소의 일부인 감성적인 핸드헬드 영상의 기억을 삭제하는 결과를 초래했습니다. 교훈은 다음과 같습니다: 사진 아카이브는 공격적으로 컬링하고, 비디오 메모리는 블러가 미학적 요소인 경우를 포함하여 "기록되지 않은" 것(예: 렌즈 캡이 씌워진 영상이나 주머니 속 영상)을 허용적으로 컬링해야 한다는 것입니다.

더 큰 그림: 인덱스가 전제 조건이다

많은 현재 AI 비디오 편집기는 컷팅과 캡셔닝을 위한 표면적인 도구로 홍로합니다. 하지만 진정한 가치는 인덱스에 있습니다. 아카이브가 평범한 영어로 검색 가능해지면, 편집자는 단순한 오케스트레이션 작업이 됩니다.

DaVinci Resolve MCP(Model Context Protocol)와 같은 도구와 로컬컬 인덱스를 결합하면, 에이전트가 필요한 정확한 클립을 찾아 자동으로 컷팅을 수행할 수 있습니다. 이는 두 단계의 확장 전략을 수략합니다: 대량 인덱싱은 제로 마진 비용으로 로컬에서 실행하고, 고성능 클라우드 모델(예: Claude 3.5 Sonnet)은 수동 검토를 위해 플래그가 지정된 클립에 대해 "재평가" 단계를 위해 남겨둡니다.

이 접근 방식은 거대한 규모의 이름 없는 아카이브를 부담이 아닌 사용 가능한 자산으로 변환하며, 이는 레거시 Apple Silicon이 로컬 AI 워크로드에 강력한 플랫폼임을 증명합니다.

Sources