跃问AI视频创作进阶:命令行脚本批量生成自动下载
使用Python脚本调用跃问AI视频生成API,通过requests库提交请求、轮询状态并自动下载MP4文件。在prompts.txt中逐行写入提示词,脚本循环处理实现批量生成,添加time.sleep防抖和tqdm进度条,文件名自动编号并截取提示词前20字符,完成从提交到保存的自动化流程。
想要实现批量生成AI视频,不少人首先想到的是手动操作网页、逐条提交、挨个下载——几十条视频搞下来,手指都点酸了。其实换个思路,用几行命令行脚本就能让跃问AI自动完成从提交提示词到保存MP4的完整流程,而且可重复、可批量、可监控。本文详细介绍如何用Python脚本调用跃问API实现自动化视频生成,帮助提升内容生产效率。

准备环境与获取API密钥
首先登录跃问AI官网,进入「开发者中心」→「API管理」→「创建新密钥」,将生成的密钥字符串复制保存。该密钥是调用视频生成接口的凭证,切勿在公开代码或Git仓库中硬编码——这是几乎所有API事故的根源。
本地环境需要Python 3.9以上版本,并安装两个库:pip install requests tqdm。其中requests负责HTTP请求,tqdm用于显示下载进度条。
构造基础生成请求
新建一个文件,例如 generate_video.py,先搭建基本框架:
import requests
import json
api_url = "https://api.yuewen.ai/v1/video/generate"
headers = {
"Authorization": "Bearer YOUR_API_KEY_HERE",
"Content-Type": "application/json"
}
payload = {
"prompt": "一只橘猫戴着墨镜骑摩托车,赛博朋克风格",
"aspect_ratio": "16:9",
"duration": 4
}
response = requests.post(api_url, headers=headers, json=payload)
print(response.json())
将 YOUR_API_KEY_HERE 替换为刚才复制的密钥,保存后运行 python generate_video.py。如果返回的JSON中包含 task_id,说明请求已成功提交。
轮询任务状态并自动下载
跃问AI的视频生成采用异步模式:提交后仅获得任务ID,需要定时查询状态,直到 status 变为 completed 才能获取视频链接。以下代码封装了完整的轮询逻辑,仅依赖 requests 和 time.sleep:
import time
task_id = response.json().get("task_id")
if not task_id:
raise ValueError("未获取到task_id")
status_url = f"https://api.yuewen.ai/v1/video/status/{task_id}"
for i in range(60):
status_resp = requests.get(status_url, headers=headers)
status_data = status_resp.json()
if status_data.get("status") == "completed":
video_url = status_data.get("video_url")
if video_url:
r = requests.get(video_url)
with open(f"output_{task_id}.mp4", "wb") as f:
f.write(r.content)
print("视频已保存")
exit(0)
time.sleep(5)
代码每5秒查询一次状态,最多等待5分钟(60×5秒)。如果超时后状态仍为 processing 或变为 failed,脚本会自然退出,不会报错也不会重试——这样设计是为了避免批量流程中因某一条卡住而阻塞整个队列。
批量生成多条视频
单条测试通过后,即可进入批量操作。
第一步:准备提示词列表
新建一个 prompts.txt 文件,每行写一条提示词。例如:
一只柴犬在雪山顶上仰天长啸,8K高清
复古胶片风,东京街头雨夜,霓虹灯倒映水洼
水墨动画,竹林深处老僧扫落叶,留白构图
第二步:修改脚本主循环
将原来固定的 payload["prompt"] 替换为逐行读取:
with open("prompts.txt", "r", encoding="utf-8") as f:
prompts = [line.strip() for line in f if line.strip()]
for idx, prompt in enumerate(prompts, 1):
print(f"正在提交第{idx}条:{prompt[:30]}...")
payload["prompt"] = prompt
response = requests.post(api_url, headers=headers, json=payload)
task_id = response.json().get("task_id")
if not task_id:
print(f"第{idx}条提交失败")
continue
# 此处接入上一步的轮询+下载逻辑(代码结构一致,略)
第三步:添加防抖延迟
在 for 循环末尾加入 time.sleep(2),避免连续请求触发频率限制。跃问AI接口默认限流为3次/秒,不加延迟可能导致后续请求返回429错误——很多开发者都曾踩过这个坑。
优化下载体验:添加进度条与文件命名
使用 tqdm 替代简单的 print,使下载过程可视化,用户体验更好。同时为文件名添加编号和部分提示词,方便后续整理:
from tqdm import tqdm
r = requests.get(video_url, stream=True)
total_size = int(r.headers.get('content-length', 0))
with open(f"video_{idx:03d}_{prompt[:20].replace('/', '_')}.mp4", "wb") as f:
for data in tqdm(r.iter_content(1024), total=total_size//1024, unit="KB", desc=f"下载{idx}"):
f.write(data)
idx:03d 保证编号按001、002……顺序排列;prompt[:20].replace('/', '_') 截取前20个字符,并将斜杠替换为下划线——Windows文件系统不允许斜杠,这一处理可避免保存失败。
整套流程搭建完成后,只需修改 prompts.txt,运行一次脚本即可自动完成所有视频的生成与下载。如需增加重试机制、通知推送或自动上传至云存储,思路相同,在循环内扩展即可。
