Veo - AI 视频生成技能
通过 scripts/ 目录中的 Python 脚本调用 Google Gemini Veo 3.1 生成视频。默认使用最便宜的模型,仅在显式请求时才使用更昂贵的模型。
模型选择
不使用标志时,使用 veo-3.1-lite-generate-preview(成本优先)。
--pro:使用 veo-3.1-generate-preview(高端/电影级、4K、原生音频),仅显式指定时使用。
--fast:使用 veo-3.1-fast-generate-preview(生成更快),仅显式指定时使用。
--pro 与 --fast 互斥。VEO_MODEL 环境变量可覆盖一切设置。
前置条件
- 安装依赖
pip install google-genai
- 配置 API 凭据(以下之一)
选项 A:Gemini Developer API(个人使用推荐)
设置 GEMINI_API_KEY 环境变量。可在 https://aistudio.google.com/apikey 获取密钥。
export GEMINI_API_KEY="your-api-key"
选项 B:Vertex AI API(适用于 Google Cloud 用户)
设置 GOOGLE_CLOUD_PROJECT,可选设置 GOOGLE_CLOUD_LOCATION。需要一个已启用 Vertex AI API 的 GCP 项目,并已配置应用默认凭据(gcloud auth application-default login)。
export GOOGLE_CLOUD_PROJECT="your-project-id" export GOOGLE_CLOUD_LOCATION="us-central1" # 可选,默认 us-central1
优先级:如果同时设置了 GOOGLE_CLOUD_PROJECT 和 GEMINI_API_KEY,则使用 Vertex AI。
- 可选环境变量
VEO_MODEL:默认 veo-3.1-lite-generate-preview,强制指定特定模型(覆盖标志)。
VIDEO_OUTPUT_DIR:默认 ./veo-videos,输出目录。
VEO_NO_SSL_VERIFY:设置为 1 / true / yes 可禁用 SSL 证书验证。
脚本
scripts/generate.py - 视频生成。视频生成是长时间运行操作;脚本提交请求并轮询直到视频就绪,然后下载并保存 .mp4 文件。
使用方式(示例)
文生视频(默认 Lite 模型):
python scripts/generate.py "a cat surfing a wave, cinematic lighting" -o cat.mp4
竖屏 6 秒片段:
python scripts/generate.py "slow zoom over a city at dawn" --ratio 9:16 --duration 6 -o city.mp4
图生视频(以起始帧动画化):
python scripts/generate.py "gentle breeze, leaves drifting" -i start.jpg -o anim.mp4
首帧 + 尾帧(约束结尾):
python scripts/generate.py "morph from sunrise to sunset" -i sunrise.jpg --last-frame sunset.jpg -o morph.mp4
使用高端模型并输出 1080p(需显式指定):
python scripts/generate.py "epic drone shot over mountains" --pro --resolution 1080p -o drone.mp4
生成多个变体:
python scripts/generate.py "abstract liquid motion" -n 4 -o liquid.mp4
-> liquid_0.mp4, liquid_1.mp4, liquid_2.mp4, liquid_3.mp4
禁用 SSL 验证(适用于企业代理或自签名证书):
python scripts/generate.py "ocean waves" --no-ssl-verify -o waves.mp4
JSON 输出(供程序化使用):
python scripts/generate.py "ocean waves" --json -o waves.mp4
完整选项
usage: generate.py [-h] [-o OUTPUT] [-i IMAGE] [--last-frame PATH] [-r {16:9,9:16}] [--resolution {720p,1080p,4k}] [-d DURATION] [-n COUNT] [--person-generation {auto,dont_allow,allow_adult,allow_all}] [--negative-prompt TEXT] [--seed SEED] [--pro] [--fast] [--poll-interval SECS] [--timeout SECS] [-v] [--json] [--no-ssl-verify] prompt
参数说明:
prompt:用于视频生成的文本提示词。
-o, --output PATH:输出 .mp4 路径(当 -n > 1 时添加索引后缀)。
-i, --image PATH:起始帧图像(图生视频)。
--last-frame PATH:结束帧图像(约束)。
-r, --ratio RATIO:画面比例:16:9 或 9:16(默认:16:9)。
--resolution RES:720p、1080p 或 4k(4k 需要 --pro)。
-d, --duration SECS:片段时长(秒,默认:8)。
-n, --count N:视频数量,1-4(默认:1)。
--person-generation P:auto / dont_allow / allow_adult / allow_all(默认:auto = 在 Gemini Developer API 上为 allow_all,在 Vertex AI 上为 allow_adult)。
--negative-prompt TEXT:需要避免出现的内容。
--seed SEED:用于提升一致性的种子。
--pro:使用高端 Veo 3.1 模型(需显式指定)。
--fast:使用 Veo 3.1 Fast 模型(需显式指定)。
--poll-interval SECS:状态检查间隔秒数(默认:10)。
--timeout SECS:最长等待秒数(默认:无限制)。
-v, --verbose:显示详细输出。
--json:以 JSON 输出结果。
--no-ssl-verify:禁用 SSL 证书验证。
能力与限制
Lite(默认):支持文生视频、图生视频(首帧/尾帧);画面比例 16:9、9:16;分辨率 720p、1080p(8 秒);时长 4 / 6 / 8 秒;不支持参考图像与视频扩展。
Pro(--pro)/ Fast(--fast):同样支持文生视频、图生视频;比例相同;分辨率额外支持 4k;时长 4 / 6 / 8 秒;支持参考图像与视频扩展。
注意:1080p 通常需要 8 秒时长。4k 在 Lite 上不可用,需使用 --pro。
人物生成策略
--person-generation 策略控制输出中是否出现人物:
Gemini Developer API(GEMINI_API_KEY):仅支持 allow_all——当前会拒绝 dont_allow / allow_adult;默认(auto)为 allow_all。
Vertex AI(GOOGLE_CLOUD_PROJECT):支持 dont_allow、allow_adult、allow_all;默认(auto)为 allow_adult。
默认值为 auto,会自动选择平台安全的值。作为安全兜底,如果 API 以 personGeneration ... not supported 错误拒绝所选值,脚本会自动以 allow_all 重试一次,使单次运行无需手动干预即可成功。
提示词建议
优秀的视频提示词描述动作与摄影,而不仅是静态场景:
主体与动作——发生了什么(一只狐狸跃过溪流)。
镜头——镜头类型/运动(缓慢推近、航拍无人机镜头、手持)。
场景与光照——(黄金时刻的雾林)。
风格——(电影感、动漫、纪录片、35mm 胶片)。
节奏——(慢动作、延时摄影)。
使用 --negative-prompt 避开不想要的元素,使用 --seed 在多次运行间保持结果一致。
参见 references/prompts.md 获取按类别划分的模板。
错误处理
google-genai 包未安装:运行 pip install google-genai。
未找到 API 凭据:设置 GEMINI_API_KEY 或 GOOGLE_CLOUD_PROJECT。
Veo 3.1 Lite 不支持 4k:使用 --pro 输出 4k,或选择 720p/1080p。
未生成任何视频:改写提示词;可能被阻止。
personGeneration is currently not supported:Gemini Developer API 仅支持 allow_all。脚本会自动以 allow_all 重试;或显式传入 --person-generation allow_all。
内容被安全过滤器阻止:改写提示词;检查 --person-generation 策略。
Timed out ... waiting:增加 --timeout 或省略它(无限制)。
达到 API 速率限制:稍后重试。
SSL: CERTIFICATE_VERIFY_FAILED:使用 --no-ssl-verify 或设置 VEO_NO_SSL_VERIFY=1。