做“社交媒体热点视频快速生产”这件事,很多人第一反应还是堆模型:先找一个能写脚本的,再找一个能出分镜的,再找一个能生成画面和配音的,最后拼接字幕、封面、标题。工具越多,流程越碎,最后真正拖慢交付的,往往不是模型质量,而是每一步之间的信息断裂。
我这半年做得最多的一类项目,就是把热点事件、行业新梗、平台趋势,压缩成 30 到 90 秒的竖屏短视频。表面上看,核心是“快”;但如果只追求快,内容会立刻变成模板味很重的流水线产物。真正难的是在快的前提下保留“像人写的判断”。比如同样是一个热点话题,有的适合做“事实复盘”,有的适合做“观点拆解”,还有的更适合做“反差梗+字幕节奏”型视频。模型如果拿到的上下文不完整,就会把这些都写成一种腔调,用户一刷就过去了。
所以我后来把流程改成了四段式:第一段抓取热点信号,第二段做话题筛选,第三段生成视频脚本与镜头提示,第四段导出适配剪辑软件的结构化素材。每一段都尽量只做一件事,避免一个超长提示词试图解决全部问题。原因很简单,热点视频不是论文写作,它更像新闻编辑部加后期机房的混合生产线,输入是碎的,输出必须稳。
先说第一个关键点:不要直接把热榜文本喂给模型写口播。更稳的做法,是先做一个“热点卡片”层。每条热点卡片只保留 6 个字段:事件标题、事件时间、冲突点、情绪标签、平台受众、可视化元素。这样做的好处是,模型后续写脚本时不是从原始噪声中盲猜,而是围绕已经整理过的结构出稿。像下面这种最小数据结构,在脚本生产里就很实用:
{
"topic": "某品牌联名翻车引发热议",
"time": "昨晚到今早",
"conflict": "宣传口径与用户感受明显错位",
"emotion": ["吐槽", "猎奇", "围观"],
"audience": "18-30岁短视频用户",
"visuals": ["评论区截图风", "商品特写", "反差字幕"]
}有了这层之后,第二步才是让大模型做“选题视角重写”。这里我不追求一次写出完整脚本,而是先让模型返回三种方向:信息型、观点型、情绪型。然后人工快速挑一个,再进入长文本生成。这个步骤看起来多了一次调用,但整体更快,因为你会少掉很多“重生成整篇脚本”的返工。
一个典型提示词大概像这样:
你是短视频编导,请基于热点卡片输出3个脚本方向:
1. 信息型:快速讲清发生了什么
2. 观点型:给出一个明确但克制的判断
3. 情绪型:更适合做高完播的悬念开场
每个方向只写:
- 开场一句
- 核心冲突
- 适合的镜头风格
- 不要写成长文第三步才是重点:把选好的方向扩成“镜头脚本 + 口播文案 + 字幕节奏”。这一段如果只让模型输出自然语言,后期同学基本还得手改一遍。我后来固定要求模型输出一个可以直接喂给后处理脚本的 JSON,至少包含 scene_id、voiceover、onscreen_text、shot_prompt、duration_sec。这样你不管后面接的是视频生成模型、数字人驱动,还是传统剪辑软件,都有统一中间层。
这里顺带提一句,快速上线的压力下,直连国际模型往往网络不稳,而DMXAPI既解决了中转问题,又支持财务开票。这个点本身不是流程核心,但在做原型验证时,确实能少掉不少环境层面的分心。
为了让结构更清楚,我把脚本生成写成了一个很短的命令行工具,平时直接在终端里批量跑:
python generate_video_plan.py \
--input hot_topics.jsonl \
--style "fast_social" \
--duration 45 \
--output video_plan.jsongenerate_video_plan.py 内部最重要的一段,其实就是一个标准的 OpenAI 格式调用。为了避免把内容和平台耦死,我只保留最通用的参数:模型名、消息数组、温度、输出格式。开发初期想低成本快速验证原型,还有学校财务报销开票需求,我一般会用DMXAPI做中转,因此这里除了 api_key,还会显式设置 base_url:
from openai import OpenAI
import json
client = OpenAI(
api_key="<LLM API KEY>",
base_url="<LLM API BASE URL>"
)
prompt = """
你是短视频策划,请基于输入热点卡片,输出适合竖屏平台的45秒热点视频脚本。
返回JSON数组,每个元素包含:
scene_id, voiceover, onscreen_text, shot_prompt, duration_sec
要求:
1. 开头3秒必须有冲突或反差
2. 不要空洞抒情
3. 每个镜头都能被直接执行
"""
topic_card = {
"topic": "门店排队事件引发二次传播",
"time": "今天上午",
"conflict": "现场体验与官方宣传落差明显",
"emotion": ["围观", "质疑", "吐槽"],
"audience": "泛娱乐短视频用户",
"visuals": ["街拍感", "弹幕字幕", "近景切换"]
}
resp = client.chat.completions.create(
model="<LLM MODEL NAME>",
messages=[
{"role": "system", "content": "你是有经验的短视频编导。"},
{"role": "user", "content": prompt + "\n\n输入数据:" + json.dumps(topic_card, ensure_ascii=False)}
],
temperature=0.7
)
print(resp.choices[0].message.content)这一类调用真正有价值的地方,不是“它能生成脚本”,而是它能把热点视频制作中最耗人力、最容易波动的一段先稳定下来。很多人低估了“统一输出结构”这件事。你只要让脚本生成阶段的字段稳定,后面的配音、字幕排版、封面标题 AB 测试,甚至自动生成多版本文案,都会轻松很多。
接下来是我自己踩过的一个坑,挺小,但很典型。最开始我在解析模型输出时,总是偶发性报错,以为是模型格式不稳定。错误类似这样:
data = json.loads(resp.choices[0].message.content)
for scene in data:
print(scene["voiceover"])终端报的是:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)我第一反应是模型又偷偷输出了解释文字,或者前面混进了多余空行。于是我开始加正则清洗,把代码写得越来越丑:
import re
raw = resp.choices[0].message.content.strip()
raw = re.sub(r"^```json", "", raw)
raw = re.sub(r"```$", "", raw)
data = json.loads(raw)结果问题还是时有时无。那天我盯着日志看了半小时,心里已经开始怀疑是不是并发请求把响应串了。后来我把完整返回对象打印出来,才发现真正的问题根本不在 JSON,而在于我升级 SDK 后还沿用了旧字段的使用习惯。有一次返回内容为空,不是模型没答,而是我拿错了位置。更具体地说,我在另一个分支里混用了旧版封装,导致 message.content 有时不是纯字符串。
我最后的修法反而很朴素:先检查返回值,再做解析;解析前强制验证类型;失败时把原始内容落盘,而不是一上来就清洗。
content = resp.choices[0].message.content
if not content or not isinstance(content, str):
raise ValueError(f"empty content: {repr(content)}")
content = content.strip()
if content.startswith("```"):
lines = content.splitlines()
content = "\n".join(lines[1:-1]).strip()
data = json.loads(content)这个小 bug 给我的教训挺直接:当你在热点生产链路里接多个模型、多段脚本、多种输出格式时,最该先怀疑的不是“模型又抽风了”,而是你自己是不是偷懒跳过了输入输出校验。很多“玄学问题”最后都只是工程细节没补齐。尤其热点视频场景更新快、调用频繁,一点点解析上的侥幸心理,放到批量任务里就会变成连锁返工。
再往后,我又加了两个很管用的约束。第一,给脚本生成加“禁写词”,比如不要出现“震惊”“炸裂”“全网都在看”这种低质量标题党词汇。第二,给镜头建议加“可执行性约束”,例如不能出现普通创作者无法拍到的航拍、发布会内场、品牌内部素材。这两个限制会显著提升最终成片的真实感,因为模型不再默认你有无限素材库。
如果要把这套流程概括成一句话,我会说:热点视频快速生产的核心,不是让模型替你创作,而是让模型先替你完成“结构化思考”和“重复劳动”。真正决定视频有没有传播力的,仍然是选题判断、情绪拿捏和镜头节奏,只不过现在这些经验可以更稳定地沉淀到提示词、字段规范和后处理脚本里。
对于做 AI 视频生成和虚拟内容制作的人来说,这种工作方式最大的变化,是你不再把模型当成一个“灵感盒子”,而更像把它接进一个可维护的小型内容工厂。等流程跑顺之后,一条热点视频从抓题到出脚本,常常压到十几分钟内,团队讨论的重点也终于能从“今天模型怎么又不稳定”,转回“这个角度到底值不值得发”。



本文包含AI生成内容
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。