发视频比发四格图更“容易”?我用 GPT Image 2 + Codex 跑了一套生产线
你有没有这种崩溃:
- 四格图画到第 3 格,人物脸已经变成“远房亲戚”了 😅
- 每格都要重新构图、重新排字
- 发出去还不一定被推荐
反过来,短视频(哪怕就是“图像关键帧 + 字幕 + BGM”)更像流水线:
- 只要几张关键帧就能动起来
- 转场、字幕、节奏一加,完成度立刻上去
- 平台也更爱推(至少我自己账号的体感是这样)
这篇给你一套能直接照抄的方案:
- GPT Image 2:出稳定的分镜关键帧
- Codex:自动写生成脚本 + 合成视频脚本
- FFmpeg:把帧合成视频、加字幕、加音频
目标很明确:你每天能早下班一小时,而不是在 PS 里抠到凌晨。
你要准备什么
工具清单
- OpenAI API Key
- Node.js 或 Python(下面给 Node 版本,复制就能跑)
- FFmpeg(本地装一下就行)
成品是什么样
- 5~9 张关键帧(1:1 或 9:16)
- 每张帧有一致角色 + 一致场景风格
- 合成一个 6~12 秒短视频(可加 BGM、字幕)
关键思路:别死磕“四格”,用“分镜”碾压它
四格图难在“每一格都必须完美”。
短视频分镜不一样:
- 帧与帧之间允许有一点变化
- 转场一做,观众反而觉得“更有动感”
- 你可以用字幕把信息补齐
所以策略是:用最少的画面成本,拿到更高的内容完成度。
流程长这样(你照着跑就行)
1)先写一个“分镜表”(很短,别写小说)
建议 6 帧起步:
- 1:建立场景
- 2:角色出现
- 3:冲突/问题
- 4:误会/反转
- 5:解决方案
- 6:收尾梗/金句
示例(你可以直接替换主题):
主题:打工人用 AI 做日报
角色:同一个年轻上班族,圆框眼镜,浅色衬衫
风格:日系清爽插画,干净背景
镜头1:工位,电脑弹出“今晚前交日报”
镜头2:主角抱头崩溃,桌上咖啡摇摇欲坠
镜头3:主角打开 AI 工具,屏幕出现“生成日报”按钮
镜头4:屏幕飞速输出,主角表情从痛苦变成震惊
镜头5:主角把日报发出去,主管竖大拇指
镜头6:主角背包下班,字幕:明天也别熬夜了
分镜写到这个程度就够了。别贪多。
2)用“角色锚点”锁住一致性(这一步决定你成片像不像专业号)
你要在每一帧提示词里固定这些信息:
- 角色特征(发型、衣服、配饰)
- 画风(插画 / 3D / 写实)
- 镜头语言(中景、近景、俯拍)
- 色彩(干净、低饱和、暖色)
我常用的“角色锚点模板”👇
同一角色:25岁亚洲年轻男性,圆框眼镜,短黑发偏分,浅蓝衬衫,灰色工牌,干净清爽,表情自然
统一画风:日系扁平插画,线条干净,低饱和配色,柔和阴影
统一场景:现代办公工位,白色桌面,笔记本电脑,窗外白天城市背景虚化
镜头:电影感构图,中景为主,景深轻微
你会发现:四格图拼命想一致,经常翻车。
分镜帧只要“70%一致”,视频里观众很难挑刺。
3)提示词直接给你:GPT Image 2 分镜生成版
把“角色锚点 + 单帧剧情”拼起来就行。
镜头 1 提示词示例:
日系扁平插画,线条干净,低饱和配色,柔和阴影。
同一角色:25岁亚洲年轻男性,圆框眼镜,短黑发偏分,浅蓝衬衫,灰色工牌。
统一场景:现代办公工位,白色桌面,笔记本电脑,窗外白天城市背景虚化。
镜头:中景,电影感构图。
剧情:电脑屏幕弹出提示“今晚前交日报”,主角盯着屏幕,表情紧张。
画面干净,主体突出,留出顶部字幕空间。
镜头 2~6同理,把剧情句换掉。
小技巧:每帧都加一句“留出字幕空间”。你后期会谢我。
代码开源版:Codex 负责把脏活累活全写完
你可以让 Codex 生成一份脚本,做三件事:
- 读取分镜表
- 调用 GPT Image 2 批量出图
- 用 FFmpeg 合成视频(加字幕/加音乐)
下面我直接给一个可跑的 Node.js 示例(你把 OPENAI_API_KEY 配上即可)。
说明:不同 SDK 版本接口名可能略有差异,你照这个结构写,改起来很快。
1)安装依赖
npm i openai
2)生成关键帧(frames)
// generate_frames.mjs
import fs from "fs";
import path from "path";
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const outDir = "./frames";
if (!fs.existsSync(outDir)) fs.mkdirSync(outDir);
const characterAnchor = `
同一角色:25岁亚洲年轻男性,圆框眼镜,短黑发偏分,浅蓝衬衫,灰色工牌,干净清爽,表情自然。
统一画风:日系扁平插画,线条干净,低饱和配色,柔和阴影。
统一场景:现代办公工位,白色桌面,笔记本电脑,窗外白天城市背景虚化。
镜头:电影感构图,中景为主,景深轻微。
`;
const storyboard = [
"电脑屏幕弹出提示‘今晚前交日报’,主角盯着屏幕,表情紧张,画面留出顶部字幕空间。",
"主角抱头崩溃,桌上咖啡快要打翻,画面留出顶部字幕空间。",
"主角打开 AI 工具,屏幕出现‘生成日报’按钮,画面留出顶部字幕空间。",
"屏幕飞速输出内容,主角从痛苦变成震惊,画面留出顶部字幕空间。",
"主角把日报发出去,主管在旁边竖大拇指,画面留出顶部字幕空间。",
"主角背包下班走出办公室,轻松表情,画面留出顶部字幕空间。"
];
for (let i = 0; i < storyboard.length; i++) {
const prompt = `${characterAnchor}\n剧情:${storyboard[i]}\n画面干净,主体突出,无水印,无乱码文字。`;
const res = await client.images.generate({
model: "gpt-image-2",
prompt,
size: "1024x1024" // 做 9:16 也行:后期裁切或用扩图
});
const b64 = res.data[0].b64_json;
const file = path.join(outDir, String(i + 1).padStart(2, "0") + ".png");
fs.writeFileSync(file, Buffer.from(b64, "base64"));
console.log("saved", file);
}
运行:
node generate_frames.mjs
你会得到 frames/01.png ... 06.png。
合成视频:FFmpeg 一句搞定(再也别手动拖剪辑软件了)
方案 A:最简单的“图片轮播视频”
每张图 1.2 秒,6 张图就是 7.2 秒:
ffmpeg -y \
-framerate 1/1.2 \
-i frames/%02d.png \
-c:v libx264 -pix_fmt yuv420p \
out.mp4
方案 B:加字幕(建议把字幕写到文件里)
建一个 captions.srt:
1
00:00:00,000 --> 00:00:01,200
今晚前交日报?
2
00:00:01,200 --> 00:00:02,400
我人都麻了
3
00:00:02,400 --> 00:00:03,600
打开 AI:生成日报
4
00:00:03,600 --> 00:00:04,800
输出速度离谱
5
00:00:04,800 --> 00:00:06,000
主管:可以啊
6
00:00:06,000 --> 00:00:07,200
下班!
合成字幕:
ffmpeg -y \
-framerate 1/1.2 \
-i frames/%02d.png \
-vf "subtitles=captions.srt" \
-c:v libx264 -pix_fmt yuv420p \
out_sub.mp4
想更好看?给字幕加描边、阴影、位置,这些都能在 FFmpeg 或 ASS 字幕里搞。
让 Codex 变成你的“短视频工头”:一条指令让它生成整套工程
你可以把下面这段话丢给 Codex,当作需求文档:
帮我生成一个 Node.js 小项目:
1) 读取 storyboard.json(包含角色锚点、6段分镜、每段字幕)
2) 调用 OpenAI 的 gpt-image-2 生成 1024x1024 PNG,保存到 frames/%02d.png
3) 自动生成 captions.srt
4) 自动调用 ffmpeg 合成 out.mp4(每张图 1.2 秒)并叠加字幕
要求:
- 提供 package.json、可运行命令
- 代码里把 API Key 从环境变量读取
- 输出目录不存在则自动创建
你会发现:真正省时间的是这步。
你不需要当“脚本工程师”。你只要当导演。
避坑清单(都是我踩过的坑)
- 字幕空间不留:生成图把画面塞满,后期字幕只能糊脸。
- 每帧提示词写太自由:角色锚点没固定,脸分分钟崩。
- 画面出现乱码字:提示词里加“无水印,无乱码文字”,还能减少翻车。
- 帧数太多:新手别一上来做 20 帧。6~9 帧更容易做完、发出去。
- 一味追求“完全一致”:视频容错比四格高,别把自己逼死。
你可以直接套用的“选题模板”(发出去更像一个系列)
- 《把 XX 交给 AI 以后,我下班早了》
- 《XX 崩溃瞬间 vs AI 介入后》
- 《领导一句话,我用 AI 5 秒搞定》
- 《同事以为我通宵,其实我用脚本》
配上这套分镜流水线,你就能稳定日更。
你要我帮你把它变成“可一键运行”的仓库吗?
你把这三样发我就行:
- 账号内容方向(职场/学习/带货/情感/知识科普)
- 角色设定一句话(比如“戴眼镜的打工人”)
- 想做 6 帧还是 9 帧
我给你一份标准化目录结构(含 storyboard.json 示例、脚本、FFmpeg 命令),你直接改文案就能批量出片。