just take a walk — 제작기

🎬 영상: https://youtu.be/ED2PEiQC3p8

Daniel × Scott 인디 어쿠스틱 듀오의 첫 뮤비. Chillwave 톤, 노을·로드무비 컨셉. 곡 2:49, 영상 170초, 1920×1080 / 30fps.


시작 — “그냥 산책 같은 곡인데”

곡은 Daniel 보컬에 어쿠스틱한 챌웨이브였다. 가사는 “오늘 나 좀 심심해, 길을 마냥 걷는데” 로 시작해 “붉은 노을이 나를 안아” 로 흘러간다. 처음 들으면 그냥 잔잔한 산책 곡 같지만, 노을이 가슴을 데우는 따뜻한 멜랑꼴리가 깔려있다.

컨셉 한 줄: 노을 + 길 걷기 + 따뜻한 멜랑꼴리 + 일상 회복.

채널의 다른 영상들이 AI·코딩 톤이라 결이 다른 감성 실험이기도 했다.

캐릭터 — 듀오를 진짜 듀오답게

처음엔 한 프롬프트에 두 캐릭터를 같이 묘사해 시트를 만들었다. 결과는 묘하게 닮은 두 사람. AI가 같은 프레임 안의 얼굴을 비슷하게 그리는 경향이 있었다.

해결: 솔로 시트를 따로 생성. 인상이 분리되면서 듀오로 같이 찍어도 둘이 명확히 다른 사람으로 보였다.

캐릭터인상
Daniel22세 동안 베이비페이스, 둥근 얼굴 + 큰 눈, 어깨까지 오는 곱슬머리, 빈티지 크림 셔츠 + 베이지 카디건
Scott26세, 좁은 길쭉한 얼굴 + 각진 턱, 또렷한 광대 + 날카로운 아몬드 눈, 짧은 검은 머리, 데님 자켓 + 화이트 티

씬 구성 — 듀오 1/3 비율

처음 시안은 20씬 중 듀오가 14씬이었다. 너무 많았다. 듀오만 계속 나오면 각자의 감정이 안 살았다.

재배치 후: Daniel solo 8 / Scott solo 4 / Duo 7 / Environment 1.

가사 arc에 맞춰 솔로와 듀오를 교차 — *“해가 지고 있었고”*는 Daniel solo, *“붉은 노을이 나를 안아”*는 듀오 wide together.

영상 생성 — ChatGPT image로 그리고 Grok Imagine으로 움직이기

각 씬은 두 단계로 만들었다.

  1. ChatGPT image 2.0(gpt-image-2) — 캐릭터 시트를 참조 첨부해 키 프레임 이미지 한 장 생성. 빛·구도·표정까지 정해진 그림을 먼저 확정.
  2. Grok Imagine 에이전트 모드 — 그 키 프레임을 입력으로 짧은 영상 클립으로 움직임 추가.

총 19개 클립 완성 (Scene 17은 컨셉 안 맞아서 drop).

가장 까다로웠던 건 Scene 10 — “듀오 바닷가 뛰기 splash”. 처음 만든 건 클립 퀄이 약했고, 다시 만든 건 발이 꼬이는 컷이 들어갔다. 결국 같은 씬 클립을 세 번 만들고서야 OK가 나왔다.

이 한 컷 때문에 v9 → v10 → v11 세 번 렌더했다.

조립 — Remotion 컴포지션 (v1 → v11)

영상은 Remotion으로 React/TypeScript 코드처럼 조립했다.

단계별 진화

  • v1: 스틸 이미지 + Ken Burns + 0.53s 크로스페이드 + BGM. 첫 프로토타입.
  • v2: NowPlayingWidget 추가. EQ 비주얼라이저 + 곡 제목 + Daniel & Scott 부제 + 프로그레스 바.
  • v3: EQ만 페이드 인/아웃 — 의도와 달랐다.
  • v4: 전체 OverlayLayer로 페이드 인 1.5s / 페이드 아웃 3s.
  • v5: 부제 텍스트 정정 — 캐릭터를 가수로, 우리는 제작자.
  • v6: 19개 AI 클립 (ChatGPT image + Grok Imagine) 첫 통합. 새 씬 순서.
  • v7: 마지막 씬 playbackRate 0.67x — 8s 클립을 12s Sequence에 자연스럽게 펼침.
  • v8: 인터레이스 스캔라인 + CRT 비네트 추가. “딱 브라운관~!” 톤.
  • v9: CRT 전원 끄기 효과 — 마지막 0.6초에 화면이 수직 수축 → 가로선 → 점 → opacity 0.
  • v10, v11: Scene 10 클립 두 차례 재교체.

기술 함정 — 그리고 그 해결

1. AI 비디오 클립 frame seek 흔들림

Grok Imagine 출력은 가변 프레임레이트(VFR)에 B-frame이 들어있어 Remotion에서 seek할 때 미묘하게 흔들렸다. AI 비디오 모델 출력 전반에 흔한 문제.

해결: ffmpeg로 strict CFR 재인코딩.

-vf scale=1264:720,fps=30
-bf 0 -g 30 -keyint_min 30 -sc_threshold 0
-vsync cfr -an -c:v libx264 -crf 18

B-frame 제거 + 키프레임 30프레임마다 + 강제 CFR.

2. 단일 클립 스왑 워크플로

Scene 10을 두 번 갈았다. 매번 19개 전체 클립 작업할 순 없었다.

워크플로:

  1. 새 클립 → 같은 파일명으로 덮어쓰기
  2. ffmpeg strict CFR 재인코딩
  3. Remotion 렌더 (5분)
  4. YouTube unlisted 업로드 (5분)

이 사이클이 안정적이라 향후 단일 컷 패치는 부담이 적다.

3. CRT 효과 위에 인터레이스

인터레이스 스캔라인 + CRT 비네트 + 플리커. 1264×720 클립을 1920×1080으로 업스케일하면서 생기는 노이즈를 가리는 동시에, 챌웨이브 무드를 강화했다.

결론: 효과 자체보다 왜 그 효과를 쓰는지가 더 중요했다 — 노이즈 가림 + 무드.

도구 스택

단계도구
캐릭터 시트OpenAI Codex CLI (gpt-image-2)
씬 키프레임 (이미지)ChatGPT image 2.0 (gpt-image-2)
씬 영상화Grok Imagine (에이전트 모드)
클립 정규화ffmpeg (strict CFR 재인코딩)
영상 조립Remotion (React/TypeScript)
BGM(곡 작업자 측)
렌더Remotion CLI
업로드Python google-api-python-client

학습한 것들

  1. 듀오 캐릭터 시트는 따로 생성 — 한 프롬프트에 같이 넣으면 인상이 닮아짐.
  2. 참조 첨부 시 포즈 복제 위험-i 참조는 그림체·색감은 좋지만 포즈/구도까지 복제됨. 명시적 분리 지시 필요.
  3. 참조 이미지의 aspect ratio = 출력 ratio — 16:9 결과 원하면 16:9 시트 만들 것.
  4. AI 영상 클립은 strict CFR로 정규화 — Remotion 같은 frame-precise 도구에선 VFR이 미묘한 흔들림을 만든다.
  5. 단일 클립 스왑 사이클 — 한 컷만 갈아도 전체 워크플로(재인코딩→렌더→업로드)는 그대로. 사이클이 짧으면 퀄리티에 더 까다로워질 수 있다.
  6. 효과의 이유 — CRT/인터레이스가 “예뻐서”가 아니라 해상도 한계 가림 + 무드 강화라는 두 목적을 동시에 풀어줘서 채택한 것. 이유가 분명한 효과만 살아남았다.

다음 작품 후보

  • 같은 채널의 다른 곡 (없으면 신규 곡 작업)
  • Daniel·Scott 듀오 유지하거나, 새 캐릭터로 분기
  • 컨셉: 야간 도시 / 비 / 카페 — 노을 다음의 무드

관련 노트