import requests
# ==========================================
# ⚠️ 请务必先去重置 Key,然后填入新的!
# ==========================================
API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://xxxxx/v1/videos"
# 假设你在本地有两个图片文件想传上去
# 请确保这些图片在你的代码运行目录下,或者写绝对路径
IMAGE_PATHS = [
"cat_ref1.jpg",
"cat_ref2.png"
]
def generate_video_with_images():
headers = {
"Authorization": f"Bearer {API_KEY}"
# 再次强调:千万不要手动写 Content-Type,requests 会自动处理 boundary
}
# 1. 普通文本参数 (放在 data 中)
# 参考你截图里的参数要求
payload = {
"model": "veo_3_1-fast", # 截图里示例是这个,根据实际情况修改
"prompt": "猫咪带着耳机听着歌走路,摇晃脑袋,大雨落下",
"size": "720x1280",
"seconds": 8
}
# 2. 文件参数 (放在 files 中)
# 核心修改点:为了传多个同名字段,必须使用【列表】包含【元组】
# 格式: [ ('字段名', (文件名, 文件对象, contentType)), ... ]
files = []
# 打开所有图片文件并添加到列表中
# 注意:这里打开了文件流,建议脚本运行完后确保关闭,或者由操作系统回收
try:
for img_path in IMAGE_PATHS:
# 这里的 'input_reference' 就是截图文档里要求的字段名
# open(img_path, 'rb') 必须是二进制读取模式
file_tuple = ('input_reference', (img_path, open(img_path, 'rb')))
files.append(file_tuple)
# 此时 files 列表长这样:
# [
# ('input_reference', ('cat_ref1.jpg', <FileObject>)),
# ('input_reference', ('cat_ref2.png', <FileObject>))
# ]
print(f"🚀 正在提交任务,包含 {len(files)} 张参考图...")
# 3. 发送请求
# requests 会自动将 files 列表转换成 multipart/form-data 格式
# 并且会发送多个 input_reference 字段
response = requests.post(BASE_URL, headers=headers, data=payload, files=files)
print(f"📡 状态码: {response.status_code}")
if response.status_code == 200:
print("✅ 提交成功!")
print(response.json())
else:
print("❌ 提交失败,服务器返回:")
print(response.text)
except FileNotFoundError as e:
print(f"❌ 找不到文件: {e}")
except Exception as e:
print(f"❌ 发生错误: {e}")
finally:
# 这是一个良好的习惯:关闭刚才打开的所有文件
for _, (_, file_obj) in files:
file_obj.close()
# 运行
generate_video_with_images()