검수 지옥에서 벗어나려고 앱을 하나 만들었다 (ReviewCut 제작기)
지난 글에서 양평 어드벤처랠리 다큐멘터리 이야기를 했다. 영상 파일 313개에 450기가를 받아다 20분짜리 한 편으로 줄이는 작업이었다. 그런데 나를 더 지치게 만든 건 편집이 아니라 그 뒤에 따라온 검수였다. 결국 ReviewCut 이라는 영상 검수 도구를 직접 만들게 된 이야기다. 검수는 여덟 번 돌았고, 수정 명세는 200개를 넘겼다.
문제는 그 200개를 주고받은 방식이었다. 필자는 프리뷰를 돌려보다가 이상한 곳에서 멈춘다. 타임코드를 손으로 받아 적는다. 워드 문서에 “1분 12초쯤 지도 움직임이 이상함”이라고 쓴다. 그리고 편집으로 돌아가 그 문서를 보면서, “1분 12초쯤”이 정확히 어느 프레임이었는지를 처음부터 다시 찾는다.
한 번이면 견딜 만하다. 이게 여덟 번이다. 검수하는 시간보다 검수 결과를 찾아 헤매는 시간이 길어지기 시작했다. 그쯤 되니 이건 내 인내심이 아니라 도구의 문제라는 확신이 들었다.
영상 검수 도구를 남의 것으로 쓰지 않기로 한 이유
프레임아이오 같은 협업 검수 서비스가 있다는 건 안다. 그런데 20분짜리 4K 프리뷰를 회차마다 올리고 다시 받는 시간이, 로컬 파일을 그냥 여는 시간보다 길었다.
게다가 내가 원한 건 댓글 한 줄이 아니었다. 영상·자막·사운드로 나뉜 메모였다. 다큐 검수에서 “이 장면이 이상하다”와 “이 자막 문구가 틀렸다”와 “여기 엔진 소리가 섞였다”는 서로 다른 작업 지시다. 한 덩어리로 적어두면 나중에 반드시 하나를 빠뜨린다.
그럼 만들면 되지 않냐고? 문제는 내가 개발자가 아니라는 것이다. 좌우간 요즘은 그게 큰 장벽이 아니게 되었으니, 늘 하던 대로 AI에게 맡기기로 했다.
제미나이 CLI를 써보려다 클로드가 앱을 만들었다
시작은 엉뚱했다. 제미나이 CLI를 클로드 코드처럼 써보고 싶어서 설치부터 해놓고, “이걸로 뭘 만들어 볼까” 하다가 영상 검수 도구 이야기를 꺼냈다.
맥 네이티브 앱을 만들려면 스위프트를 알아야 한다. 그러자면 엑스코드부터 12기가를 받아야 하는데, 확인해보니 명령줄 도구만으로도 컴파일이 되더라. 엑스코드 없이 맥 앱을 만들 수 있다는 걸 그때 처음 알았다. 덧붙이면 이 맥은 얼마 전 타이핑이 밀리기 시작해 범인을 찾느라 애를 먹은 그 맥이다.
그렇게 몇 시간 만에 첫 버전이 나왔다. 영상을 열고 S로 시작점, D로 끝점을 찍으면 구간이 생긴다. 오른쪽에는 영상·자막·사운드 칸이 뜬다. 워드 문서에 하던 짓을 그대로 옮겨놓은 물건인데, 타임코드를 손으로 받아 적지 않아도 된다는 것 하나로 첫날부터 체감이 달랐다.

마커와 화면이 두 프레임씩 어긋나던 이야기
며칠 쓰다가 이상한 걸 발견했다. 목록에 00:00:56:12라고 적힌 항목을 눌렀는데 플레이어는 00:00:56:10으로 갔다.
두 프레임 차이라 처음엔 넘어갔다. 그런데 영상 검수 도구에서 두 프레임이 틀리면 그건 도구가 아니다. 편집자에게 “여기 고쳐주세요”라고 짚어준 자리가 실제로는 다른 자리라는 뜻이니까.
필자는 재생 버퍼와 화면 표시 사이의 시차라고 짐작했다. 틀렸다. 진짜 원인은 두 개였다.
첫째, 앱이 프레임 번호를 “시간 곱하기 초당 프레임 수”라는 가상의 격자로 계산하고 있었다. 그런데 내 프리뷰는 정지 화면 구간을 긴 프레임 하나로 담는 가변 프레임률 파일이다. 36,435개 프레임 중 격자와 맞아떨어지는 게 다섯 개뿐이었다. 나머지는 전부 어긋나 있었다는 이야기다.
둘째, 영상 파일 안에는 “편집 리스트”라는 게 들어있다. 이것 때문에 파일이 말하는 시각과 재생기가 말하는 시각이 한 프레임쯤 다를 수 있다. 여기에 프레임 이동 명령이 비동기로 도는 성질까지 겹쳤다. 이동 직후에 읽은 시각은 언제나 한 발 늦은 값이었던 것이다.
결국 영상을 열 때 모든 프레임의 실제 표시 시각을 읽어다 표로 만들었다. 이동이든 타임코드든 마커든 전부 그 표 하나로 계산하게 고쳤다. 36,435개를 읽는 데 1000분의 1초가 걸린다. 이럴 거면 처음부터 이렇게 했어야지.
여기서 하나 배운 게 있다. AI에게 증상을 설명하면서 원인까지 같이 넘겨주면, AI는 그 원인을 파고든다. 내가 “캐시 버퍼 시차인 것 같다”고 적어 보낸 탓에 첫 수정은 엉뚱한 데를 고쳤다. 두 번째로 “원인은 모르겠고 증상은 이렇다”고만 적었더니, 그제야 파일을 직접 열어보고 진짜 원인을 찾아왔다.
검수 메모를 편집 AI가 알아듣는 말로 바꾼다
이 도구를 만든 진짜 이유는 따로 있다. 요즘 내 편집 작업의 상당 부분은 AI가 대신한다. 그러자면 검수 결과를 AI가 실행할 수 있는 지시문으로 바꿔줘야 한다. “컷 바뀔 때 화면 좀 튐, 자연스럽게”는 사람에게는 통하지만 AI에게는 통하지 않는다.
그래서 저장 버튼에 변환을 붙였다. 급하게 적은 메모를 넘기면 이렇게 돌려준다.
“컷 전환 시 화면이 부자연스럽게 튀는 현상이 있다. 전환 구간을 재점검해 자연스럽게 이어지도록 보정할 것. 화면 연결이 튀지 않고 매끄럽게 이어지면 완료.”
문제와 할 일과 완료 기준이 갖춰진 문장이다. 메모에 없는 사실은 지어내지 말라는 조건을 걸어두었으니, 내가 쓰지 않은 말이 끼어들 걱정은 없다.
내보내기를 누르면 이게 마크다운 문서 한 장으로 나온다. 실제로 나온 문서의 앞부분은 이렇게 생겼다.
# 영상 검수 결과 보고서
– 파일: 산자락을달리다_프리뷰_번호표기.mp4
– 검수일: 2026-09-02 21:46
– 항목 수: 35
### [3] 구간: 00:01:12:07 ~ 00:01:21:03
– 영상: 코스 지도의 움직임이 번호 순서대로 진행되도록 수정할 것. GPS 좌표 확보 여부를 확인한 뒤 좌표가 제공되면 해당 데이터로 대체할 것.
– 자막: 기존 “산과 산을 잇는 임도, 약 백 킬로미터”의 대사와 텍스트를 “무려, 양평군 임도 총연장 길이의 1/5인 100km!”로 변경하여 적용할 것.
이걸 그대로 편집 AI에게 던지면 된다. 제미나이와 클로드, 챗지피티에 로컬 모델까지 골라 쓸 수 있게 해뒀다. 키는 각자 설정에 넣는 방식이라 남의 키가 코드에 박혀 있을 일은 없다.

이렇게 정리한 지시서로 마무리한 결과물이 아래 영상이다. 검수 여덟 번의 흔적이 어딘가 남아 있을 텐데, 다행히 눈에 띄지는 않는 모양이다.
0.7메가와 107메가
만들다 보니 욕심이 붙었다. 덕(?)에 윈도우에서도 돌아가게 하고 싶어졌다. 맥 네이티브 앱은 스위프트로 짜여 있어서 윈도우에서는 한 줄도 못 쓴다. 그래서 같은 파일 형식과 같은 단축키를 쓰는 두 번째 앱을 일렉트론으로 따로 만들었다. 맥에서 시작한 검수를 윈도우에서 이어받을 수 있다.
그런데 다 만들고 파일 크기를 보다가 헛웃음이 났다. 맥 네이티브 판은 0.7메가바이트, 같은 일을 하는 일렉트론 판은 107메가바이트다. 브라우저를 통째로 들고 다니는 셈이니 당연한 결과다. 그래도 150배라는 숫자를 눈으로 보니 기분이 묘했다.
AI가 못 넘는 선이 하나 있었다
마지막은 깃허브 공개였다. 저장소 만들고 소스 올리고 릴리스까지 전부 AI가 처리하는데, 딱 한 군데서 멈췄다. 계정 인증의 “Authorize” 버튼이다.
브라우저를 열어 코드를 넣는 것까지는 된다. 그런데 그 마지막 승인 클릭은 자동으로 눌리지 않게 막혀 있다. 화면에도 “다른 사람이 보낸 코드를 절대 입력하지 마라”고 쓰여 있더라.
결국 내가 터미널에서 엔터를 한 번 치고, 브라우저에서 버튼을 한 번 눌렀다. 두 번의 클릭이 전부였다. 그런데 그 두 번이 없으면 아무것도 안 되는 구조라는 게 오히려 마음에 들었다. 계정을 넘기는 문 앞에는 사람이 서 있어야 한다는 뜻이니까. 🫠
빌드도 몇 번 넘어졌다. 태그를 다섯 개 한꺼번에 올렸더니 깃허브가 빌드를 통째로 건너뛰었다. 세 개까지만 처리한다고 한다. 내 맥에서 멀쩡히 컴파일되던 코드가 빌드 서버의 구형 스위프트에서는 서른 개 넘는 오류를 뱉기도 했다. 이런 건 겪어봐야 아는 것들이다.
그래서
소스와 설치 파일은 깃허브 저장소에 열어뒀다. 윈도우 설치 파일과 맥 앱, 리눅스까지 올라가 있다. MIT 라이선스라 마음대로 쓰셔도 된다.
필자처럼 영상 검수를 워드 문서로 주고받는 분들이 또 있을 것 같아 공개했다. 쓰다가 불편한 게 있으면 이슈로 남겨주시면 고맙겠다. 즐거운 편집생활 하시기 바란다.