Gemini API 可讓您存取 Veo 2,這是 Google 迄今最強大的影片生成模型。Veo 可產生多種電影和視覺風格的影片,捕捉提示細微差異,以便在各個影格中一致呈現精細細節。本指南可協助您開始使用 Gemini API 的 Veo。
如需影片提示指南,請參閱 Veo 提示指南一節。
事前準備
呼叫 Gemini API 前,請確認您已安裝所選 SDK,並設定 Gemini API 金鑰,以便使用。
如要搭配 Google Gen AI SDK 使用 Veo,請務必安裝下列其中一個版本:
- Python 1.10.0 以上版本
- TypeScript 和 JavaScript v0.8.0 以上版本
- Go 1.0.0 以上版本
生成影片
根據文字產生
您可以使用下列程式碼,透過 Veo 產生影片:
Python
import time
from google import genai
from google.genai import types
client = genai.Client() # read API key from GOOGLE_API_KEY
operation = client.models.generate_videos(
model="veo-2.0-generate-001",
prompt="Panning wide shot of a calico kitten sleeping in the sunshine",
config=types.GenerateVideosConfig(
person_generation="dont_allow", # "dont_allow" or "allow_adult"
aspect_ratio="16:9", # "16:9" or "9:16"
),
)
while not operation.done:
time.sleep(20)
operation = client.operations.get(operation)
for n, generated_video in enumerate(operation.response.generated_videos):
client.files.download(file=generated_video.video)
generated_video.video.save(f"video{n}.mp4") # save the video
JavaScript
import { GoogleGenAI } from "@google/genai";
import { createWriteStream } from "fs";
import { Readable } from "stream";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
async function main() {
let operation = await ai.models.generateVideos({
model: "veo-2.0-generate-001",
prompt: "Panning wide shot of a calico kitten sleeping in the sunshine",
config: {
personGeneration: "dont_allow",
aspectRatio: "16:9",
},
});
while (!operation.done) {
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation: operation,
});
}
operation.response?.generatedVideos?.forEach(async (generatedVideo, n) => {
const resp = await fetch(`${generatedVideo.video?.uri}&key=GOOGLE_API_KEY`); // append your API key
const writer = createWriteStream(`video${n}.mp4`);
Readable.fromWeb(resp.body).pipe(writer);
});
}
main();
Go
package main
import (
"context"
"fmt"
"os"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
videoConfig := &genai.GenerateVideosConfig{
AspectRatio: "16:9",
PersonGeneration: "dont_allow",
}
operation, _ := client.Models.GenerateVideos(
ctx,
"veo-2.0-generate-001",
"Panning wide shot of a calico kitten sleeping in the sunshine",
nil,
videoConfig,
)
for !operation.Done {
time.Sleep(20 * time.Second)
operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
}
for n, video := range operation.Response.GeneratedVideos {
client.Files.Download(ctx, video.Video, nil)
fname := fmt.Sprintf("video_%d.mp4", n)
_ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
}
}
REST
# Use curl to send a POST request to the predictLongRunning endpoint.
# The request body includes the prompt for video generation.
curl "${BASE_URL}/models/veo-2.0-generate-001:predictLongRunning?key=${GOOGLE_API_KEY}" \
-H "Content-Type: application/json" \
-X "POST" \
-d '{
"instances": [{
"prompt": "Panning wide shot of a calico kitten sleeping in the sunshine"
}
],
"parameters": {
"aspectRatio": "16:9",
"personGeneration": "dont_allow",
}
}' | tee result.json | jq .name | sed 's/"//g' > op_name
# Obtain operation name to download video.
op_name=$(cat op_name)
# Check against status of operation.
while true; do
is_done=$(curl "${BASE_URL}/${op_name}?key=${GOOGLE_API_KEY}" | tee op_check.json | jq .done)
if [ "${is_done}" = "true" ]; then
cat op_check.json
echo "** Attach API_KEY to download video, or examine error message."
break
fi
echo "** Video ${op_name} has not downloaded yet! Check again after 5 seconds..."
# Wait for 5 seoncds to check again.
sleep 5
done
這個程式碼需要約 2 到 3 分鐘的執行時間,但如果資源受限,可能需要較長的時間。執行完畢後,您應該會看到類似以下的影片:
如果顯示錯誤訊息,而非影片,這表示資源受到限制,無法完成要求。在這種情況下,請再次執行程式碼。
產生的影片會保存在伺服器上 2 天,之後就會移除。如果您想儲存產生的影片的本機副本,必須在產生後的 2 天內執行 result()
和 save()
。
根據圖片產生
您也可以使用圖片來產生影片。下列程式碼會使用 Imagen 產生圖片,然後使用產生的圖片做為所產生影片的起始影格。
首先,使用 Imagen 產生圖片:
Python
prompt="Panning wide shot of a calico kitten sleeping in the sunshine",
imagen = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
aspect_ratio="16:9",
number_of_images=1
)
)
imagen.generated_images[0].image
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const response = await ai.models.generateImages({
model: "imagen-3.0-generate-002",
prompt: "Panning wide shot of a calico kitten sleeping in the sunshine",
config: {
numberOfImages: 1,
},
});
// you'll pass response.generatedImages[0].image.imageBytes to Veo
Go
package main
import (
"context"
"fmt"
"os"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
config := &genai.GenerateImagesConfig{
AspectRatio: "16:9",
NumberOfImages: 1,
}
response, _ := client.Models.GenerateImages(
ctx,
"imagen-3.0-generate-002",
"Panning wide shot of a calico kitten sleeping in the sunshine",
config,
)
// you'll pass response.GeneratedImages[0].Image to Veo
}
接著,使用產生的圖片做為第一個影格產生影片:
Python
operation = client.models.generate_videos(
model="veo-2.0-generate-001",
prompt=prompt,
image = imagen.generated_images[0].image,
config=types.GenerateVideosConfig(
# person_generation is not allowed for image-to-video generation
aspect_ratio="16:9", # "16:9" or "9:16"
number_of_videos=2
),
)
# Wait for videos to generate
while not operation.done:
time.sleep(20)
operation = client.operations.get(operation)
for n, video in enumerate(operation.response.generated_videos):
fname = f'with_image_input{n}.mp4'
print(fname)
client.files.download(file=video.video)
video.video.save(fname)
JavaScript
import { GoogleGenAI } from "@google/genai";
import { createWriteStream } from "fs";
import { Readable } from "stream";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
async function main() {
// get image bytes from Imagen, as shown above
let operation = await ai.models.generateVideos({
model: "veo-2.0-generate-001",
prompt: "Panning wide shot of a calico kitten sleeping in the sunshine",
image: {
imageBytes: response.generatedImages[0].image.imageBytes, // response from Imagen
mimeType: "image/png",
},
config: {
aspectRatio: "16:9",
numberOfVideos: 2,
},
});
while (!operation.done) {
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation: operation,
});
}
operation.response?.generatedVideos?.forEach(async (generatedVideo, n) => {
const resp = await fetch(
`${generatedVideo.video?.uri}&key=GOOGLE_API_KEY`, // append your API key
);
const writer = createWriteStream(`video${n}.mp4`);
Readable.fromWeb(resp.body).pipe(writer);
});
}
main();
Go
image := response.GeneratedImages[0].Image
videoConfig := &genai.GenerateVideosConfig{
AspectRatio: "16:9",
NumberOfVideos: 2,
}
operation, _ := client.Models.GenerateVideos(
ctx,
"veo-2.0-generate-001",
"A dramatic scene based on the input image",
image,
videoConfig,
)
for !operation.Done {
time.Sleep(20 * time.Second)
operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
}
for n, video := range operation.Response.GeneratedVideos {
client.Files.Download(ctx, video.Video, nil)
fname := fmt.Sprintf("video_with_image_input_%d.mp4", n)
_ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
}
}
Veo 模型參數
(命名慣例因程式設計語言而異)。
prompt
:影片的文字提示。如有提供,image
參數為選用參數。image
:要用來做為影片第一個影格的圖片。如有提供,prompt
參數為選用參數。negativePrompt
:文字字串,用來描述您希望模型不產生的內容aspectRatio
:變更生成影片的長寬比。支援的值為"16:9"
和"9:16"
。預設值為"16:9"
。personGeneration
:允許模型產生人物影片。支援的值如下:- 生成文字轉影片:
"dont_allow"
:請勿加入人物或臉孔。"allow_adult"
:生成包含成人但不含兒童的影片。
- 生成圖片至影片:
- 不允許;如果使用參數,伺服器就會拒絕要求。
- 生成文字轉影片:
numberOfVideos
:輸出影片,1
或2
。durationSeconds
:每部輸出影片的長度 (以秒為單位),介於5
和8
之間。enhance_prompt
:啟用或停用提示重寫器。預設為啟用。
規格
模型 |
|
要求延遲時間 |
|
可變長度產生 | 5 到 8 秒 |
解決方法 | 720p |
影格速率 | 24fps |
顯示比例 |
|
輸入語言 (文字轉換成影片) | 英文 |
Veo 製作的影片會使用 SynthID 浮水印,這是我們用來識別 AI 生成內容並加上浮水印的工具,並會經過安全篩選器和記憶檢查程序,有助於降低隱私權、版權和偏見風險。
試試以下功能
如想充分發揮 Veo 的效益,請在提示中加入影片專屬的術語。Veo 可理解下列多種相關詞彙:
- 拍攝構圖:指定拍攝畫面中的構圖和主體數量 (例如 「單張照」、「雙打或封針」。
- 攝影機位置和動作:使用「眼睛水平」、「高角度」、「蠕蟲」、「好鏡頭」、「變焦」、「平移」和「追蹤畫面」等字詞,控制攝影機的位置和動作。
- 對焦和鏡頭效果:使用「淺焦」、「深焦」、「柔焦」、「微距鏡頭」和「廣角鏡頭」等字詞來呈現特定視覺效果。
- 整體風格與主題:透過指定「科幻」、「浪漫喜劇」、「動作電影」或「動畫」等風格,引導 Veo 的創作方向。也可以描述需要的主體和背景,例如「都市景觀」、「自然景觀」、「車輛」或「動物」。
Veo 提示指南
本節的 Veo 指南包含可使用 Veo 建立的影片範例,並示範如何修改提示來產生不同的結果。
安全篩選機制
Veo 對 Gemini 套用安全性篩選器,確保生成的影片和上傳相片不含令人反感的內容。違反條款和規範的提示會遭到封鎖。
提示撰寫基本概念
優質提示應清楚明瞭,如要讓系統產生的影片盡可能符合您的需求,請先找出核心概念,然後加入關鍵字和修飾符,進一步調整構想。
提示中應包含下列元素:
- 主旨:您想要在影片中加入的物件、人物、動物或場景。
- 背景資訊:拍攝主體的背景或脈絡,
- 動作:主體正在做什麼 (例如,步行、跑步或轉動頭部)。
- 樣式:適用一般性或非常具體的選項。建議您使用特定的電影風格關鍵字,例如「恐怖片」、「電影黑膠」,或是「卡通」風格等動畫風格。
- 相機動作:[選用] 攝影機正在執行的作業,例如鳥瞰圖、視線水平、由上往下拍攝或低角度拍攝。
- 組合:[選用] 拍攝的構圖方式,例如廣角鏡頭、特寫或極度特寫。
- Ambiance:[選用] 顏色和光線對場景的呈現方式,例如「藍色色調」、「夜間」或「暖色調」。
更多撰寫提示的提示
歡迎參考下列提示,瞭解如何撰寫能生成影片的提示:
- 使用描述性語言:運用形容詞和副詞為 Veo 繪製清晰的圖片。
- 提供背景資訊:如有必要,請提供背景資訊,協助模型瞭解您想要的內容。
- 參考特定藝術風格:如果您有特定美感,不妨參考特定藝術風格或藝術流派。
- 善用提示工程工具:建議您探索提示工程工具或資源,協助您修正提示並取得最佳結果。詳情請參閱「提示設計簡介」。
- 修飾個人和團體照中的臉部細節:將臉部細節指定為相片焦點,例如在提示中使用肖像功能。
提示和輸出內容範例
本部分會提供數個提示,重點說明詳盡的詳細資料能提升每部影片的結果。
冰柱
這部影片說明如何在提示中使用提示撰寫基本概念元素。
提示 | 生成的輸出內容 |
---|---|
特寫 (構圖) 以冷藍色色調 (背景) 將冰塊 (主題) 融化的冰品 (主題) 的特寫照,拉近 (相機動作) 鏡頭保持特寫 (鏡頭動作) 的特寫畫面 (動作)。 |
![]() |
一名男性
這些影片將示範如何修改提示,加入越來越具體的詳細資料,讓 Veo 根據您的喜好調整輸出內容。
提示 | 生成的輸出內容 | 分析 |
---|---|---|
鏡頭以平移方式移動,呈現一名穿著綠色風衣的絕望男子特寫鏡頭。他正在使用旋轉式壁掛式電話撥打電話,電話上有綠色霓虹燈。看起來就像電影場景。 |
![]() |
這是根據提示生成的第一部影片。 |
在特寫相片中,一名渴望成為一名絕望的男子穿著溫暖的綠色溝紋外套,他正在撥一隻安裝在堅硬的磚牆上的旋轉手機,上方看到綠色霓虹燈招牌。隨後拍手,他在設法撥打電話時露出手腳,露出鋸齒狀的張力,以及臉上刻薄的渴望。淺景深的效果將焦點放在他皺起的眉頭和黑色旋轉式電話上,背景則模糊處理成霓虹色調和模糊陰影,營造出緊迫和孤立的氛圍。 |
![]() |
越詳細的提示生成影片,內容會更聚焦在更豐富的環境。 |
影片以流暢的動作,拉近焦距至一名穿著綠色風衣的絕望男子,他正使用古老的旋轉式電話,背景是充滿詭異綠色霓虹燈光的牆壁。鏡頭從中距離開始,慢慢靠近男子的臉,揭露他急忙撥電話時的焦慮表情和額頭上的汗水。鏡頭對準了男子的手,他的手指在試圖連線時不斷翻滾。綠色霓虹燈投射在牆上的長影,營造出緊張的氣氛。這場景的構圖強調了男子的孤立和絕望,突顯出霓虹燈的鮮豔光芒與男子嚴肅的決心之間的強烈對比。 |
![]() |
加入更多細節後,就能讓拍攝主體變得逼真,營造出強烈而生動的場景。 |
雪豹
以下範例說明 Veo 可能為簡單提示產生的輸出內容。
提示 | 生成的輸出內容 |
---|---|
一隻有著雪花狀毛毛的可愛生物,在冬季森林中呈現 3D 卡通風格的 3D 卡通風格。 |
![]() |
奔跑中的雪豹
這個提示提供更多詳細資料,並示範生成的輸出內容可能較接近你想要的影片畫面
提示 | 生成的輸出內容 |
---|---|
以歡樂的卡通風格製作 3D 動畫短片場景。這隻可愛生物擁有像雪豹般的毛皮,有著壯觀的眼睛,以及親切、圓弧形的圓滑地,穿梭在獨特的冬季森林中。場景應包含圓形的積雪樹木、輕柔飄落的雪花,以及穿過樹枝的溫暖陽光。生物的彈跳動作和廣角的微笑應傳達純粹愉悅的感受。使用明亮、愉悅的色彩和生動有趣的動畫,營造歡樂、溫馨的氛圍。 |
![]() |
範例:編寫元素
以下範例說明如何按每個基本元素修正提示。
主旨
這個範例說明如何指定主題說明。
主旨說明 | 提示 | 生成的輸出內容 |
---|---|---|
說明可以包含主體,或多個主體和動作。這裡的主題是「白色混凝土公寓大樓」。 | 建築渲染圖:白色混凝土公寓大樓,流暢的自然形狀與鬱鬱蔥蔥的綠意和未來主義元素完美融合 |
![]() |
背景資訊
這個範例說明如何指定情境。
背景資訊 | 提示 | 生成的輸出內容 |
---|---|---|
主體的背景或情境非常重要。試著將拍攝對象置於各種背景中,例如繁忙的街道或外太空。 | 衛星漂浮在外太空中,背景有月亮和幾顆星星。 |
![]() |
動作
這個範例說明如何指定動作。
動作 | 提示 | 生成的輸出內容 |
---|---|---|
拍攝目標包括走路、跑步或轉動頭部等等 | 特寫照:一名女性沿著海灘行走、看著內容,並且在日落時放鬆地向地平線放鬆。 |
![]() |
樣式
這個範例說明如何指定樣式。
樣式 | 提示 | 生成的輸出內容 |
---|---|---|
您可以新增關鍵字來提升生成品質,並引導影片更接近預期風格,例如淺景深、電影靜止、微弱、超現實、復古、未來或雙重曝光。 | 黑白電影風格,一對男女在街上散步,神秘、電影、黑白。 |
![]() |
攝影機動作
本例說明如何指定相機動作。
相機動作 | 提示 | 生成的輸出內容 |
---|---|---|
攝影機動作選項包括第一人稱視角、空拍、追蹤無人機視角或追蹤鏡頭。 | 一個 POV 是在加拿大雨天,在加拿大雨天拍攝的復古車所拍攝的。 |
![]() |
樂曲
本範例說明如何指定組合。
組合 | 提示 | 生成的輸出內容 |
---|---|---|
畫面的構圖方式 (廣角鏡頭、特寫鏡頭、低角度)。 | 特寫眼球,眼球中反射出城市景觀。 |
![]() |
製作影片,描繪衝浪者在海灘上散步的廣角畫面,並搭配衝浪板和美麗的日落美景。 |
![]() |
類別
這個範例說明如何指定氣氛。
Ambiance | 提示 | 生成的輸出內容 |
---|---|---|
調色盤在攝影方面扮演重要角色,能影響情緒和傳達預期的情緒。你可以試試「柔和的橘色暖色調」、「自然光」、「日出」或「日落」等指令。例如,溫暖的金色調色盤可能會將浪漫的情感色彩融入相片中。 | 特寫:公園內的陽光下,一位女孩手上抱著可愛的黃金獵犬幼犬。 |
![]() |
電影動態效果特寫照,一位悲傷的女子在雨中搭乘公車,冷藍色調、傷心的心情。 |
![]() |
使用參考圖片產生影片
你可以使用 Veo 的圖片轉影片功能,讓圖片更生動有趣。 您可以使用現有素材資源,或試試 Imagen 產生新素材資源。
提示 | 生成的輸出內容 |
---|---|
兔子拿著巧克力糖果棒。 |
![]() |
兔子跑走了。 |
![]() |
負面提示
排除提示是一種強大的工具,可協助您指定影片中不希望出現的元素。說明在「負面提示」詞組後,要避免模型產生的內容。請遵循下列提示:
❌ 避免使用說明語言或字詞,例如「否」或「不要」。例如「No walls」或「don't show walls」。
✅ 說出不想看到的內容。例如「牆、相框」,表示你不希望影片中出現牆或相框。
提示 | 生成的輸出內容 |
---|---|
產生簡短的圖像化動畫,其中有棵孤立的大橡樹,葉子在強風中搖曳。樹狀結構應具有稍微誇張、別出心裁的形式,具有動態且流動的分支。葉子應顯示各種秋天的色彩,並在風中搖動和跳舞。動畫應使用溫馨且引人入勝的調色盤。 |
![]() |
產生簡短的圖像化動畫,其中有棵孤立的大橡樹,葉子在強風中搖曳。樹狀結構應具有稍微誇張、別出心裁的形式,具有動態且流動的分支。葉子應顯示各種秋天的色彩,並在風中搖動和跳舞。動畫應使用溫暖且引人入勝的調色盤。 含有負面提示 - 都市背景、人造建築物、黑暗、暴風或威脅的氣氛。 |
![]() |
顯示比例
Gemini Veo 影片產生功能支援以下兩種顯示比例:
顯示比例 | 說明 |
---|---|
寬螢幕或 16:9 | 最常用的電視、螢幕和手機螢幕 (橫向) 顯示比例。如要拍攝更多背景,例如風景照,請使用此模式。 |
直向或 9:16 | 旋轉寬螢幕。這個顯示比例受到 YouTube Shorts 等短篇影片應用程式歡迎。這種模型適用於垂直方向強烈的肖像照或高聳物體,例如建築物、樹木、瀑布或建築物。 |
寬螢幕
這項提示為寬螢幕長寬比 16:9 的範例。
提示 | 生成的輸出內容 |
---|---|
製作影片,使用追蹤無人機拍攝棕櫚泉的暖色陽光、長影子,以及一名男子在 1970 年代駕駛紅色敞篷車的畫面。 |
![]() |
直向
這則提示是 9:16 直向顯示比例的範例。
提示 | 生成的輸出內容 |
---|---|
製作影片,呈現蓊鬱雨林中的宏偉夏威夷瀑布流暢動作。著重於真實的水流、精細的樹葉和自然光,以傳達寧靜。透過濃密的樹冠捕捉揮灑水、迷霧大氣和陽光照射濾鏡。使用電影動態效果的相機動作,展示瀑布及周遭環境。請盡量以平靜且寫實的語氣,將觀眾帶到夏威夷雨林的寧靜美景。 |
![]() |
後續步驟
- 使用 Veo Colab,進一步瞭解如何生成 AI 影片。
- 歡迎前往 Google DeepMind 網站,查看使用 Veo 2 製作的酷炫範例