用AI批量生成产品视频!Python+Google Veo 3.1 API让电商转化率飙升
今天跟大家分享一个超实用的电商运营技巧:如何用Python和Google Veo 3.1 AI,把枯燥的产品图片批量变成生动的营销视频。用户原创内容(UGC)现在特别火,对销售的拉动效果非常明显,有了这个工具,你也能轻松制作大量高质量视频内容!
先看看最终效果:
- 你只需要准备:产品图片 + 文字描述
- AI帮你产出:专业级产品展示视频
- 最棒的是:一次性处理几十个产品,全自动生成对应视频
准备工作
运行环境要求
- Python 3.7 或更新版本
- requests 库
- 有效的 Veo API 访问权限
获取API密钥
- 访问 DEFAPI平台 注册账号
- 在控制台获取你的专属 API 密钥
- 安全提醒:千万别把密钥直接硬编码在代码里,用环境变量管理更稳妥
安装必要的包
pip install requests python-dotenv
API接口概览
视频生成接口
- 请求地址:
POST https://api.defapi.org/api/google/veo/generate - 认证方式:
Authorization: Bearer YOUR_API_KEY - 核心参数:
model: 选择合适的 Veo 模型版本prompt: 视频描述文案images: 产品图片的 URL 集合aspect_ratio: 视频画幅比例 (16:9 或 9:16)callback_url: 结果回调地址(选填)
任务状态查询
- 请求地址:
GET https://api.defapi.org/api/task/query - 参数:
task_id- 任务唯一标识
代码实战
第一步:基础配置和导入
import os
import requests
import time
import json
from typing import List, Dict, Optional
from dotenv import load_dotenv
# 加载环境配置
load_dotenv()
class VeoVideoGenerator:
def __init__(self):
# 从环境变量安全读取API密钥
self.api_key = os.getenv('VEO_API_KEY')
if not self.api_key:
raise ValueError("记得先配置 VEO_API_KEY 环境变量哦")
self.base_url = "https://api.defapi.org"
self.headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
第二步:核心视频生成功能
def generate_video(self,
product_images: List[str],
prompt: str,
model: str = "google/veo3.1-components",
aspect_ratio: str = "9:16",
callback_url: Optional[str] = None) -> str:
"""
启动视频生成任务
参数说明:
product_images: 产品图片URL列表
prompt: 视频描述提示语
model: 指定Veo模型版本
aspect_ratio: 视频比例
callback_url: 回调URL(选填)
返回:
task_id: 任务ID,用于后续查询进度
"""
# 组装请求数据
payload = {
"model": model,
"prompt": prompt,
"images": product_images,
"aspect_ratio": aspect_ratio
}
# 可选的回调地址
if callback_url:
payload["callback_url"] = callback_url
try:
# 发起视频生成请求
response = requests.post(
f"{self.base_url}/api/google/veo/generate",
headers=self.headers,
json=payload,
timeout=30
)
# 检查响应状态
if response.status_code == 200:
result = response.json()
if result.get('code') == 0:
task_id = result['data']['task_id']
print(f"✅ 视频任务已创建: {task_id}")
return task_id
else:
raise Exception(f"API返回异常: {result.get('message')}")
else:
# 处理错误响应
error_msg = response.json().get('message', '未知错误')
raise Exception(f"请求失败 (HTTP {response.status_code}): {error_msg}")
except requests.exceptions.RequestException as e:
raise Exception(f"网络请求异常: {str(e)}")
第三步:任务进度跟踪
def query_task_status(self, task_id: str) -> Dict:
"""
查询任务当前状态
参数:
task_id: 任务ID
返回:
任务状态详情
"""
try:
response = requests.get(
f"{self.base_url}/api/task/query",
headers=self.headers,
params={"task_id": task_id},
timeout=10
)
if response.status_code == 200:
return response.json()
else:
raise Exception(f"状态查询失败: HTTP {response.status_code}")
except requests.exceptions.RequestException as e:
raise Exception(f"查询时网络异常: {str(e)}")
def wait_for_task_completion(self, task_id: str, max_wait: int = 600) -> str:
"""
等待任务完成并返回视频URL
参数:
task_id: 任务ID
max_wait: 最长等待时间(秒)
返回:
视频访问URL
"""
start_time = time.time()
while time.time() - start_time < max_wait:
# 查询当前任务状态
status_result = self.query_task_status(task_id)
if status_result.get('code') == 0:
task_data = status_result['data']
status = task_data['status']
print(f"当前任务状态: {status}")
if status == "success":
# 任务成功完成
video_url = task_data['result']['video_url']
print(f"🎉 视频制作完成! URL: {video_url}")
return video_url
elif status == "failed":
# 任务执行失败
error_msg = task_data['status_reason'].get('message', '未知错误')
raise Exception(f"视频生成失败: {error_msg}")
elif status in ["pending", "submitted", "in_progress"]:
# 任务进行中,稍后重试
time.sleep(10)
else:
raise Exception(f"未知任务状态: {status}")
else:
raise Exception(f"状态查询API错误: {status_result.get('message')}")
raise Exception("任务等待超时,可能执行卡顿")
第四步:批量生成电商视频
def batch_generate_ugc_videos(self, products_data: List[Dict]) -> Dict[str, str]:
"""
批量生成电商UGC风格视频
参数:
products_data: 产品信息列表,每个产品包含:
- product_id: 产品唯一标识
- images: 产品图片URL集合
- product_name: 产品名称
- video_type: 视频类型 ('unboxing', 'demo', 'lifestyle')
返回:
字典格式:{产品ID: 视频URL}
"""
# 不同类型视频的描述模板
prompt_templates = {
'unboxing': "专业开箱视频,展示{product}的包装细节、开箱过程和产品全貌,画质清晰",
'demo': "专业产品演示视频,突出{product}的核心功能、使用方法和独特优势,场景真实自然",
'lifestyle': "生活方式视频,呈现{product}在日常场景中的实际使用,内容真实有吸引力"
}
results = {}
for product in products_data:
product_id = product['product_id']
product_name = product['product_name']
video_type = product['video_type']
print(f"\n🚀 正在处理产品: {product_name} ({video_type}类型)")
try:
# 生成视频描述文案
prompt = prompt_templates[video_type].format(product=product_name)
# 提交视频生成任务
task_id = self.generate_video(
product_images=product['images'],
prompt=prompt,
model="google/veo3.1-components", # 支持多图输入的模型
aspect_ratio="9:16" # 适合移动端的竖屏比例
)
# 等待任务完成
video_url = self.wait_for_task_completion(task_id)
results[product_id] = video_url
print(f"✅ 产品 {product_name} 的视频已就绪")
except Exception as e:
print(f"❌ 产品 {product_name} 的视频生成失败: {str(e)}")
results[product_id] = None
return results
第五步:异步回调处理(可选)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook/veo-callback', methods=['POST'])
def handle_veo_callback():
"""
处理Veo API的异步回调通知
"""
callback_data = request.json
task_id = callback_data.get('task_id')
status = callback_data.get('status')
print(f"收到回调通知: 任务 {task_id} 状态更新为 {status}")
if status == "success":
video_url = callback_data['result']['video_url']
consumed = callback_data['consumed']
print(f"🎉 视频生成任务完成!")
print(f"视频链接: {video_url}")
print(f"消耗点数: {consumed}")
# 这里可以添加业务逻辑,比如更新数据库、发送通知等
elif status == "failed":
error_msg = callback_data['status_reason'].get('message')
print(f"❌ 视频生成失败: {error_msg}")
return jsonify({"status": "success"}), 200
实际使用案例
# 完整使用示例
if __name__ == "__main__":
# 初始化视频生成器
generator = VeoVideoGenerator()
# 准备产品数据
products = [
{
'product_id': '001',
'product_name': '无线蓝牙耳机',
'video_type': 'unboxing',
'images': [
'https://example.com/earphone1.jpg',
'https://example.com/earphone2.jpg'
]
},
{
'product_id': '002',
'product_name': '智能手表',
'video_type': 'demo',
'images': [
'https://example.com/watch1.jpg',
'https://example.com/watch2.jpg'
]
}
]
# 批量生成视频
video_results = generator.batch_generate_ugc_videos(products)
# 输出结果
for product_id, video_url in video_results.items():
if video_url:
print(f"产品 {product_id} 生成视频: {video_url}")
else:
print(f"产品 {product_id} 视频生成异常")
搞定!通过这套代码,你就能轻松把静态产品图批量转化成各种营销视频,极大提升电商运营的效率和转化效果。

浙公网安备 33010602011771号