剧本文本生成器

填好地点、时间、两个人物与这一场的冲突,再选一种语气,页面按固定种子拼出一段结构化剧本:场景标题行、两句动作描写、三轮对话、一句收尾。同一组输入永远得到同一段文本。

改任意一个字段再点「生成剧本」,或在输入框里按回车;人物重名、字段为空或超长都会给出具体提示。

使用方法

  1. 「场景地点」填这一场发生的空间(示例:便利店)。含街、路、公园、广场、天台、操场这类字时,标题行判为外景,其余按内景处理。
  2. 「时间」填一天里的时刻或季节(示例:凌晨两点),它会原样出现在场景标题行里,不参与任何改写。
  3. 「人物 A」「人物 B」填两个人名(示例:林夏、周远);A 先开口,之后两人交替,共三轮六行,同名会被拒绝。
  4. 「冲突或目标」填这一场要解决的事(示例:把话说清楚),它会以引号的形式进入台词模板,成为本场戏的发动机。
  5. 「语气」选克制、激烈、温情或悬疑,决定从哪一组台词库里取句;选好后点「生成剧本」,或在任意输入框按回车。
  6. 结果区可用「复制剧本」带走,也可用「导出 TXT」存成本地文件;导出文件带 BOM,记事本打开不乱码。

剧本文本生成器能解决什么

第一类是空白页卡壳。写一场戏最难的不是金句,而是先把骨架立起来:谁在哪儿、什么时候、要什么、对方怎么挡。本页把这四项变成四个输入框,填完立刻得到一段带格式的片段——场景标题行、两句动作描写、三轮对话、一句收尾。它的作用不是替你写,而是给你一个可以删改的起点。

第二类是练习与教学场景里的批量出稿。表演练习、分镜草稿、剧本杀线索卡都需要大量短片段,人工一条条写很慢,用随机生成又常常得到不可复现的结果——上一次偶然出现的那一版找不回来,等于白搭。本页用输入内容算出固定种子,同一组输入永远得到同一段文本,改一个字才换一版,可以放心把「地点 + 时间 + 人物 + 冲突」当成这段片段的编号存档。

第三类是格式规范化。手写草稿里括号动作、人物冒号、空行分段经常混乱:有的用英文冒号,有的动作提示写在台词后面。本页输出的每行都遵循 人物:(动作提示)台词 这一条格式,场景标题行用「内景或外景.地点 - 时间」,段落之间空一行,贴进剧本软件或分镜表都不用再排版。

本页不做的事也说清楚:不写长篇结构,不处理三人以上的场次,不做人物小传与世界观设定,也不评判台词好坏——它只负责把四个要素按剧本格式拼成一段可读的片段。

原理与变量

种子怎么来。把地点、时间、人物 A、人物 B、冲突、语气六个字段按顺序拼接成一个字符串,逐字符取 UTF-16 码元并求和,得到的整数就是种子。示例六个字段拼成「便利店凌晨两点林夏周远把话说清楚kz」,求和得 421657。种子只依赖你填的内容,与当前时间、浏览器、设备全都无关,这是确定性的第一层保障。

推进用线性同余。取句时不使用任何随机接口,而是用线性同余发生器推进种子:s = (s × 1103515245 + 12345) mod 2147483648,乘法用 32 位整型乘法实现,取模用按位与 0x7fffffff 完成。第 n 次取句用的就是第 n 次推进后的 s,顺序与结果都固定。

取句公式。第 n 句的序号 = floor(s ÷ 2147483647 × 句库长度)。s 的上界是 2147483647,除以它得到 0 到 1 之间的比例,再乘句库长度后向下取整。这个比例永远小于 1,序号不会越界;即便算出等于长度的极端值,代码也退回 0 号句,保证不会取到空值。

去重与句库规模。动作描写库 20 句,收尾库 8 句,台词库按语气分四组、每组 8 句,共 32 句;模板里用占位符承载冲突,生成时替换成你填的内容。已取到的序号会被记下,下次遇到就顺延一位,因此六行对话不会重复——八句库取六句,总有富余。

内外景判定。标题行第一个词由地点里的字符决定:出现街、路、公园、广场、天台、操场、巷、河、山、海、田、桥、院、坝、滩中的任意一个就判外景,否则判内景。「便利店」不含这些字,所以是内景。这是一条按字匹配的经验规则,写「便利店门口的街道」会因含「街」而被判为外景,想强制内景就把地点写短一点。

完整示例

默认输入为:地点便利店、时间凌晨两点、人物林夏与周远、冲突把话说清楚、语气克制。生成结果的第一行是场景标题「内景.便利店 - 凌晨两点」,接着空一行是两句动作描写,再空一行是六行对话,最后空一行是一句收尾。

六行对话按 A、B 交替:林夏先开口(停顿两秒)说「我数到十再回答你,免得又吵起来」,周远接(把杯子推过去半寸)「喝一口,我们重来一遍」,随后两人各再推进两轮,第六行以周远的「你先说,我听着」收住,把主动权交回给对方——这正是克制这一语气的特征:话不说满。

把语气从克制换成激烈再生成:种子因最后一个字段从 kz 变成 jl 而改变,六句台词全部来自激烈库,出现反问、打断与命令句,动作提示换成转身、拍台面这类高能量动作,场景标题行与人物名不变。想回到原来那一版,把语气改回克制即可,文本逐字还原。

对照表

下表给出 16 组「语气 + 场景」的组合与本页的典型产出倾向,供选题时参照,默认显示 12 行,点「加载更多」展开其余 4 行。

语气场景(地点 · 时间)冲突示例台词特征
克制便利店 · 凌晨两点把话说清楚短句、留白、不评价对方
克制办公室 · 周五傍晚交接项目陈述句为主,动作极简
克制医院走廊 · 清晨要不要手术压低音量,句式完整
克制电梯间 · 深夜要不要报警极短句,停顿多于台词
激烈出租屋 · 雨夜谁先开口反问与打断
激烈操场 · 正午翻旧账音量上扬,句末感叹
激烈停车场 · 黄昏车钥匙归属命令句,动作幅度大
激烈会议室 · 季度末责任归属质问链,一句追一句
温情老家厨房 · 除夕今年回不回来停顿与称呼
温情病房 · 午后要不要说再见轻触式动作,语速慢
温情校门口 · 放学第一次独自回家叮嘱句,重复关键词
温情阳台 · 夏夜要不要搬家回忆插入,句尾柔和

结果边界与舍入

确定性边界。种子只由六个字段决定,所以「同输入同结果」严格成立:清缓存、换浏览器、换设备、隔一年再打开,只要六个字段一字不差,生成的文本就一字不差。反过来,加一个空格、改一个标点都会让种子变化,换出完全不同的一版——想微调又想保留结构,请一次只改一个字段。

输入校验。六个字段中任一为空,会指出具体是哪个字段(例如「人物 B 未填写:请填一个名字」);人物 A 与人物 B 同名会被拒绝,因为六行对话里两人无法区分;地点、时间、冲突超过 40 字,或两个人物名超过 20 字,都会提示当前字数与上限。报错时统计区与结果区显示破折号,不保留上一轮结果。

取句兜底。台词库按语气分组,若语气值不在四组之内,退回克制组;若序号因极端值越界,退回 0 号句;若句子被取完,序号在库内循环顺延。三条兜底保证结果区不会出现空行或 undefined。

文本边界。生成文本的长度由句库决定,约 300 到 500 字符:动作描写两句、对话六行、收尾一句,结构固定,不随输入长度增长——冲突填 4 个字还是 40 个字,段落数都不变。导出 TXT 用 UTF-8 并写入 BOM;复制到剪贴板的内容不带 BOM,因为剪贴板文本不需要文件头标记。

常见问题

为什么同样的输入每次都生成一样的文本?

页面不使用随机接口,而是用六个字段的字符码之和当种子,再用线性同余发生器取句。这样设计是为了可复现:你偶然得到满意的一版时,只要记下六个字段就能还原。

想换一版怎么办?

改任意一个字段即可:最省事的做法是在冲突末尾加一个标点或换一个近义词,种子就会变化,取到的句子随之改变。也可以直接换语气,六个字段里只有语气变了时,场景与人物保持不变。

为什么我的场景被判成外景?

地点里只要出现街、路、公园、广场、天台这类字就判外景。想强制内景,请把地点写短并避开这些字,例如把「便利店门口的街道」改成「便利店」。

能生成三个人物的场次吗?

不能。本页固定两个人物、三轮对话共六行,人物再多会让交替规则变复杂。需要多人场次请分多场生成后再手工拼接。

台词里的引号内容是什么?

是你填的「冲突或目标」。台词模板用占位符预留了这个位置,生成时替换进去,因此冲突改一个字,所有带占位符的台词会同步变化。

导出的 TXT 打开是乱码怎么办?

导出文件已写入 UTF-8 的 BOM,记事本与 Excel 都能正确识别。若仍乱码,多半是打开工具强制按 GBK 解码,请在导入时手动选择 UTF-8。

输入内容会上传到服务器吗?

不会。生成与导出都在浏览器里完成,页面没有提交逻辑,也没有账号,刷新即清空。

生成的文本可以直接用吗?

它是草稿不是成稿:格式是规范的,但台词只按语气模板套出,人物动机、前后文照应仍需你改写。把片段当成第一版,再逐句替换成你想要的话。

相关工具