用 Codex 搭一条视频制作流水线:从脚本到剪辑指令,30 行 Python 全自动
用 Codex 搭一条视频制作流水线:从脚本到剪辑指令,30 行 Python 全自动
很多人用 Codex 生成代码,但很少人想到用它来指挥视频制作流程。
上周看到 V2EX 上有人问 Codex 视频工厂的流程和插件,回复五花八门,但大多停留在"用 CapCut + GPT 改改文案"这个层面。今天直接给一套可以跑起来的方案:用 OpenAI 兼容接口,让模型帮你把一个主题拆解成分镜脚本 → 旁白文案 → CapCut 草稿 JSON,整条链路自动化。
真正的痛点在哪里
手动做一条 5 分钟的科普视频,光脚本来回改就要 2 小时。分镜、旁白、字幕时间轴,每一步都是重复的脑力消耗。
Codex 本质上是一个很强的结构化文本生成器,它不只能写代码,只要你把"视频制作流程"描述成结构化任务,它就能帮你输出机器可读的制作指令。
整体架构
主题关键词
↓
[Step 1] 生成分镜脚本(JSON)
↓
[Step 2] 为每个分镜生成旁白文案
↓
[Step 3] 输出 CapCut 草稿结构 / 剪映草稿 JSON
↓
[Step 4] 可选:调用 TTS 生成配音
我们用 Python + OpenAI SDK 实现前三步,代码加注释不超过 120 行,核心逻辑 30 行。
完整代码
import json
import os
from openai import OpenAI
# 改一行 baseURL,国内直连,无需梯子
client = OpenAI(
api_key=os.environ.get("API_KEY", "your-api-key-here"),
base_url="https://api2everything.xyz/v1"
)
MODEL = "gpt-4o" # 也可以换成 claude-3-5-sonnet、deepseek-r1 等 300+ 模型
def generate_storyboard(topic: str, num_shots: int = 6) -> list[dict]:
"""Step 1: 生成分镜脚本"""
prompt = f"""
你是一名专业视频导演。请为主题「{topic}」生成 {num_shots} 个分镜。
每个分镜用 JSON 对象表示,包含以下字段:
- shot_id: 序号(从 1 开始)
- duration_sec: 建议时长(秒)
- visual: 画面描述(20字以内)
- camera: 运镜方式(如:固定、推进、俯拍)
- b_roll_keyword: 可用于搜索 B-Roll 素材的关键词
只输出 JSON 数组,不要有任何多余文字。
"""
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
response_format={"type": "json_object"} # 强制 JSON 输出
)
# 模型返回的是 {"shots": [...]},取 shots 字段
raw = json.loads(response.choices[0].message.content)
return raw.get("shots", raw) # 兼容不同返回结构
def generate_voiceover(shots: list[dict]) -> list[dict]:
"""Step 2: 为每个分镜生成旁白"""
shot_list = "\n".join(
f"分镜{s['shot_id']}({s['duration_sec']}秒):{s['visual']}"
for s in shots
)
prompt = f"""
以下是视频分镜列表:
{shot_list}
请为每个分镜写一段口播旁白,要求:
1. 语气自然,像真人说话
2. 字数严格控制在该分镜时长 × 4 字以内(4字/秒语速)
3. 返回 JSON 数组,每项包含 shot_id 和 voiceover 字段
只输出 JSON 数组。
"""
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.6,
response_format={"type": "json_object"}
)
raw = json.loads(response.choices[0].message.content)
return raw.get("voiceovers", raw)
def build_capcut_draft(shots: list[dict], voiceovers: list[dict]) -> dict:
"""Step 3: 拼装成类 CapCut 草稿结构"""
# 建立 shot_id -> voiceover 映射
vo_map = {v["shot_id"]: v["voiceover"] for v in voiceovers}
tracks = []
cursor = 0 # 时间游标,单位:毫秒
for shot in shots:
duration_ms = shot["duration_sec"] * 1000
tracks.append({
"type": "video",
"shot_id": shot["shot_id"],
"start_ms": cursor,
"end_ms": cursor + duration_ms,
"b_roll_keyword": shot.get("b_roll_keyword", ""),
"camera_note": shot.get("camera", "固定"),
"subtitle": vo_map.get(shot["shot_id"], ""),
})
cursor += duration_ms
return {
"draft_name": "AI生成草稿",
"total_duration_ms": cursor,
"tracks": tracks
}
def run_pipeline(topic: str):
print(f"\n🎬 开始生成:{topic}\n")
print("📋 Step 1: 生成分镜脚本...")
shots = generate_storyboard(topic, num_shots=6)
print(f" 生成了 {len(shots)} 个分镜")
print("🎙 Step 2: 生成旁白文案...")
voiceovers = generate_voiceover(shots)
print("🗂 Step 3: 构建草稿 JSON...")
draft = build_capcut_draft(shots, voiceovers)
output_path = f"draft_{topic[:10].replace(' ', '_')}.json"
with open(output_path, "w", encoding="utf-8") as f:
json.dump(draft, f, ensure_ascii=False, indent=2)
print(f"\n✅ 完成!草稿已保存到:{output_path}")
print(f" 总时长:{draft['total_duration_ms'] / 1000:.1f} 秒")
return draft
if __name__ == "__main__":
run_pipeline("量子计算入门:叠加态是什么")
跑起来后输出长这样
{
"draft_name": "AI生成草稿",
"total_duration_ms": 42000,
"tracks": [
{
"type": "video",
"shot_id": 1,
"start_ms": 0,
"end_ms": 7000,
"b_roll_keyword": "量子计算机芯片特写",
"camera_note": "推进",
"subtitle": "你有没有想过,一台计算机可以同时是开机和关机的状态?"
},
...
]
}
这个 JSON 可以直接用脚本导入剪映草稿(剪映草稿格式是公开的),或者作为 After Effects / Premiere 自动化脚本的输入。
几个实用的扩展方向
换模型降成本:脚本生成这类任务对推理能力要求不高,把 MODEL 换成 deepseek-v3 或 gemini-2.0-flash,效果接近,token 成本能再降一半。
加 TTS 这一步:在 Step 3 之后调用 OpenAI TTS 或 Edge TTS,把旁白文案转成音频文件,连配音都省了。
批量生产:把 run_pipeline 包一个循环,从 CSV 读主题列表,一晚上跑几十条视频脚本不是梦。
关于 API 成本
这套流程每条视频大概消耗 2000-3000 个 token,用 gpt-4o 官方价格大约是 ¥0.15 左右。如果你量大,或者想用 Claude / Gemini 做对比测试,每次都去官网充值并不现实,而且国内访问官方 API 本身就是个障碍。
我现在用的是无量Api,国内直连,支持 OpenAI / Claude / Gemini / DeepSeek 等 300+ 模型,改一行 base_url 就能切换,价格比官方便宜约 65%,SVIP 还有 7.7 折。注册就送 ¥1 余额,余额永久不过期,拿来测试这套流程完全够用。
你在用 Codex / GPT 做视频自动化有什么卡住的地方,欢迎评论区说,看到都回。觉得有用的话点个赞,后续可以继续写剪映草稿导入、TTS 接入那几步的细节。