import requests
import time
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.yelinai.com"
headers = {
"Authorization": f"Bearer {API_KEY}"
}
# 文生视频
def create_video(prompt, model="sora-2", seconds="8", size="1280x720"):
response = requests.post(
f"{BASE_URL}/v1/videos",
headers=headers,
data={
"model": model,
"prompt": prompt,
"seconds": seconds,
"size": size
}
)
response.raise_for_status()
return response.json()
# 图生视频
def create_video_from_image(prompt, image_path, model="sora-2", seconds="4", size="1280x720"):
with open(image_path, "rb") as f:
response = requests.post(
f"{BASE_URL}/v1/videos",
headers=headers,
data={
"model": model,
"prompt": prompt,
"seconds": seconds,
"size": size
},
files={
"input_reference": (image_path.split("/")[-1], f, "image/jpeg")
}
)
response.raise_for_status()
return response.json()
# 轮询任务状态
def poll_status(video_id, timeout=600, interval=15):
start_time = time.time()
while time.time() - start_time < timeout:
response = requests.get(
f"{BASE_URL}/v1/videos/{video_id}",
headers=headers
)
response.raise_for_status()
data = response.json()
status = data.get("status")
progress = data.get("progress", 0)
print(f"状态: {status}, 进度: {progress}%")
if status == "completed":
return data
elif status == "failed":
raise Exception(f"视频生成失败: {data.get('error')}")
time.sleep(interval)
raise TimeoutError("视频生成超时")
# 下载视频
def download_video(video_id, output_path="output.mp4"):
response = requests.get(
f"{BASE_URL}/v1/videos/{video_id}/content",
headers=headers
)
response.raise_for_status()
with open(output_path, "wb") as f:
f.write(response.content)
print(f"视频已保存到: {output_path}")
# 完整流程示例
if __name__ == "__main__":
# 文生视频
job = create_video(
prompt="A golden retriever playing fetch on a sunny beach",
model="sora-2",
seconds="8",
size="1280x720"
)
print(f"任务已创建: {job['id']}")
# 等待完成
result = poll_status(job["id"])
print("视频生成完成!")
# 下载视频
download_video(job["id"], "my_video.mp4")
# 图生视频示例
# job2 = create_video_from_image(
# prompt="The scene comes alive with gentle movement",
# image_path="reference.jpg",
# model="sora-2",
# seconds="4",
# size="1280x720"
# )