直接开工。这个项目我断断续续折腾了三周,核心就一句话:把“爆款视频为什么火”这种只可意会的东西,变成Codex能调用的Skill,再让它基于分析结果自动产出可执行的短视频脚本。今天把完整过程、踩过的坑、还有最终能跑通的方案全部展开写一遍,希望能帮到正在做AI Agent方向的同行。
Codex本身是命令行形态的AI编程助手,但真正让它区别于普通聊天工具的,是Skill机制。你可以把Skill理解成给模型注入一套“专业级工作流”,它不只是告诉模型“你要分析视频”,而是定义了完整的分析维度、打分规则、输出模板、避免什么坑。这样一来,同样的Codex内核,装上不同Skill,就能在不同领域干活,这正好是我需要的。
1. 项目概述:为什么要用Codex + Skill来做抖音脚本分析
1.1 这个项目到底解决什么问题
短视频运营里最耗精力的不是拍摄,而是前期分析。一个刚入行的编导,一天要看三五十条对标视频,手动记录选题、文案结构、时长分段、互动节奏,再从中总结规律,最后写成新脚本。这个流程非常依赖个人经验,做得好的中介带新人时,往往只给一句“你多看看头部账号怎么拍”,然后就没了。
我一直在找一种方式,把“分析对标视频”这件事标准化、流水线化。项目标题里的“抖音爆款视频分析与脚本自动生成”具体要解决三个问题:第一,把十几个维度的一次性分析压缩到一个指令;第二,让分析结果不是一堆零散数据,而是带权重、带结论、带推荐方向的决策报告;第三,基于这份报告直接产出符合平台节奏的完整脚本。
Codex加AI Agent的组合刚好匹配这个需求。Codex承担“执行与推理”,Skill负责“领域知识注入”,两者拼起来就是一个不用睡觉的短视频分析助理。它不是简单地帮你搜资料再拼一段话,而是严格按流程走,每一步都有据可查。做完一轮之后,你还能把新发现沉淀进Skill,形成持续进化的私有知识库。
1.2 技术选型:Codex、Agent与Skill的分工
先说结论,我最终的技术栈是Codex CLI做运行底座,配合自定义Skill包,再通过模型配置文件切换默认模型。整套系统跑在本地命令行环境,不依赖额外Web服务,开发和调试成本极低。
Codex在这套方案里的角色是“通用大脑”,负责理解问题、调用工具、维护上下文。它本身具备Agent属性,能够在一个会话里自主完成“读取数据-调用分析脚本-汇总结论-生成脚本草稿”这个多步流程,而不是像普通对话机器人那样等用户一步步喂话。
Agent这个词最近被炒得很热,但说到底就是把大模型的推理能力和外部工具串起来。在这个项目里,Agent体现在:Codex看到Skill里写明“请先运行scripts目录下的analyze.py”,它就会主动调起Python脚本,再把脚本输出的结构化数据拿回来继续推理。这一步很关键,因为单靠模型记忆来做量化打分极不稳定,尤其是几十条视频的完播率对比,交给脚本算才靠谱。
Skill则是给这个Agent注入“短视频编导”的专业知识。我在Skill里写清了分析维度、指标权重、内容结构拆解法、以及生成脚本的黄金公式,Codex读到这份提示词之后,就会以编导的视角去工作,而不是泛泛地说“这个视频拍得不错”。这套协作关系可以用来做几乎所有垂直领域的自动化分析,换掉Skill文件,它就是电商、知识付费、本地生活的专属运营助手。
2. 核心思路拆解:从爆款视频数据到可复用脚本的逻辑链
2.1 爆款视频分析该看什么指标
很多人分析爆款只会看点赞数,这是最大的误区。点赞只能代表“用户认同”,但短视频推荐机制主要看的是完播率和互动率。我在Skill里把指标分成三层,每层都有明确的采集方式和计算口径。
第一层是基础表现层,包括播放量、完播率、点赞率(点赞数/播放量)、评论率、转发率、收藏率。其中完播率权重最高,平台会对“用户看完”的内容大力加权。第二层是内容结构层,包括前3秒内容、视频总时长、每分钟信息密度、口播语速、镜头切换次数、高潮出现时间。这个层面需要人工或半自动采集,数据源来自视频画面和字幕文本。第三层是账号与环境层,包括账号粉丝量、垂直度、发布时间、话题标签热度、BGM风格。相同的视频内容,大号发布和小号发布的数据曲线完全不同,所以分析时必须做归一化处理,不然没有可比性。
我把这些维度装进Skill的PROMPT.md,并在其中写清楚打分公式。比如前3秒每多抓住一次用户注意力加10分,时长超过60秒但完播率依然超过40%加15分。这样Codex在处理某个具体视频时,就知道该抓哪些特征,怎么折算成可比较的结果。
2.2 脚本生成的推荐位逻辑
脚本自动生成不是随便拼一段“哈喽大家好今天给大家分享”。我在Skill里预设了五段式结构:黄金开场、痛点铺垫、干货展开、情绪高潮、互动引导。每一段都对应一个“推荐位”概念,也就是说,每个时间段应该出现什么内容、多长、起到什么作用,都要提前设计好。
黄金开场通常占视频总时长的10%,控制在3秒以内,核心目标是让用户停下来。痛点铺垫在10%-25%位置,要快速说出观众的困境,让他们产生代入感。干货展开占30%-70%,每15秒必须出现一个信息增量,防止用户中途划走。情绪高潮在70%-85%,需要一句极具记忆点的话,让用户忍不住点赞收藏。互动引导收尾,直接说明“留言你的问题”“转发给需要的朋友”。
这个结构本身不是秘密,但让模型稳定输出符合这个结构的脚本,就需要把结构定义写进Skill的系统提示里。如果只靠一次会话手动提问,模型很可能输出四不像。放在Skill里之后,Codex每次生成都会严格按这五段来,因为它的每一步推理都被约束住了。
2.3 Skill机制怎么让分析过程可复用
Skill的本质是一组遵循特定目录结构的文件,Codex启动后会扫描本地skills文件夹,把匹配的Skill内容加载到上下文里。它的价值不在于“塞一段现成提示词”,而在于把完整的分析方法固化成可复用模块。
第一个可复用点,是分析维度的可复用。今天分析美妆爆款,明天分析数码测评,不需要重写提示词,只需要在Skill的数据输入部分替换样本数据。第二,打分权重的可复用。每次完成一批视频分析后,可以把人工复核的结论再喂给Skill,调整打分公式里的系数,持续逼近真实运营判断。第三,输出模板的可复用。Skill里写死了生成脚本的模板,无论哪个品类,拿到分析结果后输出的脚本格式保持一致。
我自己实际用下来,最明显的体感是——以前让Codex帮我写一条视频脚本,要反复交代背景、语气、长度、结构,现在只输入一个账号链接加一句“用douyin-script分析这个账号最近30天的数据并生成类似脚本”,它自己就会把流程跑完,中间几乎不用干预。
3. Skill的具体开发实现
3.1 Skill文件结构与配置
Codex的Skill目录一般放在~/.codex/skills下,每个Skill是一个独立文件夹。我先建了douyin-script目录,里面放了SKILL.md、PROMPT.md和一个scripts子目录。目录结构如下:
~/.codex/skills/douyin-script/ ├── SKILL.md ├── PROMPT.md └── scripts/ ├── analyze.py └── report_template.mdSKILL.md的职责是告诉Codex“什么时候该用这个技能,用了之后要干什么”。它更像一份使用手册,而不是分析细节。PROMPT.md才是核心,包含完整分析流程、指标定义、打分规则和脚本输出模板,Codex执行该Skill时会把PROMPT.md作为系统级指令加载。
scripts目录里放辅助脚本。analyze.py负责处理批量数据,比如读取CSV格式的视频数据表,计算完播率均值、互动率分段分布,输出JSON结果。report_template.md是最终分析报告的Markdown模板,Codex会把分析结论填充进去。这套结构的好处是:模型只做“推理和总结”,所有需要计算的东西都交给确定性的Python代码,既减少幻觉,又让结果可复核。
3.2 PROMPT.md写作要点
写PROMPT.md有几条非常关键的经验。第一条,不要把期望的行为写得模棱两可。比如分析维度这里,如果只写“分析视频内容”,模型很可能输出“视频内容比较有趣”这种废话。我在PROMPT.md里明确写出“必须按以下12个维度逐项打分,每个维度得分1-10,并给出得分依据”。
第二条,给出格式化输出要求。分析报告必须包含表格,包括维度、得分、依据、改进建议四列。表格天然逼着模型输出结构化内容,比让它写一大段叙述要稳定得多。第三条,写明计算逻辑。比如“完播率>50%视为优秀,40%-50%为良好,低于40%需改进”,这样模型不需要自己发挥,直接套标准。
还有一点容易被忽略,就是要在PROMPT.md里加入“禁止行为”清单。我写了三条:不做无数据支撑的主观评价、不得虚构视频数据、不得忽略低播放视频样本。低播放视频同样是重要参考,分析爆款不看失败样本,就像做投资只看赚钱的股票,没有意义。
3.3 可复用的脚本生成模板
在PROMPT.md里,我把最终脚本输出格式也定义好了,所有视频脚本统一按这个模板生成。模板结构如下:
【脚本标题】必填,20字以内,包含关键词 【视频时长】建议值,单位秒 【目标人群】根据账号数据反推 【脚本正文】 1. 开场钩子(0-3秒) 文案:xxx 镜头:xxx 字幕:xxx 2. 痛点铺垫(3-8秒) 文案:xxx 镜头:xxx 3. 干货展开(8-40秒) 分三点,每点前标注信息增量 4. 情绪高潮(40-50秒) 金句:xxx 5. 互动引导(50-60秒) 指令:xxx 【BGM建议】注明风格与节奏点 【话题标签】3-5个,参考同类爆款不要小看这个模板的约束力。模型在生成时,每一段都会主动标注文案、镜头、字幕,等于把编导的执行方案都写出来了。用户拿到这个脚本,不需要再理解“为什么这样写”,直接按部就班拍摄就行。
对比让Codex直接“随便写一条视频脚本”,Skill模板加持下的产出,最大差别在于镜头指令、信息增量标记和节奏时间点都在场内。这三点是短视频行业里区分新手和熟手的核心,也是我把它们硬编码进模板的原因。
3.4 代码分析脚本的编写思路
analyze.py的核心功能是做数据归因。我在本机维护一个sample_data.csv,里面按行存放对标账号视频的公开数据,包括发布时间、时长、播放量、点赞量、评论量、收藏量、转发量、话题标签、BGM风格、前3秒文案类型。
脚本读取CSV之后,先计算派生指标,再按维度汇总,最后输出一个用于后续生成的JSON。派生指标的计算逻辑我贴出来:
import csv import json from collections import defaultdict def read_csv(path): with open(path, "r", encoding="utf-8") as f: return list(csv.DictReader(f)) def compute_metrics(rows): result = { "sample_count": len(rows), "total_play": 0, "total_like": 0, "total_comment": 0, "avg_completion_rate": 0, "like_rate_distribution": [], "top_themes": defaultdict(int) } for row in rows: play = int(row["播放量"]) like = int(row["点赞量"]) comment = int(row["评论量"]) complete = float(row["完播率"]) result["total_play"] += play result["total_like"] += like result["total_comment"] += comment result["avg_completion_rate"] += complete result["like_rate_distribution"].append({ "video_id": row["视频ID"], "like_rate": round(like / play * 100, 2) if play else 0, "comment_rate": round(comment / play * 100, 2) if play else 0, }) result["top_themes[row["主题分类"]"]] += 1 n = len(rows) or 1 result["avg_completion_rate"] = round(result["avg_completion_rate"] / n, 2) result["top_themes"] = dict( sorted(result["top_themes"].items(), key=lambda x: x[1], reverse=True)[:5] ) return result if __name__ == "__main__": data = read_csv("sample_data.csv") output = compute_metrics(data) print(json.dumps(output, ensure_ascii=False, indent=2))看到这里你可能会问,为什么不用Codex自己读CSV然后算?我试过,结果非常不稳定。模型容易被单个高点赞视频带偏,或忽略掉一些极端样本。用脚本算完,Codex拿到的是一份确定性结果,然后再基于这份结果做定性分析,比如“哪个主题赛道的评论率更高”“哪个时长的视频完播率更稳定”。人负责定规则,机器负责算数和推理,各干各擅长的事。
4. 实操过程:配置环境并跑通一次完整分析
4.1 本地环境准备与Codex安装
这一节给没有接触过Codex的读者。Codex是OpenAI推出的命令行AI编程工具,把模型推理、文件读写、命令执行集成在一个终端会话里。安装前需要准备Node.js环境,我当前用的是Node.js 18 LTS版本。
安装命令很简单:
npm install -g @openai/codex安装完成之后,首次运行会要求配置AI服务提供方的访问密钥。Codex本身支持多种模型后端,默认使用OpenAI系列模型,但我做这个项目时更倾向于用DeepSeek的API,毕竟成本更低、国内可直接使用。配置方式是在初始化对话框里选择自定义端点,填入DeepSeek提供的API地址和密钥。
配置完之后,在命令行输入codex进入交互模式,输入一句话任务指令,Codex会自动开始干活。比如我经常用的指令是“读取当前目录下的sample_data.csv,运行analyze.py完成分析,然后按Skill模板生成5条脚本”。它一般会在几十秒内走完分析、推理、生成全过程。
4.2 Codex接入DeepSeek模型的配置细节
如果你也想用DeepSeek模型来跑这套Skill,配置文件所在位置是~/.codex/config.toml,重点关心model_provider和model两个字段。我的配置节选如下:
model = "deepseek-chat" model_provider = "deepseek" [model_providers.deepseek] name = "DeepSeek" base_url = "https://api.deepseek.com/v1" env_key = "DEEPSEEK_API_KEY" wire_api = "responses"这里有一点值得注意:wire_api要设置成responses而不是chat_completions。第一次我只改了base_url和model,忘了这个字段,结果Codex一直报“endpoint /responses 处理失败”,因为直到某个版本为止Codex默认走Chat Completions协议,而DeepSeek这边我配置的是Responses协议。两个协议的消息格式不一样,模型自然没法正常响应。
把wire_api改成responses之后,连接问题消失,任务执行恢复正常。这个坑我建议所有接第三方模型的读者都留意一下,凡是Codex报endpoint相关错误,优先检查config里的协议字段是否匹配。
4.3 用Skill跑一次完整的爆款分析
环境配置完毕后,我用一个模拟场景演示完整流程。假设我有一个美妆账号,想模仿对标账号的风格。我在sample_data.csv里维护了最近30天采集的20条对标视频公开指标,然后输入如下命令:
codex "使用 douyin-script 技能,分析 sample_data.csv 中的20条视频数据,输出分析报告,并在报告基础上生成3条美妆口播类视频脚本"Codex会先根据“douyin-script”这个关键词,把对应Skill的SKILL.md和PROMPT.md加载进上下文。接着它会查看sample_data.csv的结构,调用scripts/analyze.py完成指标计算,随后按照PROMPT.md里定义的分析维度逐项展开,最后进入脚本生成阶段。
在生成阶段,Codex严格遵循模板输出。由于模板中要求每段脚本必须含文案、镜头、字幕三要素,它生成的脚本天然具备可直接执行性。同时模板要求给出BGM建议和话题标签,这正好覆盖了编导在拍摄前要准备的最后两份清单。
4.4 生成脚本的实测输出
这里展示其中一条生成脚本的缩略版本:
【脚本标题】初秋通勤妆,30秒搞定高级感 【视频时长】35秒 【目标人群】25-35岁职场女性 【脚本正文】 1. 开场钩子(0-3秒) 文案:通勤最怕迟到,这个妆真的只要30秒。 镜头:镜子前素颜状态,快速切换到完妆状态,制造对比冲击。 字幕:大字弹出“30秒通勤妆” 2. 痛点铺垫(3-8秒) 文案:每天早起化妆,昨晚熬夜根本起不来。 镜头:拍闹钟显示7:50,表情焦虑。 3. 干货展开(8-25秒) 信息增量1:底妆只用气垫,重点拍脸颊和T区。 信息增量2:眉毛用眉粉不用眉笔,更快。 信息增量3:口红选择豆沙色,用手晕开当腮红。 镜头:每个步骤给特写,节奏紧凑。 4. 情绪高潮(25-30秒) 金句:记住,通勤妆的精髓不是画全,是画对。 镜头:镜头推向完妆后自信笑容。 5. 互动引导(30-35秒) 指令:评论区告诉我,你通勤最多能留几分钟化妆? 镜头:贴纸引导点击评论区。 【BGM建议】轻快节奏,鼓点在第3秒强调钩子 【话题标签】#通勤妆 #快速化妆 #职场穿搭 #美妆教程 #早八人这条脚本的完整度已经接近专业编导初稿。据我实测,直接拿去拍摄,效率比从零写脚本高了大概3倍。而且因为BGM和话题标签都根据对标数据联动推荐,跑出来的脚本不会出现“内容很好但不适合平台”的脱节感。
5. 常见问题与调试实录
5.1 上下文溢出与长任务失败
使用过程中遇到最频繁的问题,是Codex提示类似于“ran out of room in the model's context window”的错误,意思是任务的中间步骤太多,超出了模型的上下文长度限制。这种情况在分析大量视频、一次性生成多条脚本时特别常见,因为中间产物太多。
我通过两个方法解决。第一,把大任务拆小。之前我喜欢让它一口气完成“分析+总结+生成20条脚本”,现在改成“先分析,然后再让Codex读分析结果生成脚本”,分两个会话执行,每个会话的上下文压力小很多。第二,在Skill里约束中间输出长度,要求analyze.py只输出汇总后的JSON,不要打印每一行原始数据,减少上下文占用量。
如果任务还是太长,就建议分批。比如100条视频分5批分析,每次20条,最后再把5份汇总结果合起来做整体判断。上下文窗口是硬限制,模型再聪明也绕不过去,拆任务是我验证过最有效的手段。
5.2 输出格式不稳定,怎么约束模型
分析报告和脚本模板都会要求固定格式,但稍微复杂一些的任务,模型偶尔还是会不按剧本走。比如让它按表格输出,它偏偏用列表;让它写三个信息增量,它只写两个。
第一招,在PROMPT.md里加入正面示例和反面示例。给一个它可能输出的错误格式,再给一个正确格式,对模型有很强的引导作用。我在Skill里专门加了一小节“错误示范”,效果立竿见影。第二招,为关键输出增加自检要求。让Codex生成完脚本之后,自己对照模板逐项检查,缺失的自动补齐。这一步虽然多消耗一点上下文,但能让最终产出更稳定。第三招,模板中所有字段设置明确的填充规则。比如“必填,20字以内”“1-5个”,把空泛约束改成硬性标准,模型就不需要猜测。
5.3 数据采集的合规性问题与替代方案
项目中需要用到对标账号的视频数据,这里必须多说一句合规问题。我不建议用任何方式绕过平台限制去抓数据,一方面有法律风险,另一方面接口震荡也容易导致数据断供。
我的做法是:把种子账号的视频链接整理好,逐一手工记录公开页面上可见的基本指标,或者使用平台官方开放的创作者数据模块导出。现在很多平台提供了面向普通用户的历史数据看板,直接在网页上看完播率、互动率等公开指标,再手动录入CSV即可。一条视频录入耗时一两分钟,20条样本也就半小时,足够启动分析流程。规模做大之后,再考虑接入官方开放平台API,走正规数据通道。
在Skill里我也写了提醒:任何分析都必须基于真实可见的指标,如果拿不到准确数据,宁可减少样本量,也不能编造数字。编出来的爆款分析报告只会带偏整个创作方向,最后吃亏的还是自己。
5.4 Skill调试技巧:验证与迭代
Skill不是写完就能用对,必须反复验证。最简单的方式是准备一份固定的测试数据集,每次修改PROMPT.md或打分规则后,都跑一遍同样的任务,对比输出结果。我会重点检查三个方面:分析维度的完整性、打分逻辑是否与本地的分析结论一致、脚本模板有没有被严格执行。
如果分析结果与预期不符,优先检查打分权重是否合理。比如一开始我把完播率权重设为30%,但在某一次测试中,一条完播率极高但点赞率极低的视频被判定为头部爆款,这明显不合理,因为点赞率代表内容有没有真正打动用户。后来我把完播率权重降到25%、点赞率提高到25%,同时引入评论率作为附加维度,才让排序结果接近人类编导的判断。
迭代的过程就是不断用真实案例校准Skill里的规则。我建议每个月回顾一次积累的校正记录,把新发现沉淀进去。这个习惯能让Skill越用越准,而不是写完就固定不变。
6. 一些真实体感与后续扩展想法
整套项目跑通之后,我自己在写脚本和做选题上的时间投入至少省了一半。更重要的是,分析逻辑被固化成代码和规则之后,团队里新人也能靠这套Skill较快上手,不再需要一个编导手把手带。
后续我计划做两个方向上的扩展。一个是把Skill和定时任务绑定,每周自动抓取一次对标账号数据,生成周报,再根据周报自动产出下周的选题脚本方向。另一个是让Skill支持更多平台,比如小红书图文脚本和视频号口播脚本的模板,底层分析逻辑相近,只需要替换输出模板和平台指标权重即可。有兴趣的读者,完全可以在我的这套结构基础上,改成你所在行业的专属分析助手,原理都是通用的。