본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 13:04

스스로 구축된 나의 비디오 생성 파이프라인

요약

Claude Code와 커스텀 설정인 Simona를 활용하여 단일 프롬프트로부터 비디오 생성 파이프라인을 구축한 사례를 소개합니다. 사용자의 개입 없이 이미지 생성, 음성 합성, 영상 편집(ffmpeg) 과정을 에이전트가 스스로 수행하며 복잡한 워크플로우를 완성했습니다.

핵심 포인트

  • Claude Code를 활용한 완전 자동화 비디오 제작 파이프라인 구축
  • Simona: 이미지, 비디오, 음성, 편집 기술을 통합한 커스텀 에이전트 설정
  • 다양한 AI 모델(OpenAI, Google, ElevenLabs 등)을 도구로 활용
  • WORKLOG.md를 통한 모든 프롬프트와 비용, 수정 사항의 재현 가능성 확보

멋진 것을 하나 보여드리겠습니다. 이 2분짜리 영상은 단 하나의 프롬프트(prompt)로부터 Claude Code가 구축했습니다.

음 — 하나의 프롬프트와 약 30번의 후속 프롬프트가 있었죠. 그리고 Claude Code가 git 명령어를 실수하여 제 영상 편집 자료의 절반을 날려버린 후(묻지 마세요) 20번의 추가 작업이 더 있었습니다. 하지만 여전히 꽤 멋진 일입니다. 왜냐하면 제가 수동으로 한 일이 단 하나도 없기 때문입니다. 이미지 에디터도, 비디오 타임라인도, 오디오 소프트웨어도, 도구 안에서 클릭을 해본 적도 없습니다. 그저 저와 Claude 사이의 대화였을 뿐입니다. 그리고 이미지를 생성하고, 목소리를 합성하고, 영상을 편집하고, 이 모든 것을 하나로 묶는 글루 코드(glue code)를 위해 사용된 모든 도구들을 Claude가 스스로 구축했습니다.

이것이 세상에서 가장 위대한 영상은 아니지만, 제 사이드 프로젝트의 규칙을 설명하는 데 있어서는 제 역할을 충분히 잘 해내고 있다고 생각합니다. 우리 둘이 함께 만들었습니다. 바로 저와 저의 고도로 커스텀된 Claude Code 설정인 Simona입니다. 저는 감독으로서의 결정 — "그 매우 상세한 이미지들은 효과가 없으니, 대신 칠판을 써보세요" — 을 내렸고, 그녀가 그 외의 모든 것을 수행했습니다.

"그 외의 모든 것"은 일련의 기술(skills) 키트입니다. 사용자가 앱을 사용하는 것처럼 Simona가 필요할 때마다 꺼내 쓰는 작고 독립적인 도구들입니다:

  • 이미지 생성 (Image generation) — 영상의 모든 정지 화면을 위해 OpenAI의 gpt-image-2와 Google의 Nano Banana 2 (gemini-3.1-flash-image)를 사용합니다.
  • 이미지-투-비디오 (Image-to-video) — 정지 영상을 몇 초간의 움직임으로 변환합니다. 모델별로 별도의 기술이 있습니다: Seedance 2.0 (여기서 주력으로 사용됨), Google의 Veo 3, Kling 3, 그리고 LTX-2.3.
  • 음성 (Voice) — 모델별로 별도의 기술이 있습니다: 최종 나레이션을 위한 ElevenLabs (가장 비싸지만 최고), 저렴한 초안 작성을 위한 Google의 Gemini TTS, 그리고 무료 테스트를 위해 로컬에서 실행되는 Kokoro.
  • ffmpeg — 이 모든 것의 밑단에 있는 편집 레이어입니다: 컷(cuts), 줌(zooms), 크로스페이드(crossfades), 오디오 믹스(audio mix)를 담당합니다.
  • 디렉터 (Director) — 다른 기술들을 하나로 묶는 메타 기술(meta-skill)입니다: 전체 파이프라인을 알고 있기 때문에, 단 하나의 상위 수준 요청(high-level ask)이 이미지, 음성, 비디오, 편집 단계로 순차적으로 펼쳐질 수 있습니다.

말하는 것보다 훨씬 간단합니다. 이 포스트의 나머지 내용은 우리가 이것을 어떻게 구축했는지에 대한 이야기입니다.

전체 과정은 프로젝트의 WORKLOG.md 파일만으로 재현 가능합니다. 이 파일은 900줄이 넘으며 모든 프롬프트(prompt), 모든 모델 호출(model call), 모든 비용, 그리고 모든 수정 사항을 포함하고 있습니다. 이야기가 더 선명해질 수 있도록 그 내용을 인용하겠습니다.

나타난 파이프라인

그것은 하나의 사소한 요청으로부터, 한 번에 하나의 기술씩 성장했습니다.

시작할 때 저는 아무것도 없었습니다. 파이프라인도, 기술도, 계획도 없었습니다 — 그저 Claude Code 세션 하나와 폴더에 담긴 몇 장의 이미지뿐이었습니다. 저의 첫 번째 요청은 거의 사소한 수준이었습니다: 이 이미지들을 가져와서 하나씩 차례대로 보여주고, 그 위에 내레이션을 읽어주는 음성을 재생해 달라는 것이었습니다. 그 하나의 요청이 모든 것을 시작하게 만들었습니다. 왜냐하면 이를 완수하기 위해 Simona에게는 아직 갖춰지지 않은 두 가지, 즉 음성을 만드는 방법과 이 모든 것을 비디오로 엮어내는 방법이 필요했기 때문입니다.

음성 우선

그래서 우리가 처음으로 구축한 기술은 **음성(voice)**이었습니다. 저는 텍스트 음성 변환 (TTS) API를 찾아 그 문서(documentation)를 세션에 그대로 붙여넣고 그녀에게 말했습니다:

기술(skill)을 연결하는 것은 쉬운 부분이었습니다. 실제 '목소리(voice)'를 고르는 것이 놀라울 정도로 어려운 작업이었습니다. 분명히, 목소리를 말로 설명하는 것은 쉽지 않았습니다. "깊고, 따뜻하며, 약간 불길한 느낌의 나이 든 영국인 남성"이라고 설명하면 수십 가지의 서로 다른 결과물이 나오는데, 그중 어느 것도 머릿속에 그리던 목소리가 아니었습니다. 그래서 저는 대신 ElevenLabs의 음성 라이브러리를 귀로 직접 들으며 찾아 나섰고, 영국인 스토리텔러 목소리인 George를 선택했습니다. 그는 기본 상태로는 늑대인간 진행자 느낌이 아니었기에, 피치(pitch)를 약 15% 낮추고 홀 에코(hall-echo) 필터를 적용했습니다. 그러자 갑자기 마치 돌 복도 저 멀리서 이빨이 너무 많은 무언가가 내레이션을 하는 듯한 소리가 들렸습니다. 그것이 영상 전체에서 들리는 내레이터의 목소리입니다. 실제 배우나 가수를 참조(reference)로 사용한다면 훨씬 더 효과적일 것이라고 생각합니다.

ffmpeg: 편집 내용을 설명하면 명령어를 생성합니다

그다음은 조립 단계였는데, 여기서 Simona는 제가 예상치 못한 것을 보여주었습니다. 저는 그녀에게 이미지와 오디오를 어떻게 합칠 것인지 물었고, 그녀는 그냥... ffmpeg 명령어를 작성했습니다. 알고 보니 LLM은 ffmpeg — 인간은 기억하지 못하는 수천 개의 플래그(flag)를 가진, 그 유명하고 난해한 도구 — 를 매우 잘 다룹니다. 사용자가 명령어를 직접 작성하는 것이 아니라, 편집 내용을 설명하면 그녀가 실행 명령(invocation)을 만들어냅니다. 심지어 그녀는 요청하지 않았음에도 각 정지 영상에 느린 줌(slow zoom) — 켄 번즈 효과 (Ken Burns effect) — 를 추가하기 시작했는데, 이미지가 4초 동안 가만히 있으면 죽어 있는 것처럼 보이기 때문이었습니다. 저는 그 방식이 마음에 들었습니다. 그것이 정지 이미지 효과 라이브러리의 시작이었습니다.

제가 "이 이미지에 머물면서 천천히 줌인해줘"라고 말하면, 실제로 실행되는 것은 다음과 같습니다:

ffmpeg -i doors.png -vf "zoompan=z='1+(1.4-1)*on/(frames-1)':d=100:\
x='iw/2-iw/zoom/2':y='ih/2-ih/zoom/2':s=3840x2160:fps=25,\
scale=1920:1080:flags=lanczos" -frames:v 100 scene.mp4

이걸 수동으로 작성하는 건 불가능합니다. zoompan에 대해 공부해야 하고, 왜 줌(zoom)이 전체 프레임 수에 대한 프레임당 분수(per-frame fraction)로 표현되는지 계산해야 하며, x/y 중앙 정렬을 위한 대수학(algebra)을 풀어내야 합니다. 그러고 나서 4K로 렌더링한 뒤 lanczos 방식으로 다운스케일링하지 않으면 느린 줌 동작에서 눈에 보이는 지터(jitter, 떨림)가 발생한다는 사실을 고생 끝에 깨닫게 될 것입니다. 혹은 각 음성 라인을 고유한 타임스탬프(timestamp)에 맞춰 배경음(ambient sound) 위에 믹싱하는 작업도 마찬가지입니다:

ffmpeg ... -filter_complex \
"[1:a]adelay=300|300[a1];[2:a]adelay=4500|4500[a2];[3:a]adelay=10000|10000[a3];\
[0:a][a1][a2][a3]amix=inputs=4:duration=first:normalize=0[out]" ...

맨 마지막에 있는 normalize=0 같은 디테일은 사람이 배우기 위해 한 시간의 시간과 포럼 스레드 하나를 통째로 써야 하는 종류의 것입니다. 이걸 빠뜨리면 amix는 모든 트랙의 볼륨을 입력 횟수로 조용히 나누어 버리기 때문에, 정성껏 녹음한 내레이션이 희미하게 들리는데 왜 그런지 이유조차 알 수 없게 됩니다. Simona는 이미 이 사실을 알고 있거나, 아니면 한 번 고생하며 배운 뒤 이를 기술(skill)로 작성하여 우리 중 누구도 다시는 이 문제로 넘어지지 않게 만들었습니다. 우리는 이 전체 접근 방식을 하나의 ffmpeg 기술(skill)로 고정시켰고, 이제 다른 모든 것들은 그 위에 놓이는 편집 레이어(editing layer)가 되었습니다.

이미지, 그리고 움직임

그 결과 작동하는 슬라이드쇼를 얻었고, 일단 그것이 가능해지자 욕심이 생겼습니다. 내가 원하는 샷을 정확히 생성할 수 있는데 이미지를 일일이 수동으로 찾는 것은 어리석게 느껴졌습니다. 그래서 우리는 같은 방식으로 이미지 생성 (image generation) 기술(skill)을 구축했습니다. 제공자의 문서(docs)를 붙여넣고, 괜찮은 이미지 하나를 얻으면, 그 경로(path)를 고정하는 방식입니다. 모든 방향의 켄 번즈(Ken Burns) 효과, 크로스페이드(crossfades), 세로형 이미지를 위한 느린 스크롤, 라이브 UI 위에 그려지는 애니메이션 하이라이트 등 효과 라이브러리는 한 번의 요청마다 하나씩 늘어갔습니다. 내가 새로운 것을 요구하면 그녀가 몇 가지 버전을 시도했고, 우리는 적절해 보이는 것은 무엇이든 남겨두었습니다. 아무도 그 효과 라이브러리를 계획하지 않았습니다. 그것은 자연스럽게 축적되었습니다.

그다음에는 정적인 프레임(static frames)만으로는 충분하지 않았습니다. 저는 결정적인 순간(hero moments)에 실제적인 움직임을 원했습니다. 망토를 쓴 인물이 후드를 벗거나, 저택의 문이 활짝 열리는 것 같은 장면 말이죠. 그리고 그것은 AI 생성 비디오(AI-generated video)를 의미했습니다. 여기서부터 비용은 더 이상 사소한 오차(rounding error) 수준이 아닙니다. 생성된 이미지 한 장은 몇 센트면 되지만, 5초 분량의 생성된 비디오는 모델에 따라 30센트에서 3달러 사이의 비용이 듭니다. 따라서 비디오의 전체적인 형태는 근본적으로 경제적 결정(economics decision)에 달려 있습니다. 만약 2분 전체를 AI 비디오로 생성했다면 엄청난 비용이 들었을 것입니다. 대신 저렴한 슬라이드쇼(slideshows)가 대부분의 실행 시간(runtime)을 차지하게 하고, 실제로 그럴 가치가 있는 소수의 샷에만 실제 비용을 투자합니다. 규칙 설명에는 슬라이드쇼를 사용하고, 후드를 벗는 장면에는 생성된 비디오를 사용하는 식입니다.

제가 만족할 만한 비디오 모델을 찾는 것은 다른 어떤 작업보다 오래 걸렸는데, 이 시장의 영역이 매우 혼란스럽기 때문입니다. 처음에는 Google의 Veo로 시작했습니다. 아주 아름답지만, 짧은 클립 하나에 약 3달러 정도 들어 지갑에 매우 가혹했습니다. 그다음에는 Kling으로 옮겼는데, 이는 5초에 약 1달러 정도가 드는 중국 모델로 많은 샷을 소화하기에 충분히 훌륭했습니다 (같은 가격대인 Wan도 시도해 보았으나 계속 사용하지는 않았습니다). 또한 LTX도 시도해 보았는데, 이는 아마 현재 출시된 오픈 소스(open-source) 비디오 모델 중 최고일 것이며, 5초 클립당 약 30~50센트 정도의 공식 API(official API)를 통해 이용할 수 있습니다. 오디오가 전혀 없지만, 그 점 덕분에 저렴한 테스트(dry runs)용으로 완벽합니다. 그리고 이 문장에서 "공식"이라는 단어는 매우 큰 의미를 갖는데, 왜냐하면 대부분의 모델에는 퍼스트 파티(first-party) API가 없기 때문입니다. 대신 자신들만의 기묘한 크레딧 시스템과 가격 책정을 가진 제3자 플랫폼(third-party platforms)을 거쳐야 하며, 신뢰할 수 있고 바가지가 아닌 플랫폼을 찾는 데 정말 많은 시간이 걸렸습니다. 제가 주력 모델(workhorse)로 정착한 것은 현재 이 분야의 최강자인 Seedance 2.0입니다.

생성형 AI (gen-AI) 비디오와 슬라이드쇼에서 통일된 목소리를 갖는 것은 reference-to-video 모델을 발견하기 전까지 큰 과제였습니다. 모델에 단일 정지 이미지와 프롬프트 하나만 전달하는 대신, 여러 장의 참조 이미지(reference images), 원하는 목소리 샘플, 그리고 전체적인 움직임과 말하는 방식을 설명하는 프롬프트를 함께 제공합니다. 이를 통해 일관성을 얻을 수 있었습니다. 캐릭터는 샷이 바뀔 때마다 동일한 캐릭터로 유지되며, 슬라이드쇼 내레이션을 이끄는 것과 동일한 목소리로 말합니다. 하나의 목소리를 선택해 말하는 슬라이드에 사용하고, 이를 비디오 모델의 참조(reference)로 입력하면, 생성된 클립과 정적인 섹션 사이의 경계가 더 이상 도드라져 보이지 않게 됩니다. 전체 과정이 마치 한 명의 화자가 하나의 세계를 안내하는 것처럼 느껴집니다.

기술(Skills)은 흉터의 수집이다

우리가 벽에 부딪힐 때마다, 그 해결책은 다시 기술(skill)로 들어갔습니다. 이름 근처의 em-dash(—)에서 막히는 음성 모델, 고해상도에서 떨리는 줌(zoom), 파라미터를 조용히 무시하는 이미지 엔드포인트(endpoint) — 이 각각은 SKILL.md에 기록된 주의 사항(gotcha)이 되어, 그녀가 같은 실수를 두 번 반복하지 않도록 했습니다. 기술들은 기본적으로 흉터의 수집과 같습니다.

이상한 점은 제가 실제로 이 기술들을 들여다보는 일이 거의 없다는 것입니다. 파일을 여는 일은 거의 없습니다. 그저 가끔 그녀에게 기술들을 재검토하고 정리하라고 요청할 뿐이며, 하나가 방대하고 엉망인 상태로 커지면 리팩터링(refactor)하도록 시킵니다. 결국 저는 이를 Claude Code 훅(hook)으로 연결하여, 제가 기억하기를 기다리는 대신 그녀가 자신의 일정에 맞춰 집안일(housekeeping)을 수행하도록 만들었습니다. 물론 이는 기술이 필요할 만큼 충분히 커졌을 때만 제 역할을 합니다. 대부분은 작게 유지됩니다.

이 비디오를 만드는 행위 자체가 바로 그 기술들을 구축하는 행위였습니다. 기술은 지속 가능한 결과물이며, 비디오는 단지 영수증일 뿐입니다.

실제 비용

총 45달러, 그리고 그중 대부분은 당신이 결코 보지 못할 시도들에 들어갔습니다.

영수증 이야기가 나와서 말인데 — 어느 시점부터는 비용이 충분히 중요해졌고, 그래서 Simona에게 실제 비용 추적 시스템 (cost-tracking system)을 구축하도록 했습니다. 생성된 이미지 한 장은 푼돈에 불과하지만, 음성은 비용이 쌓이고 비디오는 매우 빠르게 비싸집니다 — 클립 하나당 1달러에서 3달러까지 들 수 있습니다. 그래서 그녀는 이제 자신이 수행하는 모든 API 호출을 실행 중인 장부(ledger)에 기록합니다: 타임스탬프, 서비스, 모델, 호출 목적, 그리고 예상 달러 금액입니다. 이는 처음에는 청구서에 놀라지 않기 위한 방법으로 시작되었지만, 결과적으로 제가 이 비디오가 정확히 얼마의 비용이 들었는지 항목별로 말씀드릴 수 있게 해주는 도구가 되었습니다.

상단에 삽입된 최종 완성본인 2분 분량의 확정 편집본(locked two-cut)을 제작하는 데는 $27.76이 들었습니다. 이는 제가 작업을 시작한 날부터 최종 편집을 확정한 날까지의 이번 반복(iteration) 과정만을 계산한 것이며, 그 과정에서 발생한 수많은 막다른 길(dead ends)들도 이미 포함되어 있습니다.

AI Werewolf의 전체 창작 작업 — 비디오의 모든 이전 버전, 게임의 커버 아트, 역할 일러스트레이션, 성과 없이 끝난 실험들 — 으로 시야를 넓혀보면 총액은 $45.26입니다. 서비스별 지출 내역은 다음과 같습니다:

  • ElevenLabs — 내레이터 George, 모든 음성 대사: $12.44
  • OpenAI gpt-image-2 — 대부분의 스틸 이미지, 모든 초크 슬라이드: $10.83
  • fal.ai Seedance — 생성된 비디오 클립: $10.29
  • Google Veo — 이전 편집본에서 진행한 더 비싼 비디오 실험: $6.40
  • Google Gemini — 초안 이미지 및 초안 내레이션: $3.80
  • LTX — 저렴한 오픈 소스 (open-source) 비디오 모델, 주로 테스트용: $1.40
  • fal lip-sync — 짧은 테스트 1회: $0.10

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0