Veo 3는 텍스트 프롬프트에서 고화질의 8초 분량 720p 동영상을 생성하는 Google의 최신 모델로, 놀라운 사실성과 기본적으로 생성된 오디오가 특징입니다. Veo 3는 다양한 시각적 및 시네마틱 스타일을 지원합니다. 아래 예시를 선택하여 대화, 영화 같은 사실감 또는 창의적인 애니메이션이 포함된 동영상을 생성하는 방법을 알아보세요.
이미지에서 동영상 생성
다음 코드는 Imagen을 사용하여 이미지를 생성한 다음 해당 이미지를 동영상의 시작 프레임으로 사용하는 방법을 보여줍니다.
Python
import time
from google import genai
client = genai.Client()
prompt = "Panning wide shot of a calico kitten sleeping in the sunshine"
# Step 1: Generate an image with Imagen
imagen = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
)
# Step 2: Generate video with Veo 2 using the image
operation = client.models.generate_videos(
model="veo-2.0-generate-001",
prompt=prompt,
image=imagen.generated_images[0].image,
)
# Poll the operation status until the video is ready
while not operation.done:
print("Waiting for video generation to complete...")
time.sleep(10)
operation = client.operations.get(operation)
# Download the video
video = operation.response.generated_videos[0]
client.files.download(file=video.video)
video.video.save("veo2_with_image_input.mp4")
print("Generated video saved to veo2_with_image_input.mp4")
자바스크립트
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
const prompt = "Panning wide shot of a calico kitten sleeping in the sunshine";
// Step 1: Generate an image with Imagen
const imagenResponse = await ai.models.generateImages({
model: "imagen-3.0-generate-002",
prompt: prompt,
});
// Step 2: Generate video with Veo 2 using the image
let operation = await ai.models.generateVideos({
model: "veo-2.0-generate-001", // Use Veo 2
prompt: prompt,
image: {
imageBytes: imagenResponse.generatedImages[0].image.imageBytes,
mimeType: "image/png",
},
});
// Poll the operation status until the video is ready
while (!operation.done) {
console.log("Waiting for video generation to complete...")
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation: operation,
});
}
// Download the video
ai.files.download({
file: operation.response.generatedVideos[0].video,
downloadPath: "veo2_with_image_input.mp4",
});
console.log(`Generated video saved to veo2_with_image_input.mp4`);
Go
package main
import (
"context"
"log"
"os"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
prompt := "Panning wide shot of a calico kitten sleeping in the sunshine"
// Step 1: Generate an image with Imagen
imagenResponse, err := client.Models.GenerateImages(
ctx,
"imagen-3.0-generate-002",
prompt,
nil, // GenerateImagesConfig
)
if err != nil {
log.Fatal(err)
}
// Step 2: Generate video with Veo 2 using the image
operation, err := client.Models.GenerateVideos(
ctx,
"veo-2.0-generate-001",
prompt,
imagenResponse.GeneratedImages[0].Image, // Use generated image
nil, // GenerateVideosConfig
)
if err != nil {
log.Fatal(err)
}
// Poll the operation status until the video is ready
for !operation.Done {
log.Println("Waiting for video generation to complete...")
time.Sleep(10 * time.Second)
operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
}
// Download the video
video := operation.Response.GeneratedVideos[0]
client.Files.Download(ctx, video.Video, nil)
fname := "veo2_with_image_input.mp4"
_ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
log.Printf("Generated video saved to %s\n", fname)
}
동영상 생성 매개변수 및 사양
동영상 생성 프로세스를 제어하기 위해 API 요청에서 설정할 수 있는 매개변수입니다.
매개변수 | 설명 | Veo 3 (프리뷰) | Veo 2 (안정화 버전) |
---|---|---|---|
prompt |
동영상에 대한 텍스트 설명입니다. 오디오 신호를 지원합니다. | string |
string |
negativePrompt |
동영상에서 피해야 할 내용을 설명하는 텍스트입니다. | string |
string |
image |
애니메이션을 적용할 초기 이미지입니다. | 지원되지 않음 | Image 객체 |
aspectRatio |
동영상의 가로세로 비율입니다. | "16:9" |
"16:9" , "9:16" |
personGeneration |
사람 생성을 제어합니다. | "allow_all" |
"allow_all" , "allow_adult" , "dont_allow" |
요청에서 매개변수를 설정하여 동영상 생성을 맞춤설정할 수 있습니다. 예를 들어 negativePrompt
를 지정하여 모델을 안내할 수 있습니다.
Python
import time
from google import genai
from google.genai import types
client = genai.Client()
operation = client.models.generate_videos(
model="veo-3.0-generate-preview",
prompt="A cinematic shot of a majestic lion in the savannah.",
config=types.GenerateVideosConfig(negative_prompt="cartoon, drawing, low quality"),
)
# Poll the operation status until the video is ready
while not operation.done:
print("Waiting for video generation to complete...")
time.sleep(10)
operation = client.operations.get(operation)
# Download the generated video
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video)
generated_video.video.save("parameters_example.mp4")
print("Generated video saved to parameters_example.mp4")
자바스크립트
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
let operation = await ai.models.generateVideos({
model: "veo-3.0-generate-preview",
prompt: "A cinematic shot of a majestic lion in the savannah.",
config: {
aspectRatio: "16:9",
negativePrompt: "cartoon, drawing, low quality"
},
});
// Poll the operation status until the video is ready
while (!operation.done) {
console.log("Waiting for video generation to complete...")
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation: operation,
});
}
// Download the generated video
ai.files.download({
file: operation.response.generatedVideos[0].video,
downloadPath: "parameters_example.mp4",
});
console.log(`Generated video saved to parameters_example.mp4`);
Go
package main
import (
"context"
"log"
"os"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
videoConfig := &genai.GenerateVideosConfig{
AspectRatio: "16:9",
NegativePrompt: "cartoon, drawing, low quality",
}
operation, _ := client.Models.GenerateVideos(
ctx,
"veo-3.0-generate-preview",
"A cinematic shot of a majestic lion in the savannah.",
nil,
videoConfig,
)
// Poll the operation status until the video is ready
for !operation.Done {
log.Println("Waiting for video generation to complete...")
time.Sleep(10 * time.Second)
operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
}
// Download the generated video
video := operation.Response.GeneratedVideos[0]
client.Files.Download(ctx, video.Video, nil)
fname := "parameters_example.mp4"
_ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
log.Printf("Generated video saved to %s\n", fname)
}
REST
# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"
# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.0-generate-preview:predictLongRunning" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-X "POST" \
-d '{
"instances": [{
"prompt": "A cinematic shot of a majestic lion in the savannah."
}
],
"parameters": {
"aspectRatio": "16:9",
"negativePrompt": "cartoon, drawing, low quality"
}
}' | jq -r .name)
# Poll the operation status until the video is ready
while true; do
# Get the full JSON status and store it in a variable.
status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")
# Check the "done" field from the JSON stored in the variable.
is_done=$(echo "${status_response}" | jq .done)
if [ "${is_done}" = "true" ]; then
# Extract the download URI from the final response.
video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
echo "Downloading video from: ${video_uri}"
# Download the video using the URI and API key and follow redirects.
curl -L -o parameters_example.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
break
fi
# Wait for 5 seconds before checking again.
sleep 10
done
비동기 작업 처리
동영상 생성은 컴퓨팅 집약적인 작업입니다. 요청을 보내면 API가 장기 실행 작업을 시작하고 operation
객체를 즉시 반환합니다. 그런 다음 done
상태가 true로 표시될 때까지 폴링해야 합니다.
이 프로세스의 핵심은 작업 상태를 주기적으로 확인하는 폴링 루프입니다.
Python
import time
from google import genai
from google.genai import types
client = genai.Client()
# After starting the job, you get an operation object
operation = client.models.generate_videos(
model="veo-3.0-generate-preview",
prompt="A cinematic shot of a majestic lion in the savannah.",
)
# Alternatively, you can use the operation.name to get the operation
operation = types.GenerateVideosOperation(name=operation.name)
# This loop checks the job status every 10 seconds
while not operation.done:
time.sleep(10)
# Refresh the operation object to get the latest status
operation = client.operations.get(operation)
# Once done, the result is in operation.response
# ... process and download your video ...
자바스크립트
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
// After starting the job, you get an operation object
let operation = await ai.models.generateVideos({
model: "veo-3.0-generate-preview",
prompt: "A cinematic shot of a majestic lion in the savannah.",
});
// Alternatively, you can use the operation.name to get the operation
// operation = types.GenerateVideosOperation(name=operation.name)
// This loop checks the job status every 10 seconds
while (!operation.done) {
await new Promise((resolve) => setTimeout(resolve, 1000));
// Refresh the operation object to get the latest status
operation = await ai.operations.getVideosOperation({ operation });
}
// Once done, the result is in operation.response
// ... process and download your video ...
모델 기능
기능 | 설명 | Veo 3 (프리뷰) | Veo 2 (안정화 버전) |
---|---|---|---|
오디오 | 동영상과 함께 오디오를 기본적으로 생성합니다. | ✔️ 항상 사용 설정 | ❌ 무음만 |
입력 모달리티 | 생성에 사용된 입력 유형입니다. | 텍스트 동영상 변환 | 텍스트 동영상 변환, 이미지 동영상 변환 |
해결 방법 | 동영상의 출력 해상도입니다. | 720p | 720p |
프레임 속도 | 동영상의 출력 프레임 속도입니다. | 24fps | 24fps |
동영상 길이 | 생성된 동영상의 길이입니다. | 8초 | 5~8초 |
요청당 동영상 수 | 요청당 생성된 동영상 수입니다. | 1 | 1 또는 2 |
상태 및 세부정보 | 모델 사용 가능 여부 및 추가 세부정보 | 미리보기 | 안정화 |
Veo의 추가 사용 제한사항은 모델, 가격, 비율 제한 페이지를 참고하세요.
Veo 프롬프트 가이드
이 섹션에는 Veo를 사용하여 만들 수 있는 동영상의 예가 나와 있으며, 프롬프트를 수정하여 다양한 결과를 얻는 방법을 보여줍니다.
안전 필터
Veo는 Gemini 전반에 안전 필터를 적용하여 생성된 동영상과 업로드된 사진에 불쾌감을 주는 콘텐츠가 포함되지 않도록 합니다. Google의 약관 및 가이드라인을 위반하는 프롬프트는 차단됩니다.
오디오 프롬프트 (Veo 3)
Veo 3를 사용하면 음향 효과, 주변 소음, 대화에 대한 단서를 제공할 수 있습니다. 모델은 이러한 신호의 미묘한 차이를 포착하여 동기화된 사운드트랙을 생성합니다.
- 대화: 특정 대화에는 따옴표를 사용합니다. (예: '이게 열쇠일 거야'라고 그는 중얼거렸습니다.)
- 음향 효과 (SFX): 소리를 명시적으로 설명합니다. (예: 타이어가 크게 삐걱거리고 엔진이 굉음을 냄)
- 주변 소음: 환경의 사운드스케이프를 설명합니다. (예: 희미하고 으스스한 웅성거림이 배경에 울려 퍼집니다.)
이 동영상은 세부정보 수준을 높여 Veo 3의 오디오 생성을 프롬프트하는 방법을 보여줍니다.
프롬프트 | 생성된 출력 |
---|---|
자세한 내용 (대화 및 분위기) 벽에 그려진 수수께끼 같은 그림을 응시하는 두 사람의 클로즈업, 횃불이 깜박입니다. '이게 열쇠일 거야' 그는 패턴을 따라가며 중얼거렸습니다. '하지만 그게 무슨 뜻이야?' 그녀는 고개를 갸웃거리며 의아해했습니다. 축축한 돌, 복잡한 조각, 숨겨진 상징. 배경에서 희미하고 기이한 험이 울려 퍼집니다. |
|
세부정보 적음 (대화) 캠핑 (스톱 모션): 캠핑객: '이제 자연과 하나가 되었어!' 곰: '자연은 개인적인 공간을 선호합니다.' |
|
직접 프롬프트를 사용해 오디오를 들어 보세요. Veo 3 사용해 보기
프롬프트 작성 기본사항
유용한 프롬프트는 설명적이고 명확합니다. Veo를 최대한 활용하려면 먼저 핵심 아이디어를 파악하고, 키워드와 수정자를 추가하여 아이디어를 조정하고, 동영상 관련 용어를 프롬프트에 포함하세요.
프롬프트에 다음 요소를 포함해야 합니다.
- 주제: 동영상에 담고 싶은 사물, 사람, 동물 또는 풍경입니다(예: 도시 경관, 자연, 차량, 강아지).
- 동작: 피사체가 하는 행동입니다 (예: 걷기, 달리기, 머리 돌리기).
- 스타일: SF, 공포 영화, 필름 누아르 또는 만화와 같은 애니메이션 스타일 등 특정 영화 스타일 키워드를 사용하여 크리에이티브 방향을 지정합니다.
- 카메라 위치 및 모션: [선택사항] 공중 촬영, 눈높이, 위에서 아래로 촬영, 돌리 샷, 버즈아이와 같은 용어를 사용하여 카메라의 위치와 움직임을 제어합니다.
- 구도: [선택사항] 와이드 샷, 클로즈업, 싱글 샷, 투 샷 등 촬영이 프레이밍되는 방식입니다.
- 초점 및 렌즈 효과: [선택사항] 얕은 초점, 깊은 초점, 부드러운 초점, 매크로 렌즈, 광각 렌즈와 같은 용어를 사용하여 특정 시각 효과를 구현합니다.
- 분위기: [선택사항] 색상과 조명이 장면에 기여하는 방식(예: 파란색 톤, 야간, 따뜻한 색조)입니다.
프롬프트 작성을 위한 추가 도움말
- 설명적인 언어 사용: 형용사와 부사를 사용하여 Veo에서 명확한 그림을 그릴 수 있도록 합니다.
- 얼굴 세부정보 개선: 프롬프트에서 인물 사진이라는 단어를 사용하는 등 얼굴 세부정보를 사진의 초점으로 지정합니다.
더 포괄적인 프롬프트 전략은 프롬프트 설계 소개를 참고하세요.
프롬프트 및 출력 예시
이 섹션에서는 여러 프롬프트를 제시하여 설명적인 세부정보가 각 동영상의 결과를 어떻게 향상시킬 수 있는지 보여줍니다.
고드름
이 동영상에서는 프롬프트에서 프롬프트 작성 기본사항의 요소를 사용하는 방법을 보여줍니다.
프롬프트 | 생성된 출력 |
---|---|
차가운 파란색 색조 (분위기)의 얼어붙은 암벽 (맥락)에 매달려 녹고 있는 고드름 (피사체)의 클로즈업 샷 (구도)으로, 물방울이 떨어지는 모습 (액션)을 클로즈업 세부정보로 유지하면서 확대 (카메라 모션)합니다. |
|
전화 중인 남성
이 동영상에서는 점점 더 구체적인 세부정보를 사용하여 프롬프트를 수정하여 Veo가 원하는 대로 출력을 수정하도록 하는 방법을 보여줍니다.
프롬프트 | 생성된 출력 |
---|---|
세부정보 감소 카메라가 녹색 트렌치코트를 입은 절망적인 남성을 클로즈업합니다. 녹색 네온 불빛이 비추는 회전식 월폰으로 전화를 걸고 있습니다. 영화 장면처럼 보입니다. |
|
자세한 내용 초록색 네온사인의 기이한 불빛에 휩싸여 낡은 녹색 트렌치코트를 입은 절망적인 남자가 거친 벽돌 벽에 설치된 회전식 전화기를 누르는 장면을 클로즈업한 시네마틱 샷이 이어집니다. 카메라가 가까이 다가와 전화를 걸기 위해 고군분투하는 그의 턱에 긴장감이 감돌고 얼굴에 절박함이 새겨져 있는 모습을 보여줍니다. 얕은 피사계 심도는 그의 주름진 눈썹과 검은색 회전식 전화기에 초점을 맞추고 배경을 수많은 네온 색상과 희미한 그림자로 흐리게 처리하여 긴박하고 고립된 느낌을 연출합니다. |
|
눈표범
프롬프트 | 생성된 출력 |
---|---|
간단한 프롬프트: 눈표범 같은 털을 가진 귀여운 생물이 겨울 숲을 걷고 있는 3D 만화 스타일의 렌더링입니다. |
|
세부 프롬프트: 재미있는 만화 스타일의 짧은 3D 애니메이션 장면을 만듭니다. 눈표범 같은 털과 표정이 풍부한 커다란 눈, 친근하고 동글동글한 모습을 한 귀여운 동물이 기발한 겨울 숲을 즐겁게 뛰어다니고 있습니다. 이 장면에는 둥글고 눈 덮인 나무, 부드럽게 떨어지는 눈송이, 나뭇가지 사이로 들어오는 따뜻한 햇빛이 담겨 있어야 합니다. 생물의 통통 튀는 움직임과 환한 미소는 순수한 기쁨을 전달해야 합니다. 밝고 경쾌한 색상과 장난기 넘치는 애니메이션으로 낙관적이고 따뜻한 분위기를 연출하세요. |
|
쓰기 요소별 예
다음 예시에서는 각 기본 요소를 기준으로 프롬프트를 미세 조정하는 방법을 보여줍니다.
주제 및 컨텍스트
주요 초점 (주제)과 배경 또는 환경 (컨텍스트)을 지정합니다.
프롬프트 | 생성된 출력 |
---|---|
유기적인 흐름을 보여주는 흰색 콘크리트 아파트 건물의 건축 렌더링으로, 울창한 녹지와 미래지향적인 요소가 자연스럽게 조화를 이루고 있습니다. |
|
달과 별을 배경으로 우주 공간을 떠다니는 위성입니다. |
|
작업
피사체가 하는 행동을 지정합니다 (예: 걷기, 달리기, 머리 돌리기).
프롬프트 | 생성된 출력 |
---|---|
해질녘 수평선을 바라보며 만족스럽고 여유로운 표정으로 해변을 걷고 있는 여성의 와이드 샷입니다. |
|
스타일
키워드를 추가하여 특정 미학 (예: 초현실주의, 빈티지, 미래지향적, 필름 누아르)으로 생성되도록 유도합니다.
프롬프트 | 생성된 출력 |
---|---|
필름 느와르 스타일, 남녀가 거리를 걷는 모습, 미스터리, 시네마틱, 흑백 |
|
카메라 움직임 및 구도
카메라의 움직임 (POV 샷, 항공 뷰, 추적 드론 뷰)과 촬영 구도 (와이드 샷, 클로즈업, 로우 앵글)를 지정합니다.
프롬프트 | 생성된 출력 |
---|---|
캐나다의 밤, 빗속을 달리는 빈티지 자동차에서 시점으로 촬영한 시네마틱 영상입니다. |
|
도시가 비친 눈을 극단적으로 클로즈업합니다. |
|
분위기
색상 팔레트와 조명은 분위기에 영향을 미칩니다. '차분한 오렌지색 따뜻한 색조', '자연광', '일출', '시원한 파란색 색조'와 같은 용어를 사용해 보세요.
프롬프트 | 생성된 출력 |
---|---|
공원에서 사랑스러운 골든 리트리버 강아지를 안고 있는 소녀의 클로즈업, 햇빛 |
|
비가 내리는 날 버스를 타고 있는 슬픈 여자의 시네마틱 클로즈업 샷, 차가운 파란색 색조, 슬픈 분위기 |
|
참조 이미지를 사용하여 동영상 생성
Veo의 이미지 동영상 변환 기능을 사용하여 이미지에 생명력을 불어넣을 수 있습니다.
프롬프트 | 생성된 출력 |
---|---|
입력 이미지 (Imagen으로 생성) 초콜릿 사탕 바를 들고 있는 토끼 |
|
출력 동영상 (Veo 2로 생성) 토끼가 도망갑니다. |
|
부정적인 프롬프트
부정 프롬프트는 동영상에 포함하고 싶지 않은 요소를 지정합니다.
- ❌ 아니요 또는 하지 마세요와 같은 지시적인 언어는 사용하지 않습니다. (예: '벽 없음').
- ✅ 보고 싶지 않은 항목을 설명하세요. (예: 'wall, frame').
프롬프트 | 생성된 출력 |
---|---|
부정적 프롬프트 없음: 강한 바람에 나뭇잎이 격렬하게 휘날리는 크고 고독한 참나무의 스타일리시한 짧은 애니메이션을 생성해 줘... [잘림] |
|
부정적 프롬프트 사용: [동일한 프롬프트] 부정적 프롬프트: 도시 배경, 인공 구조물, 어둡거나 폭풍이 몰아치거나 위협적인 분위기 |
|
가로세로 비율
Veo를 사용하면 동영상의 가로세로 비율을 지정할 수 있습니다.
프롬프트 | 생성된 출력 |
---|---|
와이드스크린 (16:9) 1970년대 팜스프링스, 따뜻한 햇살, 긴 그림자 속에서 빨간색 오픈카를 운전하는 한 남자의 모습을 드론으로 추적하여 동영상을 제작하세요. |
|
세로 모드 (9:16 - Veo 2만 해당) 울창한 열대우림에 있는 장엄한 하와이 폭포의 부드러운 움직임이 담긴 동영상을 만들어 보세요. 사실적인 물 흐름, 섬세한 나뭇잎, 자연광에 초점을 맞춰 평온함을 전달하세요. 급류, 안개가 자욱한 대기, 울창한 나무 사이로 비치는 햇빛을 담아보세요. 부드럽고 영화 같은 카메라 움직임을 사용하여 폭포와 주변 환경을 보여주세요. 평화롭고 사실적인 색조를 지향하여 시청자를 하와이 열대우림의 고요한 아름다움으로 안내하세요. |
|
제한사항
- 요청 지연 시간: 최소: 11초, 최대: 6분 (피크 시간대)
- 지역 제한:
personGeneration: "allow_all"
(Veo 3의 기본값) 및 이미지-동영상personGeneration
(Veo 2)은 EU, 영국, 스위스, MENA 지역에서 허용되지 않습니다. - 동영상 보관: 생성된 동영상은 서버에 2일 동안 저장된 후 삭제됩니다. 로컬 사본을 저장하려면 생성 후 2일 이내에 동영상을 다운로드해야 합니다.
- 워터마크: Veo로 만든 동영상에는 AI 생성 콘텐츠에 워터마크를 지정하고 AI 생성 콘텐츠를 식별하는 Google의 도구인 SynthID를 사용하여 워터마크가 표시됩니다.
- 안전: 생성된 동영상은 개인 정보 보호, 저작권, 편향 위험을 완화하는 데 도움이 되는 안전 필터와 기억 검사 프로세스를 거칩니다.
다음 단계
- Veo 빠른 시작 Colab에서 Veo 3를 실험해 보세요.
- 프롬프트 설계 소개를 통해 더 나은 프롬프트를 작성하는 방법을 알아보세요.
- 이미지-동영상 또는 기타 Veo 2 기능을 사용해야 하는 경우 Veo 2 및 이전 가이드를 참고하세요.