推荐 endpoint
最小请求
{
"model": "veo-3.1-generate-preview",
"prompt": "一段 8 秒的 Api.Go 产品演示动画"
}
cURL 示例
BASE_URL="https://generativelanguage.googleapis.com/v1beta"
OPERATION_NAME=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"instances": [
{
"prompt": "一段 8 秒的 Api.Go 产品演示动画"
}
]
}' | jq -r '.name')
while true; do
STATUS=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${OPERATION_NAME}")
DONE=$(echo "$STATUS" | jq -r '.done')
if [ "$DONE" = "true" ]; then
VIDEO_URI=$(echo "$STATUS" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
curl -L -H "x-goog-api-key: $GEMINI_API_KEY" "$VIDEO_URI" -o tidemind-veo.mp4
break
fi
sleep 10
done
Python 示例
import time
from google import genai
client = genai.Client(api_key="<GEMINI_API_KEY>")
operation = client.models.generate_videos(
model="veo-3.1-generate-preview",
prompt="一段 8 秒的 Api.Go 产品演示动画",
)
while not operation.done:
print("waiting for video generation...")
time.sleep(10)
operation = client.operations.get(operation)
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video)
generated_video.video.save("tidemind-veo.mp4")
print("saved tidemind-veo.mp4")
Node.js 示例
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
let operation = await ai.models.generateVideos({
model: "veo-3.1-generate-preview",
prompt: "一段 8 秒的 Api.Go 产品演示动画"
});
while (!operation.done) {
console.log("waiting for video generation...");
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation
});
}
await ai.files.download({
file: operation.response.generatedVideos[0].video,
downloadPath: "tidemind-veo.mp4"
});
console.log("saved tidemind-veo.mp4");
最佳实践
- 初始请求只会拿到 operation 句柄,不会直接拿到视频
- 轮询层优先由服务端负责,并把 operation 状态映射成内部状态
- 任务完成后再拉最终资产,避免前端频繁空请求
