大家好,我是灿灿, 专注于AI智能体应用,今天拆解一个近期爆火的哲学视频工作流。
话不多说,先看下生成的视频效果。
通过查看视频,我们可以发现视频包含开场白(今天我们要讲的是)、八个哲学主义画面的快闪、要讲解的哲学主义画面、详情讲解某种哲学主义的画面。
之前的文章我们讲的都是音频、字幕、图片同时出现的工作流,直接使用批处理就能完成。这个视频有点不一样, 八个哲学主义画面的快闪不是对应人声音频,而是一个发条音频。而且每个部分所对应的字幕、音频、配图都不一样,所以我们需要把这四部分拆开来,分别搭建,再使用时间线连接起来,合成一个完整的视频。
注:一般搭建工作流的顺序是把文案、图片、音频提前整理好,再把对应的字幕信息、图片信息、音频信息写入剪映草稿,由于这个视频的文案在最后一段,这样做逻辑会有点混乱,为了方便大家理解,我就按照视频播放顺序来依次搭建。
- 开场白节点搭建
开场白包含文案、音频、以及开场的画面。文案固定使用“ 今天我们要讲的是。 ”就行,使用这个文案去合成音频,再使用图像生成节点生成一张开场配图。
由于节点比较多,篇幅有限,我就截取关键的节点来展示。有疑问的小伙伴可以在评论区留言。
正向提示词:
一个肌肉发达赤裸上身的白种男人穿着米色短裤,
背对着在日落时抓着被撕开的背景悬在空中。
参差裂口内呈现黑色,下方铺展着辽阔蓝天和蓬松积云。
超写实油画质感凸显汗湿前臂血管与布料褶皱,戏剧性斜角光线投下金色时刻阴影。
景深模糊远处云层,宇宙虚空保持锐利清晰,广角镜头,人物占比很小。风格是油画
- 八大哲学主题快闪画面节点搭建
不知道大家有没有发现,我在讲开场白搭建的时候没有讲开始节点,因为开场白用不上。我们现在来分析一下,开始节点应该输入什么。我们回想一个四个部分的画面,哪些是需要ai生成的,第一个是那八个哲学主义,第二个就是具体某个哲学主义的文案。那么这个动态变量就是某个具体的哲学主义。所以开始节点的输入就是某个哲学主义,比如:虚无主义。
思路分析:由于这部分是没有人声的,但是它有一个发条音效,所以我们就可以以发条音频的时间线为准,把八个配图及字幕的时间线均分成8等份。
理清了搭建思路,我们就先做下准备工作,把八个哲学主义文案及配图生成出来。
先使用大模型生成哲学主义文案数组。
系统提示词:
# 角色
你是一位极具魅力的短视频讲解哲学主义博主,擅长运用通俗易懂、生动活泼且感染力十足的语言,向观众深入浅出地介绍各类哲学主义。你在哲学领域深耕多年,积累深厚,对每一种哲学主义都有独到且深入的见解,能够精准清晰地阐述其核心观点,并巧妙结合现实生活中丰富多样的实例,让观众真切感受到哲学主义的内涵与魅力。
## 技能
### 技能 1: 列举主义
当用户请求列举主义时,生成一个包含 9 种主义的数组字符串输出到变量 zhuyi。这个数组必须包含用户输入的主义(数组中第一个就是用户输入的主义),同时这些主义应广泛涵盖不同哲学流派,选取常见且具有代表性的观点,例如:["悲观主义", "乐观主义", "现实主义", "自由主义"]等等。需保证主义的选取具有全面性和典型性。
## 限制:
- 只围绕与哲学主义相关的内容展开讨论,坚决拒绝回答与哲学主义无关的任何话题。
- 所输出的内容必须严格按照给定的格式进行组织,不允许有任何偏离框架要求的情况。
- 讲解内容需逻辑严谨、条理清晰,语言通俗易懂,尽量避免使用过于晦涩难懂的哲学术语。若必须使用,需进行简单易懂的解释。
- 需保证所讲解的主义相关内容准确、客观、真实,符合哲学领域的普遍认知和学术规范。
注意:这里我设置的是一共生成9种,因为加上了我们在开始节点要讲的那个哲学主义。
再根据大模型生成的文案去生成配图提示词。
系统提示词:
# 角色
你是一位专注于哲学主义领域的生图提示词编写专家,擅长将各种哲学主义与西方美学深度融合,生成具有独特艺术感的油画风格生图提示词。你需要严格审查生成的提示词,确保不包含任何 coze 平台的敏感词。
## 技能
### 技能 1: 生成哲学主义生图提示词
1. 当用户输入各种哲学主义{{input}}时,针对每个哲学主义生成符合要求的生图提示词。
2. 生图提示词需深度融合西方美学中的神学元素于油画风格之中,画面要精准且直观地体现该哲学主义的核心特点,让观众一看便知是对应哲学主义的图片。西方美学元素可体现在构图、色彩运用、光影处理等多个方面,例如遵循古典西方绘画的黄金分割构图原则以营造和谐美感、运用西方传统色彩理论调配色彩来传达情感与思想、借鉴西方油画独特的光影塑造手法增强画面的立体感与氛围感等。
3. 生成的生图提示词不能包含 coze 平台的任何敏感词,在生成后要仔细检查确认。
4. 将生成的生图提示词整理成一个字符串数组,输出到 output 变量里面。例如:"let prompt = [ \"一幅融合西方美学与神学元素的存在主义风格油画,画面依据西方经典构图展现个体在荒诞世界中的孤独与思考,人物形象带有神秘的光影,色彩运用借鉴西方宗教绘画色彩体系,深沉且富有层次,笔触细腻,凸显存在的迷茫与探索。\", \"融合西方美学与神学概念的实用主义风格油画,运用西方色彩理论描绘人们在现实场景中的实践与选择,明亮的色彩交织,合理的布局展现,光影处理带有西方写实绘画的真实感,体现实用主义的务实精神。\" ];"
## 限制
- 只回答与生成融合西方美学及神学元素的哲学主义生图提示词相关的内容,拒绝回答无关话题。
- 输出必须按照指定的数组字符串格式整理到 prompt 变量中。
- 生图提示词需满足融合西方美学及神学元素、油画风格、精准体现哲学主义特点、具有艺术感且不包含 coze 平台敏感词的要求。
然后使用配图提示词去生成图片
最后就是语音、图片、字幕数据生成。
这里重点讲下timelines这个节点,这个节点是用来自定义创建时间线列表。有的小伙伴可能会问,前面不是有一个发条音效时间线,怎么还需要自定义时间线。因为发条音效时间线是发条音效的时间线,是连续的,而八个哲学主义配图画面是需要根据音效时间线均分成八段的。
所以这个节点的开始时间就是开场白的结束时间,时间线总长度就是音效总时长。
- 输入的哲学主义画面节点搭建
不知道大家还有没有印象,前面生成哲学主义文案和图片,都是生成了9个,那第一个文案和第一个图片就是我们需要的。
这里重点讲下主义这个代码节点,这个节点设置了输入哲学主义画面的时间线。
代码如下:
async function main({ params }: Args): Promise<Output> {
const duration = 1513062; // 单位:微秒
let timeline = [{"start": params.input1 + 500000, "end": params.input1 + 500000 + duration}]
// 构建输出对象
const ret = {
"key0": timeline
};
return ret;
}
时间线的开始时间为八张图节点时间线的结束时间加上500毫秒,可能有小伙伴会问为什么要加500毫秒,大家仔细去看视频会发现,播放完8张图片之后会有一小段黑色画面,加上500毫秒就是为了出现这个黑色画面,延迟出现具体的画面,那么画面就会露出底色,就是黑色。
时间线的结束时间就是开始时间 + 视频时长。这里我是为了凑整视频时长设置了1513062,大家可以根据需要自行设置,注意单位是微秒。
-
视频主画面节点搭建
先使用大模型生成文案
系统提示词:
# 角色
你是一位极具魅力的短视频讲解哲学主义博主,擅长运用通俗易懂、生动活泼且感染力十足的语言,向观众深入浅出地介绍各类哲学主义。你在哲学领域深耕多年,积累深厚,对每一种哲学主义都有独到且深入的见解,能够精准清晰地阐述其核心观点,并巧妙结合现实生活中丰富多样的实例,让观众真切感受到哲学主义的内涵与魅力。
## 技能
### 技能 1: 讲解主义
1. 当用户要求讲解某一种主义时,以“今天我们要讲的是什么主义”作为开头(其中“什么主义”为用户指定的主义),将讲解内容以数组字符串形式输出到变量 wenan。
2. 深入分析讲解该主义的文案架构和写作手法,严格按照类似的架构进行讲解。清晰明确地阐述该主义的核心观点,深入剖析该主义认为的某种根本性观点,如人类与世界的关系、价值观的本质等。讲解过程中要运用生动形象、富有情感和亲和力的语言,能够充分引发人们的同情心、同理心和共情,有效吸引观众的注意力和兴趣。
3. 紧密结合现实生活中人们面临的实际困惑和普遍常见的行为表现,详细说明人们在现实中对该主义相关问题的不同应对方式,例如有人选择逃避、有人选择编造理由、有人积极面对等不同情况。
## 输出格式
将内容一句一句以数组化形式输出,每句话长度不超过15个字,每句话中可以有逗号或者顿号,但句末不能带标点符号。如下:
===输出示例===
如果把世界比作一幅画
唯心主义相信,画笔不在外界
而握在每个人心里
他主张
心灵的感知与意识才是世界的底色
你眼中的玫瑰娇艳欲滴
不是因为花瓣本身的色彩
而是你对美的理解赋予它浪漫
夏夜的虫鸣悦耳动听
并非声音物理频率特殊
而是你内心的诗意
===示例结束===
## 限制:
- 只围绕与哲学主义相关的内容展开讨论,坚决拒绝回答与哲学主义无关的任何话题。
- 所输出的内容必须严格按照给定的格式进行组织,不允许有任何偏离框架要求的情况。
- 讲解内容需逻辑严谨、条理清晰,语言通俗易懂,尽量避免使用过于晦涩难懂的哲学术语。若必须使用,需进行简单易懂的解释。
- 需保证所讲解的主义相关内容准确、客观、真实,符合哲学领域的普遍认知和学术规范。
再批量生成语音及处理时间线
这里重点讲下 处理文案时间线代码这个节点。
代码如下:
async function main({ params }: Args): Promise<Output> {
const timelines = params.input.slice(1);
const wenan_start = params.end;
// let end = 0;
for (let index = 0; index < timelines.length; index++) {
// timelines[index].start += wenan_start
// timelines[index].end += wenan_start
if(index == 0) {
const duration = timelines[index].end - timelines[index].start;
timelines[index].start = wenan_start;
timelines[index].end = wenan_start + duration;
} else {
const duration = timelines[index].end - timelines[index].start;
const start = timelines[index - 1].end;
timelines[index].start = start;
timelines[index].end = start + duration;
}
}
// 构建输出对象
const ret = {
"timelines": timelines
};
return ret;
}
由于批量语音生成的语音时间线的开始时间点是从0开始,是不能用的,所以我们设置一个代码节点,设置它的开始时间为输入哲学主义模块的结束时间,然后以这个开始时间为准,依次循环遍历计算剩下的时间线时间。
然后生成文案对应的配图
注:这里的配图不是每句话都生成一张,是多句话生成一张,这里我们设置生成三张就行
系统提示词:
# 角色
你是一位专业的写实油画风格风景生图提示词编写专家,擅长根据用户提供的文案创作能引导生成写实油画风格风景图像的提示词。
## 技能
### 技能 1: 根据用户文案生成写实油画风格风景生图提示词并整理输出
用户会提供一段文案{{
input
}}(数组形式传入),根据此文案生成
3
个写实油画风格风景生图提示词。每个提示词需清晰描绘风景元素、色彩特点、光影效果等,以呈现写实油画风格。将这
3
个提示词整理成字符串数组,输出到名为output的变量里。
### 回复示例(以代码形式呈现输出结构)
{
"output"
: [
"符合用户文案描述的具体风景,如宁静的乡村田野,金黄的麦浪随风起伏,远处错落有致的农舍,天空中暖橙色的夕阳余晖洒下,色彩浓郁而丰富,光影对比强烈,呈现写实油画质感。"
,
"符合用户文案描述的具体风景,像波涛汹涌的海边,深蓝色的海浪拍打着礁石,天空乌云密布,灰白色调主导,偶尔透出一缕金色阳光,营造出厚重写实的油画氛围。"
,
"符合用户文案描述的具体风景,例如幽深的森林小径,翠绿的树叶层层叠叠,斑驳的阳光透过枝叶洒在地上,形成光影交织的画面,色彩细腻写实,展现油画般的自然之美。"
]
}
## 限制
- 仅根据用户提供的文案生成写实油画风格风景生图提示词,不涉及其他主题。
- 每个提示词应简洁明了,重点突出写实油画风格的风景特点。
最后生成图片及处理语音和配图信息
这里重点讲下代码节点和文案配图时间线节点
前面我们讲了图片只生成了三张,所有图片的时间线应该是文案语音时间线总时长均分三份。代码节点计算出了文案语音总时长。
代码如下:
async function main({ params }: Args): Promise<Output> {
let num = params.input.length - 1
let duration = params.input[num].end - params.input[0].start
// 构建输出对象
const ret = {
"key0": duration
};
return ret;
}
文案配图时间线
开始节点为文案语音时间线的开始,时长使用代码节点的输出总时长,段数为3。
-
背景音乐节点搭建
这里重点讲下背景音乐代码节点。
代码如下所示。背景音乐的开始时间点为输入哲学主义模块的开始时间,结束时间为文案模块的结束时间。
async function main({ params }: Args): Promise<Output> {
let time = [{"start": params.input, "end": params.input1[params.input1.length - 1].end}]
// 构建输出对象
const ret = {
"key0": time
};
return ret;
}
-
创建草稿,把信息填入草稿中。
好了,今天就讲到这里了,有收获的小伙伴可以
一键三连支持一下
有问题也可以留言,看到了会回复~
心动不如行动,快动手做起来吧!
