여행을 다녀오면 휴대폰에 영상이 수십 개씩 쌓입니다. 그런데 정작 편집은 늘 뒷전이에요. “언젠가 한 편으로 만들어야지” 하다가 1년이 지나고, 결국 갤러리에 흩어진 채로 잊힙니다.

저만 그런 게 아닐 겁니다. 그래서 생각했습니다. “컷 편집의 90%는 결국 ‘쓸 장면 고르기’인데, 그걸 AI가 대신 해주면 되지 않을까?” 그 생각으로, 영상 여러 개를 끌어다 놓으면 AI가 알아서 컷 편집점을 잡고 한 편으로 묶어주는 영상 편집 프로그램을 직접 만들었습니다. 흔히 말하는 ‘자동 컷편집’을, 브이로그·여행 영상에 맞게 AI에게 맡겨본 셈입니다.

이 글은 그 앱이 무엇이고 어떻게 동작하는지, 그리고 만들면서 부딪힌 함정들을 풀어가는 **시리즈의 첫 글(전체 그림)**입니다.

무엇을 만들었나

한 줄로 요약하면 **“AI 편집 어시스턴트”**입니다. 동작은 이렇습니다.

  1. 여행 영상 여러 개를 앱에 끌어다 놓는다
  2. AI(Gemini 멀티모달)가 각 영상의 장면·대사·분위기를 분석해 “살릴 컷 / 버릴 컷”을 뽑는다
  3. 여러 클립을 하나의 스토리보드로 묶는다
  4. 완성본을 하이라이트 MP4(자막·배경음악 포함) 또는 **파이널컷 프로용 .fcpxml**로 내보낸다

즉 “장면 고르기 → 순서 잡기 → 합치기”라는 지루한 작업을 AI에게 1차로 맡기고, 사람은 마지막 손질만 하는 구조입니다. 결과물을 바로 쓰든, 파이널컷으로 가져가 다듬든 선택할 수 있게 했어요.

AI가 영상 분위기에 맞춰 편집 테마를 제안하는 화면

실제로 동작하는 모습입니다. 영상을 넣으면 분석 → 테마 → 컷 선택 → 내보내기까지 한 흐름으로 이어집니다.

어떻게 만들었나 — 기술 스택

개인이 끝까지 만들어 실제 설치 파일(.dmg)까지 빌드한 프로젝트입니다. 구성은 이렇습니다.

영역기술
데스크톱 셸Electron
프론트엔드React + TypeScript (Vite)
백엔드Python FastAPI + SQLite
영상 엔진FFmpeg / ffprobe (앱에 동봉)
AIGoogle Gemini (flash 계열 멀티모달)

구조의 핵심은 백엔드를 PyInstaller로 단일 실행파일로 번들하고, Electron이 그걸 자식 프로세스로 자동 기동하는 것입니다. FFmpeg도 앱 안에 함께 넣어서, 사용자가 파이썬이나 FFmpeg를 따로 설치하지 않아도 .dmg 하나로 끝나게 만들었어요. (이 패키징도 만만치 않은 작업이라 별도 편에서 다룹니다.)

기술 선택의 이유도 짧게 남겨둡니다.

  • Electron — 웹 기술(React)로 만든 화면을 그대로 macOS 앱으로 감쌀 수 있어, 복잡한 네이티브 UI 작업 없이 빠르게 데스크톱 앱을 완성하기 좋았습니다. 어차피 화면은 웹으로 짜는 게 익숙했고요.
  • Python(FastAPI) 백엔드 — 영상 처리(FFmpeg)와 AI 호출을 다루기엔 파이썬 생태계가 압도적으로 편합니다. FastAPI는 가볍고 빨라서, Electron이 자식 프로세스로 띄우는 로컬 서버로 부담이 없었어요.
  • Gemini의 flash 계열 — ①영상·이미지를 직접 이해하는 멀티모달이라 “영상을 보고 컷을 고르는” 이 앱의 핵심에 맞고, ②무료 티어로도 굴릴 수 있을 만큼 호출 비용·속도가 유리해서 골랐습니다. (이 무료 한도와 싸운 이야기는 뒤 편에서 따로 풀어요.)

참고로 이 앱은 내 Mac에서 로컬로 도는 완결형입니다. 분석을 위해 저해상 변환본만 Gemini로 보내고, 원본 영상과 편집 작업은 전부 로컬에서 처리합니다. 그리고 본인이 직접 촬영한 영상을 다루는 용도입니다(유튜브 등 남의 영상을 받아오는 기능은 없습니다).

만들면서 부딪힌 진짜 함정들 (다음 편 예고)

튜토리얼대로 “Gemini API 붙이고 FFmpeg로 합치면 끝”일 줄 알았는데, 실제로는 문서 어디에도 안 나오는 함정이 줄줄이 나왔습니다. 이 시리즈에서 하나씩 풀 예정입니다.

  • Gemini가 일부 해변 영상의 분석을 반려했다. 여름 휴가철 해변 배경이 AI 안전 필터(Safety Filter)에 예민하게 반응한 경우인데, 영상을 흑백·저해상도로 전처리해 모델이 영상의 본질적인 구조에만 집중하도록 최적화하니 해결됐습니다. (이번 시리즈에서 가장 인상 깊었던 노하우)
  • 무료 API 한도와의 싸움. 영상 분석은 호출이 많아 금방 한도에 걸립니다. 모델을 용도별로 나누고 폴백 체인을 짜서 무료 티어로 굴리는 법.
  • AI가 찍어준 편집 타임스탬프를 그대로 믿으면 안 된다. Gemini가 준 시작·끝 시간이 실제 영상 길이를 넘어버리는 일이 잦아서, ffprobe로 진짜 길이를 재 보정해야 했습니다.
  • 파이널컷용 FCPXML을 손으로 만드는 지옥 — 모든 시간값이 프레임 단위 정수배여야 하고, 해상도가 다른 소스가 섞이면 화면이 찌그러지고, 한글 파일명은 또 따로 처리해야 하고…

FCPXML로 내보내 파이널컷에서 연 결과 — AI가 고른 컷들이 타임라인에 그대로 배치된다

마무리

거창한 서비스가 아니라, “내 영상 편집이 귀찮다”는 개인적인 문제를 풀려고 시작한 토이 프로젝트입니다. 그런데 막상 만들어 보니 AI를 실제 제품에 붙일 때 부딪히는 현실적인 문제가 응축돼 있었어요. 같은 걸 만들려는 분, 혹은 AI를 앱에 붙여 본 분이라면 공감할 만한 디테일이 많을 겁니다.

다음 글에서는 가장 인상 깊었던 **“AI 안전 필터에 막힌 해변 영상을 흑백 전처리로 통과시킨 이야기”**부터 풀어보겠습니다.