Coze实战:10个作品涨粉1w+的历史解说故事视频,附详细提示词

2025-11-23 10:35:54 106

图片

不知道大家有没有在抖音、视频号上刷到过一些历史人物解说视频:通常是介绍某一个历史人物生平故事,及其有力的男声解说配上诡谲的画面,这样的视频在抖音上仅仅发布20条就能涨粉10w+,而且每条作品都是上千上万的点赞。

图片

这种视频用coze工作流也可以制作,只需要输入简单的关键词,1分钟就能生成此类爆款历史解说视频,而且自动导入剪映草稿,完全不需要自己动手剪辑。这类视频拆解出来的构成主要有以下几个方面:封面人物形象封面标题(2-4个字)开场音效视频画面视频音频背景音乐这些也是我们搭建coze工作流的关键元素,话不多说,接下来就带大家一步步实操如何生成这种涨粉10w+的历史解说视频。完整工作流分为三个部分1、大模型节点生成字幕、文案和分镜脚本2、根据分镜脚本生成画面和配音音频3、用剪映插件合成处理

图片

第一步:开始节点配置我们工作流是围绕给出的主题「theme」,让大模型生成文案以及可生成人物形象和视频画面的提示词,所以开始节点只需要输入「theme」这个变量名。

图片

第二步:生成视频文案这一步是让大模型根据我们输入的「theme」生成对应的视频文案。模型:我选的是DeepSeek-V3,消耗资源点会更少一些输入:同步开始节点的「theme」用户提示词:输入主题{{theme}}输出:变量命名为「content」,变量类型选择string字符串类型

图片

系统提示词可以直接复制👇🏆【## 角色你是顶尖历史学者,专精于将厚重历史转化为令人血脉贲张的2分钟沉浸式视频脚本,史实精准如刀,叙事抓人如钩。要求请为2分钟历史视频创作**纯口播字幕文案**,主题:{{theme}}。脚本必须包含:悬念开场:(朝代/场景)+ 反常识疑问/断言 (例:大明官场,清官真的死得更快吗?)感官钩子:开场融入1处强烈感官描写(视觉/气味/触感)。身份代入:用“你”直指观众。清晰点明:你的具体官职/身份、时代背景、面临的**即刻致命威胁** (具体对手/危机)。拒绝过渡词 (如“想象一下”),直接切入。冲突升级 (三幕式):【第一幕 外压】:强敌/天灾/上级威逼 (例:敌军围城三日/圣旨限时破案/蝗灾蔽日)。【第二幕 内溃】:背叛/匮乏/疫病蔓延 (例:心腹通敌/粮仓见底/高热灼体)。【第三幕 深渊】:道德绝境 (忠孝难全/屠城抉择/生死站队),**必须包含真实历史困境案例**。破局细节 (三连击):主角采取**3个递进动作**:震慑雷霆:公开处决/焚毁关键物证 (制造冲击)。心战迷雾:实施离间/散布匿名信 (心理博弈)。终极底牌:亮出密诏/借天威压人/孤注一掷 (绝地反击)。术语点睛:在关键动作处,自然嵌入**至少2个精准历史术语** (如“鱼鳞图册”、“廷寄”、“火牌传符”)。主题收尾:主角结局 (惨胜/悲壮败亡)。引爆金句:由结局提炼普世历史规律 (权力本质/战争真相/人性深渊)。终幕顿悟:结尾句式:“这一刻,你终于明白...”。关键强化点 (沉浸感 & 吸引力)感官沉浸:全篇融入**至少2处**关键感官描写(血腥气/信纸冰凉/铠甲沉重/号角刺耳)。节奏窒息:严格使用**超短句**(单句≤19字,长句用逗号狠切)。段落≤3句,制造刀锋般节奏。代入拉满:用“你”贯穿始终,让观众成为历史漩涡中心的主角。历史质感:术语、细节、困境必须基于扎实史实,增强可信与厚重感。输出格式仅输出最终口播字幕文案 (约300字)。无任何分段标题/说明。文案由长短句构成,长句逗号分隔为短句。文案生成好了之后我们就要根据文案生成主角图片、封面的标题和字幕分镜。第三步:生成主角图片

图片

首先是生成封面主角图片的提示词,同样选用的是DeepSeek-V3模型。输入:变量命名为「scenes」,同步上一个【生成视频文案大模型】节点的输出「content」用户提示词:输入文案{{scenes}}输出:变量命名为「desc_prompt」,变量类型为string

图片

系统提示词可以直接复制👇🥇角色根据故事信息生成故事主角开场绘画提示词desc_promopt技能技能 :生成绘画提示1.根据故事信息,生成主角任务绘画提示词desc_promopt,详细描述人物动作、表情、服装,色彩风格等细节。-风格要求:古代惊悚插画风格,1. **画面氛围**:颜色昏暗,氛围凝重,庄严肃穆,营造出紧张激烈的氛围 2. **视觉基调**:高对比度,乌黑漆金的色彩居多,但是色彩偏低饱和   3. **人物塑造**:正面平视特写(占画面85%以上)  ,背景留白 4. **服饰要求**:古代服饰,粗黑线勾-浅景深,人物必须正面视角,面对屏幕,人物在画面正中间限制只输出绘画提示词,不要输出其他额外内容然后根据生成的提示词我们要生成人物画面,添加一个【图像生成】的节点模型选择:通用pro比例:4:3宽:1024;高:768生成质量拉满输入:变量命名为「desc_prompt」,同步上一个【生成主角图片大模型】的输出「desc_prompt」

图片

最后添加【抠图】节点把生成的人物形象抠图出来就行,效果如下:

图片

第四步:根据文案生成封面标题

图片

人物形象生成好了之后,我们来生成封面的标题。输入:变量命名为「content」,同步【生成视频文案大模型】节点的输出「content」用户提示词:输入文案{{content}}输出:变量命名为「title」

图片

图片

系统提示词可以直接复制👇⛱️角色能够深入理解故事文案的情节、人物、场景,根据故事内容提炼出简洁精准的2个字故事主题。技能技能:生成2个字的标题1.从故事文案中提炼出能够精准概括故事核心内容的2个字故事主题限制:只围绕用户提供的故事文案进行分镜绘画提示词生成和主题提炼,拒绝回答与该任务无关的话题。主题【title】必须为2个字。直接输出主题,不要回复其他额外内容第五步:根据文案生成字幕分镜脚本

图片

大模型生成来到最后一步:生成分镜脚本。输入输出和前面基本一致,直接看图就好。

图片

图片

系统提示词可以直接复制👇🐵角色你是一位专业的抖音历史故事视频选题创作师,擅长根据关键词生成富有吸引力的历史故事选题视频相关内容。技能技能1: 生成历史故事选题视频分镜字幕当用户输入关键词时,围绕该关键词挖掘历史故事选题。针对选定的历史故事,仔细分析其中的关键情节、人物形象、场景特点等要素。对故事进行分镜,生成字幕cap:字幕文案分段:第一句单独生成一个分镜,后续每个段落均由2句话构成,语句简洁明了,表达清晰流畅,同时具备节奏感。分割文案后特别注意前后文的关联性与一致性,严格按照原始故事内容拆分,不得进行任何修改、删减。===回复示例===[{    "cap": "字幕文案"}]===示例结束===技能2: 生成视频主题根据生成的历史故事选题,提炼出2个字的主题。限制:只围绕根据用户输入关键词生成的历史故事选题进行分镜字幕生成和主题提炼,拒绝回答与该任务无关的话题。所输出的内容必须条理清晰,分镜字幕要尽可能详细描述画面相关内容,主题必须为2个字。视频文案及分镜描述必须保持一致。输出内容必须严格按照给定的JSON格式进行组织,不得偏离框架要求。严格检查输出的json格式正确性并进行修正,特别注意json格式不要少括号、逗号等。生成历史故事选题过程中,务必调用搜索工具,在互联网上寻找有关知识,确保信息来源准确。 第六步:生成视频画面和音频

图片

这里根据前面输出的分镜分成两个线路:生成视频画面和合成音频,最后转成json格式方便导入代码节点进行数据整合。首先是视频画面生成,调用到的节点有【图像生成】【选择器】(可以不配置,这里我是为了防止图像生成为空时,进行第二次图像生成作为备选)所以这里就直接以【第一次图像生成】节点的配置为例模型和比例的设置如图输入:同步【画面分镜-大模型】节点的输出「desc_prompt」正向提示词:输入古代惊悚插画风格{{desc_prompt}}

图片

然后是音频合成,这里和图像生成属于两条并行的线路,所以直接在批处理的引入节点添加一个【语音合成】节点。输入:text同步【画面分镜-大模型】节点的「cap」speed_ratio:语音速率可以稍微调快一点;1.1/1.2倍速voice_id:可以自己选,我这里用的是东方浩然的男声

图片

第七步:代码节点整合数据最后就是前面的数据我们都要通过代码节点整合起来,方便后续写入剪映小助手生成草稿。输入:image_list:同步【批处理】节点的「image_list」link_list:同步【批处理】节点的「link_list」duration_list:同步【批处理】节点的「duration_list」scenes:同步【画面分镜大模型】节点的「scenes_vedio」title:同步【生成主题大模型】节点的「title」role_image:同步【抠图】节点的「data」输出:根据代码节点的输出来一一对应填写

图片

图片

代码输入👇
async def main(args: Args) -> Output:    params = args.params    input_data = params.get('input', {})    import json    # 解析复杂的嵌套JSON字符串    def parse_json_safe(data):if isinstance(data, str):try:return json.loads(data)            except:return datareturn datatry:        # 获取并解析各项输入数据        duration_list = parse_json_safe(input_data.get('duration_list', {}))        image_list = parse_json_safe(input_data.get('image_list', {}))        link_list_raw = input_data.get('link_list', '{}')        link_list = parse_json_safe(link_list_raw)        scenes_raw = input_data.get('scenes', '{}')        scenes = parse_json_safe(scenes_raw)        role_image = input_data.get('role_image', '')        title = input_data.get('title', '')        # 确保所有数据都是字典格式if not isinstance(duration_list, dict):            duration_list = {}if not isinstance(image_list, dict):            image_list = {}if not isinstance(link_list, dict):            link_list = {}if not isinstance(scenes, dict):            scenes = {}        # 确保键是按数字排序的        sorted_keys = sorted(link_list.keys(), key=lambda x: int(x) if str(x).isdigit() else float('inf'))        # 创建音频数据列表        audio_data = []        start_time = 0for key in sorted_keys:            audio_url = link_list.get(key, "")            duration_ms = int(duration_list.get(key, 0))            end_time = start_time + duration_ms            audio_item = {"audio_url": audio_url,"duration": round(duration_ms / 1000000, 2),"start": start_time,"end": end_time,"audio_effect": "标准"            }            audio_data.append(audio_item)            start_time = end_time        # 创建图片数据        image_data_list = []for key in sorted_keys:if key in image_list and image_list[key]:                image_url = image_list[key]index = sorted_keys.index(key)                start = audio_data[index]["start"] ifindex < len(audio_data) else0                end = audio_data[index]["end"] ifindex < len(audio_data) else0                image_item = {"url": image_url,"start": start,"end": end                }                image_data_list.append(image_item)        # 创建文本时间轴数据        text_timelines = []for key in sorted_keys:if key in scenes and isinstance(scenes[key], dict) and"cap" in scenes[key]:                scene_info = scenes[key]                cap = scene_info.get("cap", "")index = sorted_keys.index(key)                start = audio_data[index]["start"] ifindex < len(audio_data) else0                end = audio_data[index]["end"] ifindex < len(audio_data) else0                text_item = {"text": cap,"start": start,"end": end                }                text_timelines.append(text_item)        # 创建文本字幕数据 - 与文本时间轴相同        text_captions = [item.copy() for item in text_timelines]        # 创建标题数据        title_list = [{"text": title}] if title else []        # 创建标题时间轴        title_timelines = []if title andlen(audio_data) > 0:            title_timelines = [{"text": title,"start": 0,"end": audio_data[0]["end"]            }]        # 构建最终输出ret = {"audioData": json.dumps(audio_data),"bgAudioData": "","kcAudioData": "","imageData": json.dumps(image_data_list),"text_timielines": text_timelines,"text_captions": text_captions,"title_list": title_list,"title_timelimes": title_timelines,"rolelmgData": role_image        }returnret    except Exception ase:        # 捕获可能的异常并返回错误信息和详细信息以便调试return {"error": f"处理数据时出错: {str(e)}","input_data": str(input_data)[:200] + "...",  # 限制长度以避免过大的输出"duration_list_type": str(type(parse_json_safe(input_data.get('duration_list', {})))),"link_list_type": str(type(parse_json_safe(input_data.get('link_list', '{}'))))        }
第八步:剪映小助手输出草稿链接最后可以按照下图节点进行导出的配置。

图片

最后运行的结果就是输入主题就会生成一个链接:

图片

把这个链接导入到剪映小助手就可以直接在剪映专业版里生成视频了,剪映小助手下载地址:https://www.51aigc.cc/?ref=www.aitags.cn#/cozeToJianyin?user_id=257929下载之后记得把草稿保存路径配置成和剪映专业版一样的路径。

图片

图片

跟着上面的步骤实操起来,相信你也可以用coze搭建出自己的爆款视频工作流。也欢迎有问题的小伙伴可以在评论区留言。 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

新闻动态

热点资讯

推荐资讯