양평 어드벤처 랠리 다큐 본편의 한 장면. 숲 사이 가파른 흙 오르막에 오프로드 바이크와 라이더들이 뒤엉켜 서로 밀어 올리고 있다

AI와 5일 만에 다큐멘터리 한 편을 만들었다 (2026 양평 어드벤처랠리 공식 다큐 제작기)

지난 6월 양평에서 열린 제17회 물맑은양평어드벤처랠리대회의 공식 다큐멘터리를 맡게 되었다.

드론 11대, 헬멧캠 1대, 인터뷰 캠 2대, 개회식용 고정 캠 1대까지 폴더 12개에 영상 파일 313개, 450GB 분량…

이걸 30분 안쪽의 유튜브 롱폼으로 만들어야 했고, 자선행사의 성격과 행정지원을 해준 양평군이 관련되어 있기에 홍보자료로도 쓸 수 있도록 최대한 얌전하고 차분한 스타일이어야 한다는 조건이 붙었다.

드론 친구들에게 SOS를 보냈더니 선뜻 도움의 손길을 보내왔다.
드론 친구들에게 SOS를 보냈더니 선뜻 도움의 손길을 보내왔다.
전날 밤, 장비를 쌓아놓고 자기 직전
전날 밤, 장비를 쌓아놓고 자기 직전

편집 대상 소스 분량과 결과물의 최소 품질 조건을 생각해 보면 절대 손을 대고 싶지 않은 프로젝트였다. 소스의 양은 거대했고, 파일 개수도 많았으며, 최소 수준의 품질을 기대하는 초롱초롱한 눈들이 많아 보였기 때문이다.

그런데 재능기부로 촬영만 해드리고 빠지려고 했던 결과물이 2개월이 지나도록 감감무소식인 게 아닌가…

결국 (다행히도 최근에 AI 영상 편집 스킬을 열심히 연구하던 중이었기에) 이 최종 성과물은 내가 맡기로 하였다. AI 다큐멘터리 제작을 처음부터 끝까지 혼자 해 보기로 한 것이다.

(아니 정말로?… 🫠)

다만 이젠 늙고 병든 손목을 가지고 있기에 수천 수만 번의 마우스질은 자신이 없었고, 그래서 난 이 작업을 처음부터 끝까지 Claude Code로 진행하기로 마음을 먹었다.

이 시점에서 정말 중요한 포인트가 나오는데,

전통적인 영상 제작은 기획서가 있고, 기획서를 바탕으로 한 시나리오와 촬영이 있고, 결과물을 A컷과 B컷으로 분류하고, 이것들을 시나리오에 맞춰 가이드 편집을 한 뒤 계속 조정해 나가면서 최종 성과물을 내는 방식이라 하겠다.

전통적인 영상 제작은 이 여섯 단계를 사람이 순서대로 넘긴다
전통적인 영상 제작은 이 여섯 단계를 사람이 순서대로 넘긴다

그럼 AI랑은 어떻게 일을 하냐고?

뭔가를 찾고 정리하는 일, 단순 반복적인 일, 그리고 이미 널리 알려져서 누구나 할 수 있는 일은 전부 AI에게 맡긴다는 전제로 시작하는 것이었다.

다시 말하면 사람이 컷을 고르고 AI가 붙이는 식이 아니라, 내가 기획의도와 방향성을 정하고 그에 맞는 컷을 고르는 기준을 정하면, 적절한 클립 소스 찾아 잘라오기, 편집, 음악, 믹싱, 렌더, 납품물 생성은 전부 AI가 코드로 돌린다는 개념이다.

예를 들면 프롤로그에서 20%는 긴장과 즐거움이 있는 라이더들의 모습, 50%는 질주하는 라이딩, 20%는 뒤엉켜 있는 바이크들, 10%는 헬멧캠 1인칭 시점으로 구성해 달라는 식의 구체적인 요구를 시나리오와 함께 주고 검수자 자리에 앉는다. 그러면 AI는 요구사항을 분석하고 실행한 후, 내게 보고서를 작성해 확인받는 식인 것이다.

놀라운 점은, 이렇게 진행한 작업은 규모에 비해 놀랍게도 5일 만에 끝이 났고, 그 사이 검수는 여덟 번 돌았으며, 결과물은 20분 16초, 283컷의 결과물을 내놓았다.

AI 영상 편집 5일, 313클립, 283컷. 작업이 끝나고 나온 숫자들
AI 영상 편집 5일, 313클립, 283컷. 작업이 끝나고 나온 숫자들

그렇게 나온 최종 마스터 영상이 이 영상이 되겠다.

산자락을 달리다 | 2026 제17회 물맑은양평어드벤처랠리대회 공식 다큐 (양평 오프로드 랠리)

여기서 잠깐,

이 글은 잘된 자랑을 하려고 쓰는 게 아니다. 오히려 그 반대다. 5일 동안 정말로 시간을 잡아먹은 건 편집이 아니라 “했다고 믿었는데 안 되어 있던 것”들이었고, 그걸 어떻게 잡았는지가 다음 영상을 만들 사람(그게 나 자신이 될 확률이 제일 높다..)에게 훨씬 쓸모가 있을 것 같아서다.

AI 다큐멘터리 제작, 처음 요구사항부터 삐끗했다

발주 쪽 요구는 정말 아무것도 없었다. 사실 발주가 아니라 은근한(?) 기대만 있을 뿐이었다.

알고 봤더니, 자원봉사로 참여한 탓에 내게 뭔가를 요구하는 걸 미안해하는 것이었기 때문이다.

하지만 그럼에도 불구하고 결국 받아낸 최소한의 요구 사항은, 후원기관인 양평군에서 “홍보자료로 활용할 수도 있다”, 따라서 “군수님 인터뷰는 꼭 잘 들어가야 한다” 수준이었다.

촬영 계획을 나눠 들고 브리핑하던 미디어팀
촬영 계획을 나눠 들고 브리핑하던 미디어팀

그래서 나는 이 대회의 제대로 된 정체부터 파악해 보기로 했다.

17회라고 하니까 대회 분위기라도 파악해 보자 싶어서, 뭐라도 찾아보려고 인터넷에서 이 대회와 관련한 영상들을 찾아봤다. 그런데 정말 아무것도 없었다. 정말 아날로그하게 행사를 진행해 왔던 것이다…

막막함이 밀려왔지만, 그래도 한다고 했으니 하긴 해야겠기에 이번엔 다른 랠리 대회들 영상을 찾아봤다.

그런데 아쉽게도 다른 대회들도 다들 부분 부분의 영상들 내지는 주로 개인이 턱캠으로 촬영한 주행영상들이 대부분이었다.

막막하던 차에 우리 대회 끝나고 다음 주에 치러졌던 M3 랠리의 공식 영상이 눈에 띄었다. 그리고 이내 곧 영상을 구성하는 문법 중 특히 내레이션으로 이끌어가는 다큐멘터리 형식이, 그렇잖아도 인간극장 스타일로 가면 어떨까 하던 차에 확신을 주었다.

그래서 곧 Claude에게 제약 조건들이자 원하는 스타일들을 입력하기 시작했다.

내레이터가 끌고 가는 하루의 스케치일 것, 순위나 기록이 아니라 함께 달리는 사람들이 보일 것, 군수 인터뷰는 꼭 들어갈 것, 양평군 소개가 60초쯤 있을 것, 로그로 찍은 소재는 컬러 그레이딩을 할 것, 백플립 컷은 반드시, 드론 이착륙 장면은 절대 금지.

여기서 필자가 처음 배운 게 하나 있다.

“레퍼런스 영상의 무드를 따르되 복제처럼 보이지 않게”라는 요구는 사람끼리는 통하지만 코드로는 검증할 수가 없다는 것이다. 반면에 “이착륙 컷 0개”, “백플립 1컷 이상”, “군수 인터뷰 포함”은 코드가 셀 수 있다. 처음부터 요구를 셀 수 있는 조건으로 바꿔 놓으니 뒤에서 “이거 반영했어?”로 싸울 일이 절반으로 줄었다. 나중에 검수 지시 200여 개를 전부 명세로 적게 된 것도 결국 이 경험 때문이다.

첫 자동 편집은 엉망진창이었다

첫 자동 편집본(v8)을 보고 내가 남긴 평가는 “클립 구성이 엉망진창”이었다.

원인을 찾아보니 소재를 폴더별로 뽑고 있었는데, 폴더는 CP1, CP2 같은 공간 기준이라 시간이 없다. 그래서 전날 오후에 찍은 클립이 아침 시퀀스에 태연히 들어가 있었던 것이다.

v9에서 엔진을 새로 짰다. 파일의 촬영 시각으로 313클립을 한 줄에 늘어놓고 시퀀스마다 시간창을 주었고, 프레임마다 바이크와 라이더가 실제로 잡히는 구간을 찍어 그 안에서만 컷을 만들게 했다. 재보니 전체 러닝타임 중 바이크가 화면에 있는 비율이 평균 36%밖에 안 됐다.

처음 자동편집본을 보고 들었던 “관계없는 자료 영상이 많다”는 느낌의 실체가 이거였다. 게다가 중복된 장면이 나오는 컷들도 적지 않았다. 어떤 컷은 세 차례나 연달아 사용되어 마치 렉이 걸려 같은 구간이 반복되는 느낌을 주기도 했다. 그래서 가장 중요한 지침으로 한 번 쓴 클립 구간은 다시 못 쓰게 원장을 두었더니 완전 동일 컷이 93종에서 2종으로 줄었고, 거기에 맞춰 음원 27개의 드럼과 베이스 진입점 112개에 컷을 스냅시켰다.

소재가 많을수록 편집이란 결국 “고르는 규칙”이었다.

20분에 283컷이면 컷을 하나하나 손으로 고를 수가 없다. 규칙을 코드로 두고 사람은 규칙을 고친다. 이 방식이 프로젝트 내내 유지됐다.

“절반밖에 반영이 안 됐어”

내가 이야기하는 부분을 자꾸 AI가 잘못 이해했다. 무슨무슨 장면, 또는 몇 초에서 몇 초라고 지시하면 AI는 엉뚱한 부분에서 수정하고는 했다.

나중에 알고 보니 수정을 위해 참고한 영상의 10초가 AI 내에서는 다른 수정 지시들과 얽혀서 15초에 있을 수 있다는 것이었다. 달리 말하면, 내가 영상의 10초에 있는 부분을 수정해 달라는 요청을 한 건 시간 10초에 대한 수정이 아니라 내가 본 영상의 10초 부분에 있던 특정 클립을 수정해 달라는 말이라는 걸 AI가 인지하지 못했다는 것이었다.

나는 그래서 검수자가 지시하기 편하도록 영상 내 좌상단에 컷 번호와 타임라인 시각, 원본 파일명, 원본 시작점을 크게 찍은 번호표기 프리뷰를 만들도록 지시했다. 이를 통해 나는 시간 기준 지시가 아니라, 혹시 시간이 바뀌더라도 인식 가능한 “0081 삭제, 0082를 앞으로” 식의 명령으로 정확히 내가 의도한 바를 수행하는 편집 기술을 확보했다.

컷 번호와 타임코드, 원본 파일명을 좌상단에 박은 번호표기 프리뷰
컷 번호와 타임코드, 원본 파일명을 좌상단에 박은 번호표기 프리뷰

1차 검수 문서가 86항목이었다. AI는 다 반영했다고 보고했고, 내가 영상을 열어 본 뒤에 남긴 답은 “절반 정도밖에 반영이 안 되어 있어… 처음부터 다시”였다. 2분 13초에 옛 자막이 그대로 있었고, 6분 16초에는 참가자 위에 군수 라벨이 떠 있었고, 내레이션 26개가 영상 끝으로 떠내려가 있었다.

원인은 하나로 모였다. 수정사항을 적용했다, 반영했다와 같은 “했다”를 AI가 스스로 판단했다는 것.

그래서 평가의 구조를 바꿨다. 검수 항목 하나를 명세 하나로 적고, 적용 스크립트는 명세만 읽고, 검증 스크립트는 결과물만 보고 통과와 미흡을 찍는다. 완료 선언은 “통과 205/205” 같은 숫자로만 하도록 했다.

명세를 읽는 적용 스크립트와 결과물만 보는 검증 스크립트
명세를 읽는 적용 스크립트와 결과물만 보는 검증 스크립트

그 결과는 놀라웠다.

회차마다 줄어든 검수 항목
회차마다 줄어든 검수 항목

이렇게 바꾼 뒤 일곱 번의 검수는 35, 14, 5, 12, 3, 2, 1항목으로 드라마틱하게 줄어들었다.

마우스를 덜 쓰려고 검수툴까지 만들었다

그러다 보니 이제는 욕심이 조금 더 생겼다. 그렇잖아도 직업 특성상 과도한 마우스 사용으로 오른손과 손목이 편안한 날이 없는데~ 싶은 생각이 들어서, 역시나 AI에게 바이브 코딩을 시켜 내가 쓸 영상 검수툴을 만들어버린 것이다.

동영상 플레이어처럼 생긴 물건이다. 영상을 열고 단축키로 재생하고, 구간이나 지점을 찍고, 거기에 메모를 붙이면, 마지막에 AI에게 그대로 던질 지침 문서가 나온다. 좋게 말하면 필요에 의한 발명이고, 원색적으로 이야기하자면 귀찮아서 만들어버린 툴이다.

왼쪽이 플레이어, 오른쪽이 검수 항목이다. 구간이나 지점을 찍고 영상·자막·사운드로 나눠 메모를 단다. 맨 아래 줄이 단축키다
왼쪽이 플레이어, 오른쪽이 검수 항목이다. 구간이나 지점을 찍고 영상·자막·사운드로 나눠 메모를 단다. 맨 아래 줄이 단축키다
검수툴이 자동 생산한 지침문서. AI에게 주고 엔터만 누르면 지침을 수행한다.
검수툴이 자동 생산한 지침문서. AI에게 주고 엔터만 누르면 지침을 수행한다.

이 툴 이야기는 여기서 접는다. 하고 싶은 말이 많아서 다음 글로 따로 뺐다.

소리 이야기, 룸톤이 옆 컷의 말을 데리고 다녔다

검수 중에 “50초 전후로 53초 음성이 반복된다”는 지적이 나왔다. 타임라인에는 겹친 클립이 없었다. 소리는 위가 아니라 밑에서, 무음인 드론 컷에 깔아 둔 룸톤에서 나오고 있었다. 룸톤이라고 불렀지만 실은 옆 컷에서 잘라 온 조각이라 말소리 꼬리가 묻어 있었고, 그게 컷이 바뀌어도 밑에 그대로 남아 유령처럼 따라다녔다. 53초에 들린 말이 50초 언저리에서 또 들린 이유가 그거다.

전역으로 쓸 조용한 루프를 만들어 갈아 끼웠더니 이번엔 드론 컷에서 엔진 소리가 났다. 헬멧캠에 “조용한” 구간 같은 건 애초에 없었던 것이다. 결론은 룸톤을 아예 없애는 것이었다. 소리 없는 컷은 무음에 음악만 두고, 경계마다 0.35초 페이드를 걸었다.

또 한 가지, 컷마다 들리던 미세한 ‘툭’ 소리는 25ms 페이드 두 개가 겹치면서 50ms짜리 구멍이 뚫린 것이었다. 원본에서 40ms 핸들을 더 읽어 와 등파워 크로스페이드로 붙이고 컷별 레벨을 ±6dB 안에서 맞췄더니 사라졌다.

싱크는 내레이션 기준으로 재면 편차가 0.6초라 아무 쓸모가 없다. 동시녹음 컷의 원본 오디오와 최종 믹스를 상호상관으로 재면 편차 0.02초가 나오는데, 이걸로 인코더 프라이밍이 컷마다 누적돼 100ms 밀린 것을 잡았다. 그리고 규칙을 하나 만들었다. 영상이 바뀌면 싱크를 다시 잰다.

“자연스럽게 채우기”는 대개 거짓말을 만든다. 이웃에서 가져온 소리는 컷 경계를 무시하고 남는다. 없는 소리는 없는 채로 두고 경계만 부드럽게 하는 게 답이었다.

코스 지도는 GPS로

GPS 트랙 6,917점으로 다시 그린 코스
GPS 트랙 6,917점으로 다시 그린 코스

처음엔 지도 이미지의 파란 선을 마스크로 따서 이어 그렸는데 라벨 구멍 때문에 CP③이 마지막에 켜지는 등 순서가 틀렸다. 주최 측에 KML을 요청해 GPS 트랙 6,917점을 받고 지도 이미지에 정합해 호 길이로 진행시켰다. 트랙 길이를 재니 99.56km. 주최 측이 말한 “대략 100km”와 딱 맞았고, 내레이션은 “양평군 임도 총연장 500km의 1/5, 100km”가 됐다. 그 전에 지도 스케일로 추정했던 150km는 그냥 틀린 숫자였다. 이미지에서 추정하지 말고 데이터를 요청하면 검증까지 따라온다.

CFR 사건, 4K가 뒤로 갈수록 앞서간다

4K 마스터를 뽑고 “싱크 0.000초”라는 보고를 받았다. 그런데 내가 직접 플레이를 해보니 미세하게 틀어져 있고 뒤로 갈수록 심해졌다.

이는 AI가 작업을 진행하면서 오디오 상관만 잰 것이 문제였다. 영상 트랙이 1080p보다 2.8초나 짧았던 것이다.

뒤로 갈수록 벌어지던 4K 트랙
뒤로 갈수록 벌어지던 4K 트랙

원인이 꽤 미묘하다. ffmpeg에서 -ss 뒤에 fps 필터를 걸면 첫 프레임 시각이 0이 아니라 1/30이라서 trim=0:dur이 마지막 프레임을 버린다. 컷마다 1프레임씩 모자란다. 1080p는 오디오 트랙이 길이를 잡아 주면서 concat에서 1프레임 홀드가 생기는 VFR로 버텼고, 영상만 따로 뽑은 4K는 283컷 곱하기 1프레임, 2.8초를 잃었다. 1080p도 -shortest 때문에 끝에서 96ms 앞서 있었다.

해결은 tpad로 끝 프레임을 복제하고 setpts로 0에 맞춘 뒤 trim, 그리고 -frames:v로 프레임 수를 못 박는 것. 컷 길이는 1/30 격자로 양자화했다. 세그먼트 프레임 수, 영상 트랙 총길이, 동시녹음 상관, 프리뷰 상관, 컷 경계 프레임 일치 다섯 가지를 코드로 검증하게 했다.

다섯 가지를 코드로 검증한 결과
다섯 가지를 코드로 검증한 결과
트루피크까지 잡고 나서
트루피크까지 잡고 나서

수정을 마친 후, 내가 AI에게 한 말이 그대로 스킬의 0번 원칙이 됐다. “아무리 열심히 했어도 사운드 퀄리티, 싱크 망하면 그냥 망하는 거야.”

이를 계기로 영상이 1프레임이라도 바뀌면 프레임 수, 트랙 길이, 상관 세 가지를 다 재도록 만들었다.

말 그대로 기억은 증거가 아니고 측정 로그가 증거임을 잊지 말아야 할 것이다.

납품, 그리고 스킬로 남기기

납품물은 git 태그와 releases 폴더로 베이스라인을 잡고, 4K 마스터는 소스에서 LUT와 오버레이를 거쳐 x264 단일 패스로 뽑았다.

오디오는 1080p 마감 트랙을 그대로 쓰니 프리뷰와 비트 단위로 같다. 유튜브용으로 제목 안 4개, 설명, 태그, 챕터, 4개 언어 SRT, 썸네일까지 한 세트를 만들고, 릴스용 59초 세로 컷도 4K 원본에서 다시 크롭해 만들었다.

최종본에서 매번 새로 뽑게 바꾼 스토리보드 썸네일
최종본에서 매번 새로 뽑게 바꾼 스토리보드 썸네일

그런데 스토리보드 썸네일이 9월 2일 것 그대로 쓰이고 있었다는 것을 뒤늦게 발견했다.

생성 코드 없이 파일만 남아 있으면서 검수를 방해하고 있었다. 이 역시 마찬가지로 최종 mp4에서 매번 새로 뽑아 비교하는 방식으로 교체를 단행했다.

이 모든 것을 video-master라는 Claude Code 스킬로 집대성했다. 다음번 AI 영상 편집에서 같은 자리를 다시 헤매지 않으려고 만든 물건이다.

절대 원칙 11개, 다시는 밟지 않을 실패 목록 20여 건, 참조 문서 9종, 검증된 스크립트 15개, 그리고 분석에서 배운 것을 적어 두는 영상 구성 원리 원장. 다음 영상은 이 원장을 읽고 시작하게 된다.

다시는 밟지 않을 함정들

앞서도 언급했지만, 이 글은 나 이만큼 잘했다~라는 기록이 아니라 시행착오를 다시 겪지 않기 위한 바이블을 남기기 위함이다.

정리해 두면 누군가는 덜 밟을 것 같아서 적어두는 증상, 원인, 해결의 삼각고리인 셈이니, AI 영상 편집으로 비슷한 고민을 하는 분이라면 본 포스트 자체를 내 AI에게 분석시키고 스킬이나 잼스로 등록하게 만들어 활용하면 매우 유용할 것이다.

  • 검수 지시가 절반만 반영됨 / AI가 “했다”고 스스로 판단 / 명세와 검증기, 통과율로만 완료 판정
  • 옛 자막, 엉뚱한 라벨 / 파일명으로 캐시 / 내용 해시로 키, 인덱스 캐시는 매번 비움
  • 옆 컷 말소리 반복, 드론 컷 엔진음 / 컷 경계를 넘어 남은 룸톤 / 룸톤 폐지, 경계 페이드
  • 컷마다 툭 / 25ms 페이드 겹침 구멍 / 40ms 핸들에 등파워 크로스페이드
  • 내레이션 26개가 끝으로 떠내려감 / 밀림이 연쇄 / 시퀀스 울타리, 비연쇄 폴백
  • +1.1dBTP 클리핑 / alimiter level 기본값 / level=disabled
  • 트루피크 재발 / loudnorm 뒤 alimiter 무력, 내장 aac 오버슈트 / numpy 브릭월과 aac_at
  • 내레이션 진입 때 배경이 뚝 / enable=between 즉시 스위칭 / numpy 램프
  • 4K 2.8초 드리프트 / 컷마다 마지막 프레임 유실 / tpad, setpts, trim, -frames:v
  • 1080p 96ms 드리프트 / -shortest / -frames:v와 -t
  • 4시간 무한 ffmpeg / 측정 패스에 apad / apad는 -t가 있는 렌더 패스에만
  • 파이썬 SSL 실패 / CA 번들 없음 / curl로 호출
  • 문자열 패치가 조용히 실패 / replace 미스 / 패치마다 assert
  • 낡은 썸네일 / 생성 코드 없음 / 최종본에서 자동 생성
  • BI 색이 죽음 / color-to-alpha / .ai를 알파 래스터로, 흰 플레이트
  • FCPXML 연결 클립 전멸 / DJI tmcd 타임코드를 무시 / 에셋 start는 타임코드, 클립 start는 타임코드 더하기 인점
  • 고쳤다고 세 번 잘못 보고 / 결함이 겹쳐 있음 / 새 빈 라이브러리에 임포트해 등록 대조 뒤에만 보고
  • 파이널컷 강제 종료 / 외부 접근성 앱과 검색창 재귀 버그 / XML 탓이 아님, 접근성 앱을 하나씩 꺼 본다

5일 동안 가장 크게 남은 건 기술이 아니라 태도였다.

“했다”는 말을 믿지 말고 파일을 열어서 재라. 사람에게도, AI에게도 똑같이. 이 태도는 영상 밖에서도 써먹었는데, 얼마 뒤 맥북이 타이핑을 놓치기 시작했을 때도 짐작으로 범인을 지목하는 대신 하나씩 껐다 켜며 재 봤다. 그리고 손목은 생각보다 오래 버텼다 :)

그리고 앞서 접어둔 검수툴 이야기는 다음 글에서 이어가려 한다.

마커가 가리키는 자리와 실제 화면이 두 프레임씩 어긋나서 한참을 헤맨 이야기, 같은 일을 하는 앱인데 맥용과 윈도우용의 크기가 150배 차이 나는 이야기, 그리고 마지막에 AI가 넘지 못한 문 하나가 남아 있다.

이 글 공유하기X페이스북스레드네이버 블로그

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다