资讯动态

用AI和Python把小说改编成短剧:自动化实操流程全记录

发布时间:2026/10/22 9:58:15 来源:尧图企业网站定制
1. 为什么小说改编短剧需要AI和编程配合最近几个月我一直在忙一件让我又爱又恨的事把一部长篇网络小说改编成短剧脚本。原本我以为这就是个翻译工作把小说对白抄出来、删掉描写、加上场景提示就行。真上手之后才发现短剧改编根本不是删减而是重构。一本两百万字的小说如果靠人工去读、去标、去拆光是通读就得花掉好几天更别提还要梳理人物关系、抽取关键冲突、统一对白风格。我在做到三分之一的时候意识到这个过程的瓶颈不在于写而在于整理和决策。也就是从海量文本里快速找到哪几章有强冲突、哪几句话能成为钩子、哪些角色可以合并、哪些支线必须砍掉。所以我做了一个决定把改编流程拆成两半AI负责读懂和提炼编程负责搬运和格式化。AI解决语义理解的问题大模型可以快速通读章节、输出摘要、提炼冲突、改写对白编程解决批量处理的问题用脚本把几十万字的文本切成章节、抽出台词、生成分镜表、统计角色出场频次。两者一配合原本需要一周才能完成的前期分析压缩到了半天以内。这篇文章不是什么学术研究成果就是我自己实操踩坑后的完整记录。内容包括工具选型、提示词设计、Python脚本、以及大量现场翻车后的修复方案。如果你也想把小说改短剧或者做任何长文本转短视频脚本的活儿可以直接把这套流程拿去用。1.1 短剧改编的核心难点不是写剧本而是做减法我一开始犯的最大错误是总想着把小说压成短剧。后来才明白短剧和小说是两种完全不同的叙事产品。小说的叙事单元是章节它允许大段的心理描写、环境铺垫、支线铺陈。短剧的叙事单元是情绪爆点它的核心逻辑是三分钟一集、每集要有一个钩子、每集结尾要留一个悬念。也就是说改编短剧的第一步不是决定保留什么而是决定杀掉什么。一个两百章的网文最后可能只保留了其中十几个核心场景其余全部变成背景信息。这个杀的过程难的不是判断哪个情节好而是你需要先知道自己手头到底有什么。人眼扫读完一本书很难形成全局认知哪条人物线出现了多少次、哪几个冲突在后期被回收、哪些伏笔其实没用上。这种全局统计恰恰是AI和程序最擅长的事。让AI先做全书摘要、再做章节摘要然后让脚本统计每个角色的出场章节数、每个关键词的分布频率你就能在一个文档里看到整本书的骨架。有了骨架之后做减法就快多了。哪些角色是工具人直接合并哪些章节是过渡章直接砍掉哪些冲突是重复的只留最强的那一个。这个决策过程仍然要你来拍板但拍板的时间至少省掉了一大半。1.2 AI负责读懂内容编程负责批量搬运我在实际操作中给AI和编程做了非常明确的分工这个分工也值得你参考。AI大模型承担的是理解类任务。比如通读某一章、输出这章的三句话摘要判断这章有没有完整的冲突结构目标、阻碍、结果提取这一段对白中说话人的身份和情绪用网文作者的风格改写一段短剧对白让台词更短、信息量更大。这些任务的特点是单次输入量有限、输出结果需要语义理解、没有固定的格式。编程承担的是密度型任务。比如把一本TXT小说按第X章切分成独立文件统计每章的字数和对话占比把全书的引号对话批量提取出来把AI生成的分镜描述按照固定的Excel模板填充做一个命令行工具输入章节范围自动输出一个分镜草稿表。这些任务的特点是数据量巨大、规则明确、重复性强。关键点在于不要让AI做它不擅长的事也不要用程序处理它理解不了的内容。我见过不少团队试图让AI一口气处理整本小说结果上下文长度根本不够输出一团乱麻也见过有人用正则表达式硬抽对话结果遇到嵌套引号就崩溃。正确的姿势是交叉使用先用脚本把小说切碎再用AI逐一消化最后再用脚本把AI的产出整合成标准格式。2. 项目准备工具、环境与数据规范我梳理过整个项目需要用到的几类工具这里先做一个系统的整理。2.1 大模型选型与脚本环境大模型方面我的经验是要准备两个不同的模型配合使用。一个是通用对话能力强的模型负责改写对白、润色台词、生成分镜描述另一个是逻辑推理能力更强的模型负责解析章节结构、识别叙事逻辑、判断冲突是否完整。为什么这样分配因为两者在提示词行为上的差异很大。强逻辑模型在处理这段情节的目标和阻力是什么这类问题上表现更好而通用模型在把这个句子改成有张力的短剧台词这种开放创造力任务上更顺手。如果你只有一种模型的接入条件也完全可行只需为不同任务设计差异化的提示词即可。编程环境则简单很多我使用的是Python和几个常见的库。Pandas用来处理表格数据openpyxl用来读写Excel文件正则表达式用来做文本切分和清洗。如果你对Python还不熟也不用着急后面我会给出可以直接复制的脚本你只要能运行Python就行。2.2 原始文本的清洗与章节切分拿到小说的TXT文件后首先要处理的是格式问题。很多出版社、网站的导出文件里会有大量噪声比如书签、广告段、特殊分隔符甚至乱码。用脚本做一次预处理可以把这些噪声一次性清理掉。import re def clean_text(raw_text: str) - str: # 移除常见广告行和噪声字符 lines raw_text.split(\n) cleaned_lines [] noise_patterns [ r^[【\[]?广告[】\]]?.*$, r^.*(纯属虚构|如有雷同|版权所有).*$, r^\s*$, ] compiled [re.compile(p) for p in noise_patterns] for line in lines: if any(p.match(line) for p in compiled): continue cleaned_lines.append(line.strip()) return \n.join(cleaned_lines) def split_chapters(text: str): # 按“第X章”或“第X节”切分保留章节名 pattern re.compile(r(第[0-9一二三四五六七八九十百千][章回节])) parts pattern.split(text) chapters [] for i in range(1, len(parts), 2): title parts[i] body parts[i 1] if i 1 len(parts) else chapters.append({title: title, content: body}) return chapters清洗的时候有一个细节容易踩坑某些小说在章节标题前面会有全角空格或者不可见的特殊字符直接按第X章切分会漏掉一部分。我的做法是在切分之前先把所有全角空格替换为半角空格再用正则切分这样能覆盖绝大多数情况。切分完成之后我建议顺手统计每一章的字数生成一个简单的章节列表文件。字数统计对应着一个非常实用的决策依据太短的章节通常是过渡章或者断章改编时可以重点关注太长的章节往往包含多场戏需要进一步拆解。这个列表也让后面交给AI处理时能精确控制输入范围。3. 核心流程拆解小说到短剧的五步改编法下面这个五步流程是我在实操中反复调整后固定下来的我称之为改编流水线。整套流程做完你会得到三个输出物情节卡片、角色关系表、分镜脚本表。3.1 第一步章节价值评估我的做法是给全书每一个章节打分维度有三个冲突强度、信息密度、情绪冲击。别急着每一章都丢给大模型去读那样成本太高。我采用的是先粗筛、再细读的策略。粗筛时只取每章的前两段和后两段加上章节标题拼成一个小文本块交给大模型让它输出这一章的三句话摘要和一个冲突强度分0到10。这样做的好处是速度快、消耗少准确率也还可以。因为章节的开头和结尾通常已经包含了转场、悬念和结果足够判断这一章的分量。细读阶段只看分数高的章节让大模型输出完整的情节卡片。包括四个要素场景背景、参与角色、核心冲突、结尾悬念。这个情节卡片就是后续分镜改编的基础单元。3.2 第二步角色关系与人物弧光提取短剧之所以能在一个场景里同时容纳多个角色通常靠的是关系冲突而不是单个角色独强。所以我要先搞清楚小说里有哪些角色以及角色之间是什么关系。这里我会做一个很笨但很好用的操作把所有对话台词提取出来统计说话人频次。小说里的对话通常会写成某某说XXXX或者某某道的格式用正则能把大部分台词抽出来。import re def extract_dialogues(text: str): # 匹配“角色名 说/道/问/答 冒号/逗号 台词” pattern re.compile( r([\u4e00-\u9fa5]{2,4})(?:说|道|问|答|低声道|高声道|笑着|喊道)\s*[:,](?Pcontent“.*?”|「.*?」|\.*?\), re.S ) dialogues [] for m in pattern.finditer(text): speaker m.group(1) content m.group(content) dialogues.append({speaker: speaker, content: content}) return dialogues小说里可能把角色名和台词写得混乱这一点我会在后面排查部分专门讲。 得到每个角色的台词数量后就有了一个谁戏份多的客观数据。戏份排前五的角色基本就是短剧的主角团后排的角色可以考虑合并成一个功能性角色。角色关系图谱这一步我会做一个表格让大模型输出角色两两之间的关系标签比如敌对师徒恋人上下级。这个表格的意义在于帮助后续决策一场冲突戏里出场的两个角色之间必须存在某种张力否则这场戏没有改编价值。3.3 第三步强冲突场景识别与情节密度判断短剧的单集时长一般在1到3分钟对应大约300到900字的脚本。这个体量意味着一个单集只能装下一个完整的小冲突或者一个冲突的开始一个更大的钩子。所以关键是把小说里的情节线拆出来找到那些能独立成集的冲突单位。我让大模型做这样的分析输入一章内容输出这一章里所有的冲突事件每个事件用四个要素描述目标、阻碍、行动、结果/反转。举个例子小说明明可以写一百章的商战博弈但短剧里可能只需要保留其中三到四场见面谈判戏。这四场戏之间隔着大量描写、回忆、信息交代改编时全部砍掉只保留冲突现场的台词和动作。大模型在这里的作用是把每一章的可改编事件挑出来脚本则负责把这些事件按顺序排列标出它们之间的因果关系。这里我还做了一个情节密度的计算用事件数量除以章节字数。密度高的章节通常可以直接对应一集密度低的章节只能提取素材拼到其他集里去。统计完成之后整个剧本的场次表就已经浮现出来了。3.4 第四步对白改写与短剧风格重塑小说对白和短剧对白是两套逻辑。小说对白里会有大量铺垫性的寒暄、心理活动的旁白、作者介入式的解释短剧对白要求每句台词都有功能要么推进剧情、要么展现关系、要么埋一个钩子。我在实际改编时会让AI做三件事。第一件事是压缩对白。输入一段原文对话让它删掉所有废话保留冲突核心逻辑。比如原文里角色绕了三句话才表达一个意思压缩后可能只剩一句。第二件事是强化潜台词。对白尽量不直接说出核心意图而是通过反问、转移话题、沉默等处理制造张力。第三件事是短句化。每句台词不超过15个字方便演员表演和剪辑节奏。这里给出一个我实测效果很好的改写提示词模板你是短剧编剧。请把下面的小说对白改写成短剧对白要求每句不超过15个字保留角色真实意图但改用暗示表达句子之间要有停顿感删除所有解释性台词。输出格式为“角色名台词”的列表。这个提示词看起来简单但保留真实意图但改用暗示表达这个要求非常关键。如果不加这句模型很容易把原文对白换个说法再说一遍冲突感完全没有提升。3.5 第五步分镜表与可视化输出对白改完之后下一步是生成分镜表。分镜表是编剧和拍摄团队之间的翻译器它把文字脚本转换成每个镜头该拍什么、怎么拍、镜头怎么切。我的分镜表模板包含这样几列集数、场次、镜号、景别、镜头运动、画面内容、台词、音效/音乐、时长。改编时每一段对白对应1到3个镜头。台词多的对话场景我用正反打结构先给关系镜头建立空间关系再给说话人的特写再接反打。这一部分AI生成的文本还需要人工确认AI对视觉画面的描述往往过于文学化比如她眼里的光暗了下去这种话没法直接拍。我通常会让大模型用可拍摄指令重写画面描述也就是只用人物动作、环境状态、镜头机位这些客观元素。比如改成她低头手指攥紧停顿两秒。最终输出我仍然用了脚本把分镜描述填充到Excel模板里方便导演和制片直接查看、修改、安排拍摄计划。4. 编程实操批量处理小说的关键技术点前面讲的是流程逻辑这一部分来点硬核的直接上我实际用过的脚本和遇到的技术问题。4.1 对话内容清洗引号、空格与断行还原很多TXT文件里对话经常被错误拆行。比如你真的要走吗她问 声音有些颤抖。这种换行会把原本应该是一句完整台词的对话拆成两段。如果直接交给AI它会以为声音有些颤抖也是台词然后根据上下文强行理解结果就变得不可控。我的处理方式是先做一次对话合并清洗。规则很简单——以引号开头的行如果下一行不是以引号结束也不以角色名说/道开头就认为这个换行是格式噪声直接把两行拼接起来。def join_dialogue_lines(text: str) - str: lines text.split(\n) merged [] i 0 while i len(lines): line lines[i] # 如果当前行以引号开头但还没闭合 if line.count(“) line.count(”): j i 1 while j len(lines) and line.count(“) line.count(”): line lines[j] j 1 merged.append(line) i j else: merged.append(line) i 1 return \n.join(merged)这个脚本看起来很简单但它解决了我最大的数据质量问题。如果你处理的文本恰好是从某个阅读软件导出的大概率会遇到同样的断行问题。4.2 台词归属提取算法的容错处理台词归属提取是另一大难题。网文里常见的错误格式太多了比如他说后面直接跟了别的角色的台词或者角色名和时间混在一起。前面我给出的正则提取方法能覆盖大约60%的情况剩下的要靠一套补充规则。补充规则之一是就近匹配如果一段对话前面没有明确的说话人就向上搜索最近的角色名说/道/问作为归属。补规则之二是引号兜底如果引号内容前面紧跟着一个名词短语即使没有说字也尝试提取说话人。补规则之三是排除干扰词很多书里会有系统提示系统音这类非角色发言需要在提取后过滤掉。我会把提取出来的对话存成一个CSV每一行包括章节号、说话人、台词内容。这个CSV不仅是后续分镜的基础还是一个校验手段——统计出每个角色的台词量与实际戏份是否匹配如果某个角色台词量极少但在关键戏份中频繁出场那属于功能型角色可以合并。4.3 用脚本批量生成分镜Excel模板接下来是我个人很推荐的一个自动化环节把AI生成的分镜描述批量填充到Excel模板中。这一步节省的时间最多。我预先做了一个分镜Excel模板里面包含标题行、数据验证下拉框景别、镜头运动、条件格式不同情绪场次的底色标记。然后写了一个Python脚本读取AI输出分镜的JSON结构逐行填入模板。import openpyxl from openpyxl.styles import PatternFill def write_storyboard_to_excel(data: list[dict], template_path: str, output_path: str): wb openpyxl.load_workbook(template_path) ws wb.active header_mapping { 集数: episode, 场次: scene, 镜号: shot, 景别: shot_size, 镜头运动: camera_move, 画面内容: visual, 台词: dialogue, 音效音乐: sfx, 时长: duration } row 2 # 表头在第1行 for item in data: for col_name, key in header_mapping.items(): col_idx list(header_mapping.keys()).index(col_name) 1 ws.cell(rowrow, columncol_idx, valueitem.get(key, )) # 给“冲突场次”添加底色 if item.get(tension, 0) 7: for col_idx in range(1, len(header_mapping) 1): ws.cell(rowrow, columncol_idx).fill PatternFill( start_colorFFE699, end_colorFFE699, fill_typesolid ) row 1 wb.save(output_path)这套流程的最大好处是编剧在修改分镜文本时只需要改中间的JSON数据Excel文件每次都能一键重新生成。前期我都是手动复制粘贴后来一天要改三版分镜表实在受不了了才做了这个脚本。4.4 一个端到端的命令行小工具脚本拆开用总归还是一件一件点后来我直接写了一个命令行工具。这个工具做的事情很专一输入一本小说的TXT文件路径和你想改编的章节范围输出一个分镜草稿表.xlsx。整个流程分成三步。第一步调用清洗脚本把原文切成干净的章节列表。第二步对目标章节逐章调用大模型让AI生成情节卡片并改写成短剧对白。为了节省token我用了两层摘要的压缩策略先让AI输出场景摘要再让AI基于摘要改写对白。第三步把AI输出的结构化数据写入Excel模板同时生成一个可直接打印的Word版拍摄脚本。这个流程极大地改进了协作效率。原本一个团队需要编剧、策划、脚本统筹三个人协作完成的从小说到分镜过程现在最大程度地在一个人的驱动下就能完成。我并不是说编剧没有价值了而是说编剧可以从整理素材的苦力工作中解放出来去专注真正需要判断力的决策工作。5. 踩坑记录改编过程中最常见的六个问题与排查工具和流程都介绍完了我估计你也已经准备动手了。但在你动手之前我把自己踩过的坑全部列出来每一个都配了排查思路。5.1 角色名张冠李戴AI幻觉的经典表现在章节摘要阶段我第一次尝试时出现了大量AI幻觉角色A说的话被安到了角色B头上关系图谱里把敌对标成了师徒。起初我以为是模型能力问题后来发现是输入文本过长导致注意力分散。排查方法很简单把输入长度限制在2000字以内并在提示词中要求必须使用原文中出现的角色名不得推测。如果一章内容过长先把它拆成上下半场分两次调用再让第二次调用基于第一次的结果做一致性检查。这个操作基本消除了九成以上的角色混淆。5.2 语音文本断句误判多说话人对话识别失败有的小说会在一个段落里出现多角色的连续对话比如你来了。他说。是的。她回答。那你知道该怎么做。这种连续对话没有换行很难用正则一次性拆对。我的处理方式是先按他说她回答这类说话标识切出候选片段然后再做一步后处理如果某个片段内部包含了两个引号闭合组就按闭合组再次切分。这里有一个经验书里如果用了中文引号嵌套引号的情况很少可以放心按引号闭合来判断。但如果这本书用了英文引号嵌套问题会非常严重必须依靠语义模型来做拆分。5.3 章节边界识别失效有些电子书章节标题格式不统一既有第1章又有第01章还有第十章和Chapter 10。我刚开始只用了一个正则结果漏切了将近三成内容。修复方案是做一个多模式识别的脚本先尝试匹配全角数字再匹配半角数字再匹配中文数字三个模式取并集。切完之后用章节标题字数的格式做校验正常章节字数应该在1000到5000之间如果某章只有几十个字大概率是切分错误需要人工复核。5.4 短剧节奏文戏过重总是舍不得删AI改写对白之后我一度发现脚本里的文戏比重还是很高。所谓文戏就是指纯对话推进的场次缺少动作、缺少画面变化。短剧很忌讳这一点观众需要视觉刺激和前倾感。后来我给自己定了一个硬性规则每一场戏必须有三个元素之一——动作冲突、空间移动、情绪反转。编写分镜表的时候我会用脚本扫描画面内容列如果连续三行都是某某说或者某某看着某某就自动生成一个高危标记提醒编剧插入动作设计。5.5 钩子复用与悬念疲劳短剧每集结尾都要有一个钩子。但AI生成的钩子往往会高度重复比如经常使用突然出现一个人或真相竟然是这样这类套路式转折。改到第十集时观众会产生审美疲劳。我的调整策略是建立钩子类型库把钩子分为身份悬疑、关系反转、目标突转、风险升级等八种类型并在一部短剧里交替使用。AI只负责生成候选方案最终选择哪种钩子顺序由人工决策。5.6 token消耗与成本失控最后是成本问题。一本书全文塞给AI做分析和改写token消耗会迅速膨胀。我第一次做全本分析时光API费用就花了不少。控制成本的策略有三点一是粗筛阶段只输入章节首尾大约每章节省80%输入量二是对只需要抽取信息的内容使用更轻量的模型三是大量内容在本地用脚本完成比如台词提取、角色统计、字数统计不占用任何API额度。粗筛细读脚本这套组合拳最终把成本降到了可以接受的水平。6. 实战复盘一个虚构项目的完整改编案例流程讲了一堆我来用一个虚构的案例把整个过程串起来帮你建立全局观。6.1 模拟项目背景与选书逻辑假设有一部都市脑洞小说《某重生系统》纯虚构全文180万字500多章。我和团队要做一部30集的短剧每集大约1分半钟目标非常明确在开头3秒内抓住观众每集结尾留下点击冲动。选书逻辑是这部小说有一个高概念设定主角开局就有一个回档能力这种设定天然适合短剧——每次回档都是一次命运重开都是现成的悬念钩子。但小说里大量笔墨花在了重复失败、复盘细节、系统面板展示上这些部分必须砍。6.2 整本书的改编过程记录整个项目用了三天。第一天主要做数据准备用脚本把TXT切分成500个章节文件清洗掉大量广告和乱码统计每章字数生成章节清单。整个下午的活儿用脚本几分钟就跑完了剩下时间都在检查特殊格式。第二天做AI分析。我把500章分成十个批次每个批次用脚本拼成一个章节摘要表然后逐章调用大模型生成情节卡片。晚上的时候我挑出了冲突强度分大于6的章节约70章再让大模型对每个强冲突章节输出细化的冲突事件。这70章就是我们后来30集短剧的原始素材池。第三天做对白改写和分镜生成。先让大模型把几个主角的对白统一改成短剧语言再把每个场景拆成10到20个镜头填入Excel模板。最后生成的文件是30集、共计300多行的分镜表。我用脚本在各集之间检查了钩子类型分布确认了没有连续三集用同一个套路。6.3 这套流程节省了什么如果纯靠人工这套从零到分镜表的流程至少需要一名编剧全职投入五天两天通读原著、一天做人物关系和情节标注、一天半写分镜草稿、半天做格式整理。三天后可能还会推翻重来。我这套流程的实际占用时间不到三天但最关键的节省点不是时间而是决策前置。脚本通过数据分析告诉你哪些章节值得改编模型通过摘要告诉你每个章节的冲突结构你只需要在关键路径上做决策而不是在每一个细节上耗费注意力。7. 一些个人体会这套流程跑了几个模拟项目之后我最深的体会是别把AI和编程当成自动写剧本的机器它们真正擅长的是降低信息的检索成本和提升素材的整理速度。短剧的核心竞争力仍然在于改编视角——你要知道哪些东西可以激发观众的情绪哪些情节放在短视频平台的前三秒能留住人。这种判断力AI给不了你程序也算不出来。如果你问我从哪一步开始动手我的建议是先别急着改编花一个下午把小说清洗好、切好、统计好。你会发现自己比想象中更了解这本书而接下来的每一步都会顺很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑