본문 바로가기

AI Development

Veo 3.1 Lite 완전 가이드 — Gemini API로 AI 영상 생성

반응형

OpenAI가 Sora를 종료한 2026년. 구글 Veo가 AI 영상 생성 시장을 사실상 독점하고 있습니다. 그 중 가장 저렴한 Veo 3.1 Lite를 실전 코드로 정리했습니다.

[핵심 요약]
→ 출시: 2026년 3월 31일 (Gemini API + Google AI Studio)
→ 모델 ID: veo-3.1-lite-generate-preview
→ 가격: Veo 3.1 Fast 대비 50% 이하 — 가장 저렴한 Veo 티어
→ 입력: 텍스트 프롬프트 + 이미지 (JPEG, PNG)
→ 출력: 영상 + 네이티브 오디오 (별도 합성 불필요)
→ 해상도: 720p, 1080p (4K 미지원 — Pro 티어만 가능)
→ 비율: 16:9 (가로), 9:16 (세로 — Shorts/Reels/TikTok)
→ 길이: 최대 8초
→ 워터마크: SynthID 자동 삽입 (AI 생성물 표시)
→ 제한: 영상 연장(Extension) 미지원 — Pro/Fast 전용

 


Veo 3.1 패밀리 — 뭘 골라야 하나

Veo 3.1 Lite:
→ 가장 저렴 (Fast 대비 50% 이하)
→ 고볼륨 파이프라인, 프로토타이핑, A/B 테스트
→ 720p/1080p, 8초, 오디오 포함
→ 4K/영상 연장/Extension 미지원

Veo 3.1 Fast:
→ 중간 가격, 빠른 속도
→ 대부분의 프로덕션 케이스
→ 4K, 영상 연장 지원

Veo 3.1 Pro:
→ 최고 품질, 최고 가격
→ 4K, 영상 연장, 복잡한 카메라 무브먼트
→ 고엔드 크리에이티브/엔터프라이즈
[선택 기준]
→ 대량 생성, 비용 최우선 → Veo 3.1 Lite
→ 품질/비용 균형 → Veo 3.1 Fast
→ 최고 품질, 4K, 영상 연장 → Veo 3.1 Pro
→ 프로토타이핑/테스트 → Lite로 시작 후 Fast/Pro 전환

실전 1 — 설치 및 기본 텍스트-to-영상

# Google Generative AI SDK 설치
pip install google-generativeai

# API 키 설정
export GEMINI_API_KEY="your-api-key"
# Google AI Studio (aistudio.google.com) → API Key 발급
# 주의: 유료 플랜 필수, 무료 티어 미지원
import time
from google import genai
from google.genai import types

client = genai.Client(api_key="YOUR_GEMINI_API_KEY")

def generate_video(
    prompt: str,
    output_path: str = "output.mp4",
    aspect_ratio: str = "16:9",  # "16:9" 또는 "9:16"
    resolution: str = "720p",    # "720p" 또는 "1080p"
    duration: int = 8            # 최대 8초
) -> str:
    """
    텍스트 프롬프트로 영상 생성
    """
    print(f"영상 생성 시작: {prompt[:50]}...")

    # 비동기 작업 시작
    operation = client.models.generate_videos(
        model="veo-3.1-lite-generate-preview",
        prompt=prompt,
        config=types.GenerateVideoConfig(
            aspect_ratio=aspect_ratio,
            duration_seconds=duration,
            resolution=resolution,
            person_generation="allow_all",  # 사람 포함 허용
        )
    )

    # 완료될 때까지 폴링 (보통 60~120초 소요)
    print("생성 중... (60~120초 소요)")
    while not operation.done:
        time.sleep(10)
        operation = client.operations.get(operation)
        print(".", end="", flush=True)

    print("\n생성 완료!")

    # 영상 다운로드
    video = operation.result.generated_videos[0].video
    client.files.download(file=video, download_path=output_path)

    print(f"저장 완료: {output_path}")
    return output_path


# 사용 예시
generate_video(
    prompt="""
    A software developer typing code at night,
    multiple monitors glowing, focused expression,
    cinematic close-up shot, soft blue lighting,
    ambient keyboard sounds
    """,
    output_path="developer.mp4",
    aspect_ratio="16:9",
    resolution="1080p"
)
[폴링 방식 이해]
→ 영상 생성은 Long Running Operation (LRO)
→ 즉시 결과가 오지 않음 — operation.done이 True될 때까지 반복 확인
→ 평균 60~120초 소요 (8초 영상 기준)
→ 터미널 닫아도 됨 — 클라우드에서 비동기 실행
→ operation ID 저장해두면 나중에 결과 조회 가능

실전 2 — 이미지-to-영상 (Image to Video)

정적 이미지를 움직이는 영상으로 변환합니다. 제품 사진, 브랜드 이미지 활용에 유용합니다.

import base64
from pathlib import Path

def image_to_video(
    image_path: str,
    prompt: str = "",
    output_path: str = "output.mp4",
    aspect_ratio: str = "16:9"
) -> str:
    """
    이미지 + 텍스트 프롬프트로 영상 생성
    """
    # 이미지 로드
    image_data = Path(image_path).read_bytes()
    image_b64 = base64.b64encode(image_data).decode("utf-8")

    # 확장자로 미디어 타입 결정
    ext = Path(image_path).suffix.lower()
    media_type = "image/jpeg" if ext in [".jpg", ".jpeg"] else "image/png"

    operation = client.models.generate_videos(
        model="veo-3.1-lite-generate-preview",
        prompt=prompt,
        image=types.Image(
            image_bytes=base64.b64decode(image_b64),
            mime_type=media_type
        ),
        config=types.GenerateVideoConfig(
            aspect_ratio=aspect_ratio,
            duration_seconds=8,
            resolution="1080p",
        )
    )

    while not operation.done:
        time.sleep(10)
        operation = client.operations.get(operation)

    video = operation.result.generated_videos[0].video
    client.files.download(file=video, download_path=output_path)

    return output_path


# 사용 예시 — 제품 사진 애니메이션
image_to_video(
    image_path="product.jpg",
    prompt="Slowly rotating product shot, studio lighting, subtle zoom in",
    output_path="product_animation.mp4",
    aspect_ratio="16:9"
)

# Shorts/Reels용 세로 영상
image_to_video(
    image_path="thumbnail.jpg",
    prompt="Dynamic intro animation, energetic movement",
    output_path="shorts_intro.mp4",
    aspect_ratio="9:16"  # TikTok/Reels/Shorts
)
[이미지-to-영상 활용 케이스]
→ 제품 사진 → 광고 영상 자동화
→ 블로그 썸네일 → 유튜브 인트로
→ 브랜드 로고 → 애니메이션 오프닝
→ 스크린샷 → 앱 데모 영상
→ Shorts/Reels 대량 생성 파이프라인

실전 3 — 배치 영상 생성 파이프라인

여러 프롬프트를 순차적으로 처리하는 자동화 파이프라인입니다.

import json
import asyncio
from pathlib import Path

async def batch_generate_videos(
    prompts: list[dict],
    output_dir: str = "videos"
) -> list[dict]:
    """
    여러 프롬프트 배치 처리
    prompts 형식: [{"id": "001", "prompt": "...", "ratio": "16:9"}, ...]
    """
    Path(output_dir).mkdir(exist_ok=True)
    results = []

    for item in prompts:
        video_id = item.get("id", f"video_{len(results)}")
        prompt = item["prompt"]
        ratio = item.get("ratio", "16:9")
        output_path = f"{output_dir}/{video_id}.mp4"

        print(f"\n[{video_id}] 생성 시작")

        try:
            # 작업 시작
            operation = client.models.generate_videos(
                model="veo-3.1-lite-generate-preview",
                prompt=prompt,
                config=types.GenerateVideoConfig(
                    aspect_ratio=ratio,
                    duration_seconds=8,
                    resolution="720p",  # 배치는 720p로 비용 절감
                )
            )

            # 완료 대기
            while not operation.done:
                time.sleep(15)
                operation = client.operations.get(operation)

            # 저장
            video = operation.result.generated_videos[0].video
            client.files.download(file=video, download_path=output_path)

            results.append({
                "id": video_id,
                "status": "success",
                "path": output_path,
                "prompt": prompt
            })
            print(f"[{video_id}] 완료: {output_path}")

        except Exception as e:
            results.append({
                "id": video_id,
                "status": "failed",
                "error": str(e),
                "prompt": prompt
            })
            print(f"[{video_id}] 실패: {e}")

    # 결과 저장
    with open(f"{output_dir}/results.json", "w", encoding="utf-8") as f:
        json.dump(results, f, ensure_ascii=False, indent=2)

    success = sum(1 for r in results if r["status"] == "success")
    print(f"\n배치 완료: {success}/{len(prompts)} 성공")
    return results


# 사용 예시 — SNS 콘텐츠 대량 생성
prompts = [
    {
        "id": "intro_001",
        "prompt": "Tech startup office, developers collaborating, energetic atmosphere, 4K cinematic",
        "ratio": "16:9"
    },
    {
        "id": "shorts_001",
        "prompt": "Close up of hands typing on mechanical keyboard, satisfying sound effects, vertical format",
        "ratio": "9:16"
    },
    {
        "id": "product_001",
        "prompt": "AI robot working alongside human developer, futuristic office, blue glow",
        "ratio": "16:9"
    },
]

# 실행
import asyncio
results = asyncio.run(batch_generate_videos(prompts, output_dir="output_videos"))
[배치 처리 팁]
→ 720p로 배치 → 마음에 드는 것만 1080p로 재생성
→ 한 번에 5개 이상: 순차 처리 권장 (API 레이트 리밋)
→ operation ID 저장: 실패 시 결과 재조회 가능
→ 비용 추적: results.json으로 성공/실패/비용 관리

실전 4 — 효과적인 프롬프트 작성법

Veo 3.1의 프롬프트는 영상 연출을 구체적으로 지시할수록 좋습니다.

# ❌ 나쁜 프롬프트 — 너무 짧고 모호
bad_prompt = "개발자 영상"

# ✅ 좋은 프롬프트 — 피사체 + 배경 + 카메라 + 조명 + 분위기 + 사운드
good_prompt = """
A Korean software developer in their 30s typing code,
dual monitors showing Python code and terminal,
modern home office at night,
soft amber desk lamp lighting,
slow push-in camera movement,
ambient keyboard clicks and fan noise,
cinematic 1080p quality
"""

# 프롬프트 구성 요소
prompt_elements = {
    "피사체": "A software developer / 황금 리트리버 / 커피 한 잔",
    "배경/환경": "modern office / beach at sunset / Tokyo street at night",
    "카메라": "slow push-in / aerial shot / close-up / tracking shot",
    "조명": "soft amber / blue neon / natural sunlight / studio lighting",
    "분위기": "calm / energetic / mysterious / professional",
    "사운드": "ambient keyboard / coffee shop noise / rain sounds / upbeat music",
    "품질": "cinematic / 4K quality / film grain / shallow depth of field"
}
[Veo 3.1 프롬프트 공식]
→ [피사체 + 행동] + [배경/환경] + [카메라 무브먼트] + [조명] + [사운드] + [품질]
→ 영어 프롬프트가 한국어보다 품질 높음
→ 카메라 무브먼트 명시하면 더 다이나믹한 결과
→ 사운드 지시어 포함하면 오디오 품질 향상
→ "cinematic" 키워드: 영상 품질 전반 향상

가격 및 경쟁사 비교

# 2026년 4월 기준 AI 영상 생성 API 가격 비교
# 단위: USD / 초

pricing = {
    "Veo 3.1 Lite": {
        "720p": "$0.05/초",
        "1080p": "$0.10/초",
        "8초 영상 기준": "$0.40~0.80",
        "특징": "가장 저렴, 오디오 포함"
    },
    "Veo 3.1 Fast": {
        "720p": "$0.10/초",
        "1080p": "$0.20/초",
        "4K": "$0.40/초",
        "8초 영상 기준": "$0.80~3.20",
        "특징": "영상 연장 지원"
    },
    "Veo 3.1 Pro": {
        "가격": "Veo Fast 2배 이상",
        "특징": "최고 품질, 4K, 복잡한 카메라"
    },
    "Runway Gen-4": {
        "가격": "Veo Fast 대비 높음",
        "특징": "고품질 특화"
    },
    "Kling 2.0": {
        "가격": "중간",
        "특징": "중국산, 특정 장르 강점"
    },
    "Sora": {
        "상태": "2026년 초 서비스 종료",
        "대안": "Veo 3.1"
    }
}
[가격 핵심 정리]
→ Veo 3.1 Lite 720p: $0.05/초 — 8초 영상 $0.40
→ 월 100개 생성 기준 (8초): $40 (720p Lite)
→ Sora 종료로 Veo가 사실상 시장 표준
→ 네이티브 오디오 포함 — 별도 TTS/사운드 합성 비용 없음

SynthID 워터마크 — 알아야 할 것

# SynthID란?
"""
Google DeepMind가 개발한 AI 생성물 디지털 워터마크
- 사람 눈에 보이지 않는 픽셀 레벨 마킹
- AI 감지 소프트웨어로 탐지 가능
- Veo 3.1 전 모델에 자동 삽입 (제거 불가)
- 규제/컴플라이언스 목적: AI 생성물 표시 의무화 대비
"""

# 개발자 관점에서 의미하는 것
synthid_implications = {
    "제거 불가": "후처리로 제거 시도해도 탐지 가능",
    "상업 이용": "워터마크 포함된 채로 상업 이용 가능",
    "규제 대응": "EU AI Act 등 AI 생성물 표시 요건 충족",
    "오탐 가능성": "일부 영상 편집 후에도 워터마크 유지"
}

마무리

✅ Veo 3.1 Lite 써야 할 때
→ SNS 콘텐츠 대량 자동 생성 (Shorts/Reels/TikTok)
→ 프로토타이핑 — 아이디어 빠르게 영상으로 확인
→ 제품 사진 → 광고 영상 파이프라인
→ A/B 테스트 — 여러 버전 저렴하게 생성
→ 블로그/뉴스 기사 → 영상 요약 자동화
→ 앱 데모, 온보딩 영상 자동 생성

❌ 다른 티어를 써야 할 때
→ 4K 고품질 필요 → Veo 3.1 Fast/Pro
→ 영상 연장 (8초 이상) → Veo 3.1 Fast/Pro
→ 복잡한 카메라 워크 → Veo 3.1 Pro
→ 무료로 테스트 → Google AI Studio 무료 크레딧 확인 후 시작
→ 실시간 영상 (< 5초 응답) → 현재 불가 (60~120초 소요)

 


관련 글

 

Gemini 3.1 Flash TTS 완전 가이드 — 자연어로 AI 목소리를 연출하는 법

"긴장감 있게 읽어줘", "여기서 잠깐 멈춰", "속삭이듯이". 이제 이 말 한 마디로 AI 목소리를 연출할 수 있습니다.[핵심 요약]→ 출시: 2026년 4월 15일 (Google, 프리뷰)→ 핵심: SSML 없이 자연어로 음성

cell-devlog.tistory.com

 

 

Gemini CLI 가이드 — Claude Code 대신 $0에 쓰는 법

Claude Code Pro는 월 $20이에요. Gemini CLI는 $0이에요.Google 계정만 있으면 됩니다.무료 한도:- 분당 60 요청- 하루 1,000 요청- 1M 토큰 컨텍스트 윈도우- Gemini 3 모델 (최신 버전)- API 키 설정 불필요뭘 할

cell-devlog.tistory.com

 

 

반응형