用AI批量生成产品视频!Python+Google Veo 3.1 API让电商转化率飙升

今天跟大家分享一个超实用的电商运营技巧:如何用Python和Google Veo 3.1 AI,把枯燥的产品图片批量变成生动的营销视频。用户原创内容(UGC)现在特别火,对销售的拉动效果非常明显,有了这个工具,你也能轻松制作大量高质量视频内容!

先看看最终效果:

  • 你只需要准备:产品图片 + 文字描述
  • AI帮你产出:专业级产品展示视频
  • 最棒的是:一次性处理几十个产品,全自动生成对应视频

准备工作

运行环境要求

  • Python 3.7 或更新版本
  • requests 库
  • 有效的 Veo API 访问权限

获取API密钥

  1. 访问 DEFAPI平台 注册账号
  2. 在控制台获取你的专属 API 密钥
  3. 安全提醒:千万别把密钥直接硬编码在代码里,用环境变量管理更稳妥

安装必要的包

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} 视频生成异常")

搞定!通过这套代码,你就能轻松把静态产品图批量转化成各种营销视频,极大提升电商运营的效率和转化效果。

posted @ 2025-10-26 23:53  飞雨幻沙  阅读(0)  评论(0)    收藏  举报