使用 Veo‑3.0 异步 API 将给定图片生成视频,Gemini 视觉先分析图片,Veo 通过 predictLongRunning 创建视频,所有输出保存至 ~/.opencla...
图片给视频生成器(v3.0.0 – 工作 Veo-3.0 REST API). 现状: QQ 测试与工作.
功能概述
图片给视频生成器(v3.0.0 – 工作 Veo-3.0 REST API). 现状: QQ 测试与工作.是一项面向实际任务的技能,主要用于Last 更新: 2026-04-11. 例:金藏献品 ~ 2.4 MB 视频在~60秒内完成.。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
图像转视频生成器(v3.0.0 – 正常运行的 Veo-3.0 REST API)
状态: ✅ 已测试并正常运行
最后更新时间: 2026-04-11
示例: “金色藏式供品” → 约 60 秒生成 2.4 MB 视频
功能说明
使用 Google 的 Veo-3.0,基于任意图像生成一段 5 秒钟的电影级视频:
- Gemini Vision(gemini-2.5-flash)分析图像,提取运动特征与场景描述
- Veo-3.0 predictLongRunning 通过 REST API 异步生成视频
- 轮询循环 持续监测操作状态,直至视频就绪(约 60–90 秒)
- 下载 将 MP4 文件保存至
~/.openclaw/workspace/tibetanProc/目录,文件名前缀为yymmddHHMM
关键修复(v3.0.0): REST 请求载荷中必须使用 bytesBase64Encoded 字段(不可使用 data 或 inline_data)
输入参数
- 图像: 本地路径或 URL
- 时长: 5–10 秒(可选)
- 风格: 如 “cinematic”、“ethereal”、“smooth” 等提示词(可选)
快速开始
python3 << 'PYEOF'
import os
import sys
import json
import time
import base64
import requests
import google.generativeai as genai
from pathlib import Path
from datetime import datetime
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
WORKSPACE = Path.home() / ".openclaw" / "workspace" / "tibetanProc"
WORKSPACE.mkdir(parents=True, exist_ok=True)
TIMESTAMP = datetime.now().strftime("%y%m%d%H%M")
# 第一步:加载图像
IMAGE_PATH = WORKSPACE / f"{TIMESTAMP}_input_image.jpg"
if not IMAGE_PATH.exists():
print("✗ 图像未找到")
sys.exit(1)
print(f"✓ 图像: {IMAGE_PATH.name}")
# 第二步:使用 Gemini 分析
genai.configure(api_key=GOOGLE_API_KEY)
model = genai.GenerativeModel("gemini-2.5-flash")
image_file = genai.upload_file(str(IMAGE_PATH), mime_type="image/jpeg")
prompt = """Analyze for cinematic video: describe subject, setting, lighting, textures,
suggested camera movements (dolly, pan, orbit, zoom, rack focus)."""
response = model.generate_content([prompt, image_file])
analysis = response.text
prompt_path = WORKSPACE / f"{TIMESTAMP}_prompt.md"
with open(prompt_path, "w") as f:
f.write(analysis)
print(f"✓ 分析结果: {prompt_path.name}")
# 第三步:构建增强型提示词
enhanced = f"""VIDEO GENERATION PROMPT
Duration: 5 seconds
Quality: High Definition
SCENE ANALYSIS:
{analysis}
MOTION GUIDELINES:
- Smooth, deliberate camera movement
- Enhance visual depth with elegant transitions
- Maintain consistent lighting
- Cinematic color grading
"""
enhanced_path = WORKSPACE / f"{TIMESTAMP}_enhanced_prompt.txt"
with open(enhanced_path, "w") as f:
f.write(enhanced)
print(f"✓ 增强提示词: {enhanced_path.name}")
# 第四步:调用 Veo API(注意字段命名规范)
with open(IMAGE_PATH, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode("utf-8")
VEO_URL = f"https://generativelanguage.googleapis.com/v1beta/models/veo-3.0-generate-001:predictLongRunning?key={GOOGLE_API_KEY}"
# ✅ 正确的载荷结构(v3.0.0)
payload = {
"instances": [{
"prompt": enhanced,
"image": {
"bytesBase64Encoded": image_b64, # ← 关键:不可用 "data" 或 "inline_data"
"mimeType": "image/jpeg"
}
}]
}
print("n🎬 正在调用 Veo API...")
response = requests.post(VEO_URL, json=payload, timeout=60)
if response.status_code not in [200, 202]:
print(f"✗ API 错误: {response.json()}")
sys.exit(1)
result = response.json()
operation_name = result.get("name")
if not operation_name:
print(f"✗ 未返回 operation name")
sys.exit(1)
print(f"✓ 操作名称: {operation_name}")
# 第五步:轮询直至完成
POLL_URL = f"https://generativelanguage.googleapis.com/v1beta/{operation_name}?key={GOOGLE_API_KEY}"
for attempt in range(1, 121):
time.sleep(5 if attempt > 1 else 2)
poll_response = requests.get(POLL_URL, timeout=10)
poll_result = poll_response.json()
if poll_result.get("done"):
print(f"✓ 在 {attempt * 5} 秒内完成")
# 提取视频 URL
try:
video_uri = poll_result["response"]["generateVideoResponse"]["generatedSamples"][0]["video"]["uri"]
except (KeyError, IndexError):
print(f"✗ 响应中无视频数据")
print(json.dumps(poll_result, indent=2)[:500])
sys.exit(1)
# 第六步:下载视频
print(f"⬇️ 正在下载...")
video_response = requests.get(f"{video_uri}&key={GOOGLE_API_KEY}", timeout=120, stream=True)
if video_response.status_code == 200:
output_path = WORKSPACE / f"{TIMESTAMP}_video.mp4"
with open(output_path, "wb") as f:
for chunk in video_response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
size_mb = output_path.stat().st_size / (1024 * 1024)
print(f"✓ 视频: {output_path.name} ({size_mb:.1f} MB)")
sys.exit(0)
else:
print(f"✗ 下载失败: {video_response.status_code}")
sys.exit(1)
print("✗ 超时")
sys.exit(1)
PYEOF
详细工作流程
第一步:准备图像
WORKSPACE="$HOME/.openclaw/workspace/tibetanProc"
mkdir -p "$WORKSPACE"
TIMESTAMP=$(date +%y%m%d%H%M)
cp ./my_image.jpg "$WORKSPACE/${TIMESTAMP}_input_image.jpg"
第二步:使用 Gemini Vision 分析图像
import google.generativeai as genai
from pathlib import Path
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
model = genai.GenerativeModel("gemini-2.5-flash")
IMAGE_PATH = Path.home() / ".openclaw" / "workspace" / "tibetanProc" / "2604110411_input_image.jpg"
image_file = genai.upload_file(str(IMAGE_PATH), mime_type="image/jpeg")
analysis_prompt = """Analyze this image for cinematic video generation:
1. Main subject and focal point
2. Setting and environment
3. Lighting direction and mood
4. Materials and textures
5. Suggested camera movements (dolly, pan, orbit, zoom, rack focus)
6. Overall energy and pacing"""
response = model.generate_content([analysis_prompt, image_file])
# 保存分析结果
with open(WORKSPACE / "2604110411_prompt.md", "w") as f:
f.write(response.text)
第三步:构建增强型提示词
# 读取分析结果
with open(WORKSPACE / "2604110411_prompt.md") as f:
analysis = f.read()
# 添加视频生成指令
enhanced = f"""VIDEO GENERATION PROMPT
Duration: 5 seconds
Quality: High Definition
Frame Rate: 24fps
SCENE ANALYSIS:
{analysis}
MOTION GUIDELINES:
- Smooth, deliberate camera movement
- Enhance visual depth with elegant transitions
- Maintain consistent lighting throughout
- Cinematic color grading
- Focus on visual storytelling
TECHNICAL SPECS:
- Resolution: 1080p minimum
- Aspect Ratio: 16:9
- Format: MP4 (H.264)
"""
with open(WORKSPACE / "2604110411_enhanced_prompt.txt", "w") as f:
f.write(enhanced)
第四步:调用 Veo API(最关键步骤)
import base64
import requests
# 编码图像
with open(IMAGE_PATH, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode("utf-8")
# 读取增强提示词
with open(WORKSPACE / "2604110411_enhanced_prompt.txt") as f:
prompt = f.read()
# ✅ 正确的载荷结构(v3.0.0)
payload = {
"instances": [{
"prompt": prompt,
"image": {
"bytesBase64Encoded": image_b64, # ← 关键:不可用 "data" 或 "inline_data"
"mimeType": "image/jpeg" # ← 必须存在且拼写准确
}
}]
}
VEO_URL = f"https://generativelanguage.googleapis.com/v1beta/models/veo-3.0-generate-001:predictLongRunning?key={GOOGLE_API_KEY}"
response = requests.post(VEO_URL, json=payload, timeout=60)
result = response.json()
if response.status_code in [200, 202]:
operation_name = result["name"]
print(f"✓ 操作名称: {operation_name}")
else:
print(f"✗ 错误: {result}")
exit(1)
第五步:轮询操作状态
import time
POLL_URL = f"https://generativelanguage.googleapis.com/v1beta/{operation_name}?key={GOOGLE_API_KEY}"
for attempt in range(120): # 最长 10 分钟
time.sleep(5)
poll_response = requests.get(POLL_URL, timeout=10)
poll_result = poll_response.json()
if poll_result.get("done"):
print(f"✓ 在 {(attempt + 1) * 5} 秒内完成")
# 从响应结构中提取视频 URL
video_uri = poll_result["response"]["generateVideoResponse"]["generatedSamples"][0]["video"]["uri"]
print(f"✓ 视频 URL: {video_uri}")
break
progress = poll_result.get("metadata", {}).get("progressPercentage", "?")
print(f" 正在轮询 ({attempt + 1}/120)... {progress}%")
第六步:下载视频
# URL 需附加 API key
download_url = f"{video_uri}&key={GOOGLE_API_KEY}"
video_response = requests.get(download_url, timeout=120, stream=True)
output_path = WORKSPACE / "2604110411_video.mp4"
with open(output_path, "wb") as f:
for chunk in video_response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
size_mb = output_path.stat().st_size / (1024 * 1024)
print(f"✓ 视频已下载: {output_path} ({size_mb:.1f} MB)")
响应结构
初始响应(第四步)
{
"name": "models/veo-3.0-generate-001/operations/uiw8bpjdiqbn"
}
最终响应(第五步,当 done=true 时)
{
"name": "models/veo-3.0-generate-001/operations/uiw8bpjdiqbn",
"done": true,
"response": {
"@type": "type.googleapis.com/google.ai.generativelanguage.v1beta.PredictLongRunningResponse",
"generateVideoResponse": {
"generatedSamples": [
{
"video": {
"uri": "https://generativelanguage.googleapis.com/v1beta/files/txg4shogthoc:download?alt=media"
}
}
]
}
}
}
输出文件
~/.openclaw/workspace/tibetanProc/ ├── 2604110411_input_image.jpg # 原始图像 ├── 2604110411_prompt.md # Gemini 分析结果 ├── 2604110411_enhanced_prompt.txt # 增强后的提示词(含运镜指导) ├── 2604110411_veo_init_response.json # API 初始响应(初始化阶段) └── 2604110411_video.mp4 # ✅ 最终视频
常见错误及修复方法
| 错误 | 原因 | 修复方式 |
|---|---|---|
bytesBase64Encoded isn't supported |
字段名不正确 | 必须使用 bytesBase64Encoded(不可用 data、inline_data 或 bytesBase64) |
mimeType isn't supported |
字段名大小写错误 | 必须严格使用 mimeType(驼峰命名法,不可写作 mime_type 或 MimeType) |
No struct value found for field expecting an image |
完全缺失图像字段 | 必须同时提供 bytesBase64Encoded 和 mimeType |
Video generation timeout |
操作耗时超过 10 分钟 | 极罕见;通常在 60–90 秒内完成 |
403 PERMISSION_DENIED 下载失败 |
API key 权限或缺失 | 确保视频下载 URL 中包含 ?key={GOOGLE_API_KEY} |
性能指标
| 操作 | 耗时 |
|---|---|
| Gemini 分析 | 约 3 秒 |
| Veo 视频生成 | 约 50–90 秒 |
| 视频下载 | 约 2–5 秒 |
| 总计 | 约 60–100 秒 |
版本历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 3.0.0 | 2026-04-11 | ✅ 可用的 REST API —— 修复字段名:改用 bytesBase64Encoded 替代 data |
| 2.0.0 | 2026-04-11 | 记录异步轮询机制(当时尚未生效) |
| 1.0.0 | 初始版本 | 初始设计(仅支持 gRPC,REST 接口不可用) |
测试验证
已成功验证以下配置:
- 图像: 金色藏式供品(6.3 MB JPG)
- 模型: veo-3.0-generate-001
- 时长: 5 秒
- 输出: 2.4 MB MP4 视频
- 状态: ✅ 端到端功能正常
热门AI工具
相关专题
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章