AI 영상 절반을 이미지로 바꿨다 — 비용도 워터마크도 같이 해결됐다

피사체가 변하지 않는 컷을 영상으로 뽑는 건 낭비다. 이미지 한 장에 느린 줌을 주면 구분이 안 되고, 값은 6분의 1이며, 워터마크도 안 붙는다.

피사체가 변하지 않는 컷을 영상으로 뽑는 건 낭비입니다. 이미지 한 장에 느린 줌을 주면 시청자는 영상과 구분하지 못하고, 값은 6분의 1이며, 워터마크도 붙지 않습니다. 3편(닉스타말화)을 만들며 이 방식이 자리 잡았습니다.
3편에서 무엇이 달라졌나
3편은 25컷 중 이미지 8장, 영상 8개로 나눴습니다. 인류학 소재라 정물이 많았던 덕이기도 합니다 — 추상 렌더 위주인 심리학 편(1·2편)은 여전히 영상이 훨씬 많습니다.
| 개수 | 단가 | 합계 | |
|---|---|---|---|
| 영상(플로우 크레딧) | 8 | 348원 | 2,784원 |
| 이미지(API) | 8 | 약 61원 | 487원 |
| 합계 | 16 | 3,271원 | |
| 전부 영상이었다면 | 11 | 3,828원 |
절감액(557원)이 이 방식의 핵심은 아닙니다. 진짜 이득은 워터마크가 없는 것과, 명령 한 줄로 8장이 나오는 것입니다.
판단 기준 하나 — 피사체가 변하는가
변하면 영상, 카메라만 움직이면 이미지입니다. 이 한 문장이 이 글의 뼈대입니다.
| 쓰는 것 | 3편의 예 | |
|---|---|---|
| 피사체가 그대로, 카메라만 움직임 | 이미지 | 옥수수 정물 · 농가 · 병동 · 묘지 · 유리병 · 토르티야 · 부두 자루 · 마당 냄비 |
| 피사체가 변한다 | 영상 | 현미경 초점 · 점 무리가 갈라짐 · 알약 빚는 손 · 결합이 풀림 · 끓는 냄비 · 제분 롤러 |
| 한 컷에 여러 장면 | 영상(멀티샷) | — |
애매하면 컷 길이로 가릅니다 — 4초를 넘으면 정지 화면이 죽습니다.
왜 웹 UI가 아니라 API인가 — 워터마크가 갈린다
| 플로우 웹 UI | Gemini API | |
|---|---|---|
| 가시 워터마크 | Pro 요금제는 붙는다(가로 83%·세로 90%·밝기 96/255) | 안 붙는다(실측) |
| 조작 | 브라우저에서 한 장씩 | 명령 한 줄로 8장 |
| 비율 | 설정 패널 | imageConfig.aspectRatio: "9:16" |
| 속도 | — | 장당 9~12초 |
SynthID(비가시)는 API 결과물에도 들어갑니다. 가시 표시만 없는 것이고, 유튜브 합성 콘텐츠 고지는 그대로 합니다. 이 구분을 흐리면 안 됩니다.
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' -d '{
"contents":[{"parts":[{"text":"..."}]}],
"generationConfig":{"responseModalities":["IMAGE"],"imageConfig":{"aspectRatio":"9:16"}}
}'
응답의 candidates[].content.parts[].inlineData.data가 base64 JPEG입니다. 출력은 768×1376 — 9:16(0.5625)에 0.558로 거의 정확합니다.
| 모델 | 별명 |
|---|---|
gemini-3.1-flash-image | Nano Banana 2 — 기본값 |
gemini-3-pro-image | Nano Banana Pro |
gemini-3.1-flash-lite-image | Nano Banana 2 Lite |
gemini-2.5-flash-image | Nano Banana |
키는 스킬·저장소 밖에 둡니다. 스킬은 공유·커밋되는 물건이기 때문입니다.
이미지 프롬프트는 영상과 다르게 쓴다
| 영상 | 이미지 | |
|---|---|---|
| 동사 | dollies forward, splits into | 쓰지 않는다 |
| 시간 | Shot 1 (0-3s) | 없다 |
| 구도 | 움직임의 시작/끝 | 최종 한 컷만 |
| 여백 | — | 줌·팬 여유를 둔다 |
여백이 가장 자주 빠뜨리는 것입니다. 피사체를 꽉 채우면 확대할 때 가장자리가 잘립니다. generous empty space around ...를 명시합니다.
Negative:가 안 먹습니다. 이 API는 그걸 프롬프트의 일부로 그냥 읽습니다. Do not include any text, numbers, hands, faces or people. 같은 평서문이 훨씬 잘 먹습니다.
정지 이미지에 움직임 주기 — 실측으로 고친 규칙
처음엔 "3초에 6% 이내"라는 규칙 하나로 줌과 팬을 다 다뤘습니다. 틀렸습니다.
| 값 | 왜 | |
|---|---|---|
| 줌 | 3초에 6% 이내 | 더 크면 억지로 움직이는 티가 난다 |
| 팬 | 116%로 확대해 두고 민다 | 105%로는 이동 여백이 화면 폭의 5%(약 34px)뿐 |
105% 팬은 5초 동안 34px 움직입니다. 정지 화면과 구분이 안 됐습니다. 116%로 올리니 화면이 흐릅니다.
zoompan=z='1.00+0.06*on/(N-1)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=1:s=720x1280:fps=24
팬은 z를 1.16으로 고정하고 x를 (iw-iw/1.16)*on/(N-1)로 밉니다. d=1로 두고 on(출력 프레임 번호)으로 계산합니다. zoompan 기본값은 떨림이 생깁니다.
남는 문제 — 톤 일관성
이미지와 영상이 섞이면 톤이 튀는 컷이 생깁니다. 3편에서 이미지 한 장만 밝기 146으로 나머지(55~120)보다 밝고 채도가 높았습니다. 같은 스타일 문장을 붙였는데도 그랬습니다. 재생성보다 편집기 보정이 싸고 정확합니다. 61원 아끼자고 다시 뽑을 이유가 없습니다.
105% 팬은 5초 동안 34px 움직인다. 정지 화면과 구분이 안 된다.
절감액이 핵심이 아니다. 워터마크가 없는 것과, 명령 한 줄로 8장이 나오는 것이다.
이 시리즈는 제가 실제로 만든 유튜브 쇼츠(1편 완성본 보기)의 제작 기록입니다. 문화인류학·심리학 소재로 상식을 뒤집는 지식 쇼츠를 만듭니다.
발행 2026-08-20 · 최종 확인 2026-08-20