OpenShorts AI布局自动决策的秘密:为什么发12帧比发整个视频更聪明(含成本测算)
【免费下载链接】openshortsOpen source AI clip generator: turns long videos into viral 9:16 shorts with AI moment detection, face tracking, subtitles and dubbing. Self-host free with Docker (MIT), or use the cloud with GPU speed from $12/mo. MCP server and API for AI agents.项目地址: https://gitcode.com/gh_mirrors/op/openshorts
OpenShorts 是一个开源 AI 短视频生成器(AI clip generator),能把长视频自动剪成 9:16 的病毒式短视频,内置 AI 片段检测、人脸追踪、字幕和配音。它的"AI 布局自动决策"功能不上传整个视频给大模型,而是只发 12 张关键帧截图——速度快 7 倍,token 成本只有整段视频的约 1/360,准确率却几乎不掉。本文拆解这个决策系统的设计思路,并附上完整的成本测算。
一、为什么"布局"决定 AI 短视频的生死
把 16:9 横屏视频裁成 9:16 竖屏时,直接居中裁剪会把画面两侧丢掉。OpenShorts 为此设计了三种"布局",由 AI 为每个源视频自动选择:
| 布局 | 效果 | 适用场景 |
|---|---|---|
| none(追踪裁剪) | 镜头跟随说话人,裁满整个竖屏 | 单人口播、特写采访、运动、音乐 |
| split(双人堆叠) | 两位说话人上下各占半屏,字幕放在中间接缝处 | 同框对谈、播客访谈 |
| screencast(屏幕在上) | 录屏/幻灯片满宽在上,说话人缩小在下 | 教程、网页演示、图表讲解 |
split 布局的效果对比:
选对布局,视频观感就是"专业剪辑师"水平;选错,要么把关键图表裁掉,要么把两个说话人叠出同一个肩膀。
二、四次失败:为什么"测量像素"赢不了"直接提问"
这个项目团队其实试了四次传统方案:让模型(或像素算法)去"测量"某种指标——边缘密度、MSER 文本密度、画面内容时长占比、内容宽度占比——再用阈值把数字翻译成布局决策。四次都栽在同一件事上:分不清"满屏表格"和"角落记分牌"。
转折点是换了一个问题:不再让模型测量,而是直接要决策本身(三选一的分类题)。
这个区别不只是措辞,它决定了模型的稳定性。之前团队测过 Gemini 的"非确定性":同一视频连续两次跑,内容覆盖率给出 1% 和 97% 两种答案——所以"让模型量一个连续数值"这条路被直接判了死刑。但在 48 条手工标注的测试集上,三选一的分类决策连续三次跑出94% / 92% / 96%的准确率,只有 2 条在两次之间改过答案。方差来自"连续测量",不来自模型。
关键提示词(要求模型只回答三种之一,且明确"拿不准就答 none")在 gemini_worker.py。
三、核心技巧:发 12 帧,而不是整个视频
Gemini 对视频的计费约为每秒 300 tokens。这意味着:
- 1 小时视频 ≈108 万 tokens——还没开始分析,就撞穿了 1M 上下文窗口;
- 还得先上传 1–2GB 的视频文件,就为了换回一个词的答案。
而 OpenShorts 的流水线日常处理的就是小时级播客,"正常情况"恰好就是"最坏情况"。
于是 layout_picker.py 里的方案极其朴素:用 ffmpeg/OpenCV 从视频里均匀抽 12 帧、缩放到 1024px 宽、编码成 JPEG,连同提示词一次发给模型(采样逻辑见 layout_picker.py)。12 张截图固定消耗约 3k tokens,无论源视频是 3 分钟还是 3 小时。
关键结论:分辨率才是差距,不是帧数
团队在同一 48 条测试集上做了对照实验:
| 输入方式 | 准确率 | 耗时 |
|---|---|---|
| 整个视频 | 94% / 92% / 96% | ~15 秒/条 |
| 12 帧 @ 640px | 90% / 90% | ~2.2 秒/条 |
| 12 帧 @ 1024px | 92% | ~2.2 秒/条 |
| 24 帧 @ 1024px | 90% | — |
两个反直觉的发现:
- 640px 下表格里的字根本读不清,这是准确率掉 2–4 个百分点的真正原因;把帧数翻倍到 24 反而略差——说明"多看点"不如"看清点"。
- 1024px 时,12 帧方案与整视频方案的差距(92% vs 94/92/96%)落在整视频模式自身的运行方差之内——即统计上等价,换来 7 倍速度。
四、成本测算:一个视频到底省多少钱
以"1 小时源视频、产出 1 批短视频"为例:
| 成本项 | 整视频上传 | 12 帧方案 |
|---|---|---|
| token 消耗 | ~1.08M(超窗口,基本不可用) | ~3k |
| 上传体积 | 1–2GB 视频 | ~12 张小图 |
| 单次决策耗时 | ~15 秒 | ~2.2 秒 |
| 单视频费用(项目自测 shadow 模式) | 超出上下文窗口 | ~$0.002 |
| 每月 3000 个视频 | 不可行 | 约 $6 |
更妙的是 main.py 里的两道"省钱闸门":
- 每个源视频只决策一次(不是每个片段一次)——"这是个录屏"是素材的属性,不会因为它被剪出 8 个片段就变 8 次;
- 源视频本来就是竖屏就直接跳过——竖屏没有"重新组织画面"的空间,问了也是白问。
五、如何信任一个 AI 的自动决策:只加不减 + Shadow 模式
好系统不怕"偶尔答错",怕的是"错了还造成损失"。OpenShorts 的防线有三层:
- "只加不减"原则:layout_picker.py 中
DECISION_FLAGS只把布局决策映射成"开启哪些模块"。如果你已经手动开了 split 布局,模型说"none"也不会关掉它——人的显式选择永远优先。 - Shadow 模式:设
AUTO_LAYOUT=shadow后,系统照常决策、但一个模块都不动,只在日志里记一行"我会做什么"。因为全部 48 条测试数据都是手挑的 YouTube 片段,而用户上传的真实素材是"没人看过的分布"——先用 shadow 跑一周,花 $0.002/视频 搞清楚"它对我们的视频说什么",且没有任何方式弄坏一个用户付费的片段。 - 失败静默降级:没有 API key、SDK 加载失败、模型乱答——一律退回默认布局,pick() 函数 的合同是"永不抛异常"。
自动化场景下(如 Autopilot 定时抓取频道最新视频批量剪辑),这套机制就是无感工作的:
六、决策如何落地:从"一个词"到渲染管线
模型回答的screencast/split/none会被翻译成具体开关:
screencast→ 开启 screencast_layout.py:满宽内容在上、说话人在下,且只有当内容横跨超过 50% 画面宽度才触发(角落台标、计分器天然低于这条线);split→ 同时开启 split_layout.py 和 active_speaker.py:两人堆叠 + 说话人切换检测,要求"50% 以上采样帧里两张脸同框"才成立,避免把正反交替剪辑误判成双人;- 渲染时,每个场景用到的布局会写进
<片段>.layout.json伴生文件(layout_ranges.py),字幕系统据此把 split 场景的字幕放在上下半屏的接缝处——那里恰好是画面里最空的位置。
单元测试见 tests/test_layout_picker.py。
七、快速上手:三步启用 AI 布局自动决策
git clone https://gitcode.com/gh_mirrors/op/openshorts- 按 README.md 用 Docker 自托管(8GB+ 内存,MIT 协议免费);
- 准备好你自己的
GEMINI_API_KEY(没有 key 时整个布局选择会静默跳过,走默认布局); - 设置环境变量
AUTO_LAYOUT=1(建议先跑AUTO_LAYOUT=shadow观察几天)。
就这么简单。决策是"每视频一次",12 帧、约 3k tokens、2 秒多,对绝大多数人来说费用可以忽略不计——你换来的是每个视频都自动匹配最合适的竖屏构图,什么都不用配置。
总结
OpenShorts 的 AI 布局自动决策给出了三个可复用的工程经验:
- 问决策,别问测量——把"连续数值 + 阈值"换成"有限选项 + 分类回答",模型的方差立刻可控;
- 抽样要"看得清"而不是"看得多"——12 帧 @1024px 打败 24 帧 @640px,分辨率是第一杠杆;
- 给自动决策上保险——只加不减、shadow 先行、失败静默降级,让"AI 偶尔答错"的成本恒等于零。
这正是它能以每视频约 $0.002 的成本,把小时级长视频自动变成"看起来像人工剪辑"的 9:16 短视频的秘密。
【免费下载链接】openshortsOpen source AI clip generator: turns long videos into viral 9:16 shorts with AI moment detection, face tracking, subtitles and dubbing. Self-host free with Docker (MIT), or use the cloud with GPU speed from $12/mo. MCP server and API for AI agents.项目地址: https://gitcode.com/gh_mirrors/op/openshorts
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考