大家好,我是云途。本文工作流代码关注后发送“家庭教育”领取!
大家都没有看过这种视频,家庭教育对话类型的视频,播放点赞量都非常不错,万赞爆款比比皆是,变现也是各类视频里最好的之一。如果自己做至少需要好几个步骤,
1.写文案
2.利用即梦文生图
3.导入剪映做成视频
如果加上即梦图片抽卡的等待时间和大模型生成故事筛选,实际做这种精品视频至少需要一天。
但是今天为大家带来Coze工作流,可以一键生成家庭教育对话视频。
用Coze工作流花3分钟生成出来的视频,不论是画面、视频节奏还是音效都还原了爆款视频的逻辑,如果想自己提升画面质量把Coze自带的生图插件换成即梦即可。
接下来大家跟着我一起来看看这条工作流是的制作思路吧。
一、工作流全览
这个工作流主要分为4块,
第1块:利用一个大模型插件生成文案,也可以对输入文案进行分割。
第2块:文案合成语音。
第3块:人声合成。
第4块:文案合并。
第5步:配图合成制作。
第5步:背景图片、BGM生成。
第6步:利用剪映小助手插件生成剪映视频草稿。
二、节点拆解
开始节点:
该模型使用简便,输入主题就可以输出完整的视频,如果有自己的文案的也可以输入自己的文案让模型自动生成视频。
大模型节点:
2.1 文案生成节点:
提示词如下,生成视频文案:
2.2 口播稿生成节点:
2.3 图片生成节点:
2.4 视频生成节点:
2.5 分镜关键词抓取节点:
2.6 图像生成节点:
批处理体节点:
此模型批处理节点过多,如需细节联系TQ索要。
3.1 单双行文本拆分节点:
async function main({ params }: Args): Promise
3.2 合并分组文本时间线节点
async function main({ params }: Args): Promise
3.3 视频生成节点
async function main({ params }) {
const {
wenan_group_timeline = [],
singleLineGroups = [],
keywordsList = [],
doubleLineGroups = []
} = params;
const timelineMap = {};
for (const { content, start, end } of wenan_group_timeline) {
timelineMap[content] = { start, end };
}
const keywordArr = keywordsList.map(item => item.keywords);
const keywordStr = keywordArr.join('|');
// === 轨道 1:单句字幕 ===
const track_1_texts = [];
const track_1_timelines = [];
const track_1_otherInfo = [];
for (const text of singleLineGroups) {
const time = timelineMap[text];
if (!time) continue;
track_1_texts.push(text);
track_1_timelines.push(time);
track_1_otherInfo.push({
alignment: 1,
text_color: "#61862b",
transform_x: 0,
transform_y: 0
});
}
// === 轨道 2 和 3:普通双行字幕 ===
const track_2_texts = [];
const track_2_timelines = [];
const track_2_otherInfo = [];
const track_3_texts = [];
const track_3_timelines = [];
const track_3_otherInfo = [];
// === 新增轨道 4:推荐文案 ===
const track_4_texts = [];
const track_4_timelines = [];
const track_4_otherInfo = [];
// === 新增轨道 5:书名文案 ===
const track_5_texts = [];
const track_5_timelines = [];
const track_5_otherInfo = [];
// 存储双行字幕组的对应关系,用于生成画面提示词
const doubleLinePairs = [];
for (const { wenan } of doubleLineGroups) {
const [line1, line2] = wenan;
const time1 = timelineMap[line1];
const time2 = timelineMap[line2];
if (!time1 || !time2) continue;
const recommendPhrases = ['推荐', '强烈推荐', '建议', '安利', '一定要试试', '必须看看', '良心推荐', '超适合', '很适合', '值得一读', '分享', '别错过', '可以入手'];
const childrenPhrases = ['孩子', '宝贝', '小朋友', '宝宝', '小宝', '小孩', '娃', '娃娃', '儿童', '幼儿', '学龄前', '小男孩', '小女孩', '小弟弟', '小妹妹', '小公主', '小王子'];
const actionPhrases = ['读一读', '看一看', '读读看', '看看', '共读', '阅读'];
const unitPhrases = ['这套', '这一套', '这本', '这一册', '这册'];
function isBookRecommendation(line) {
const pattern = new RegExp(
`(?:${recommendPhrases.join('|')}).*?(?:陪|给)?.*?(?:${childrenPhrases.join('|')})?.*?(?:${actionPhrases.join('|')}).{0,5}(?:${unitPhrases.join('|')})`
);
return pattern.test(line);
}
if (isBookRecommendation(line1)) {
// === 推荐句 → 轨道 4
track_4_texts.push(line1);
track_4_timelines.push(time1);
track_4_otherInfo.push({
alignment: 1,
text_color: "#000000",
transform_x: 0,
transform_y: 100
});
// === 书名句 → 轨道 5
track_5_texts.push(line2);
track_5_timelines.push(time2);
track_5_otherInfo.push({
alignment: 1,
text_color: "#db7431",
transform_x: 0,
transform_y: -100
});
} else {
// === 普通双行逻辑
track_2_texts.push(line1);
track_2_timelines.push({ start: time1.start, end: time1.end });
track_2_otherInfo.push({
alignment: 1,
text_color: "#61862b",
transform_x: 0,
transform_y: 140
});
track_3_texts.push(line2);
track_3_timelines.push({ start: time2.start, end: time2.end });
track_3_otherInfo.push({
alignment: 1,
text_color: "#db7431",
transform_x: 0,
transform_y: -140
});
// 保存普通双行字幕的配对信息
doubleLinePairs.push({
line1: { text: line1, time: time1 },
line2: { text: line2, time: time2 }
});
}
}
// === 生成画面提示词数据 ===
const visualPromptGroups = [];
// 添加单句字幕的提示词
for (let i = 0; i < track_1_texts.length; i++) {
visualPromptGroups.push({
start: track_1_timelines[i].start,
end: track_1_timelines[i].end,
content: track_1_texts[i]
});
}
// 添加双行字幕的提示词
for (const pair of doubleLinePairs) {
visualPromptGroups.push({
start: pair.line1.time.start,
end: pair.line2.time.end,
content: `${pair.line1.text}\n${pair.line2.text}`
});
}
return {
track_1: {
texts: track_1_texts,
timelines: track_1_timelines,
otherInfo: track_1_otherInfo,
keywords: track_1_texts.map(() => keywordStr),
keyword_color: "#db7431"
},
track_2: {
texts: track_2_texts,
timelines: track_2_timelines,
otherInfo: track_2_otherInfo
},
track_3: {
texts: track_3_texts,
timelines: track_3_timelines,
otherInfo: track_3_otherInfo
},
track_4: {
texts: track_4_texts,
timelines: track_4_timelines,
otherInfo: track_4_otherInfo
},
track_5: {
texts: track_5_texts,
timelines: track_5_timelines,
otherInfo: track_5_otherInfo
},
visualPromptGroups // 新增字段,用于生成画面提示词
};
}
3.4 音轨配图信息处理
async functionmain({ params }: Args): Promise<Output> {
constdouble_img_info: any[] = [];
constsingle_img_info: any[] = [];
const infos = params.infos_list.map(item =>JSON.parse(item));
const prompts = params.visualPromptGroups;
for (let i = 0; i < prompts.length; i++) {
const content = prompts[i].content;
const firstImgInfo = infos[i]?.[0]; // 安全获取第一个图片信息
if (!firstImgInfo) continue; // 如果为空跳过
if (content.includes('\n')) {
double_img_info.push(firstImgInfo);
} else {
single_img_info.push(firstImgInfo);
}
}
return {
single_img_info,
double_img_info
};
}
剪映小助手等后处理节点:
达成的功能分别是:对齐视频,创建草稿,选择并添加背景音乐,最后保存导出。
这条工作流的思路大致就是这样,有基础的小伙伴可以根据自己创建一条试试,其实逻辑非常简单。
最后打个广告
云途创建了一个Coze学习社群,大家可以相互鼓励监督,有问题都可以在群里问,一起利用AI踏上自媒体之路。想加入的朋友们可以添加云途,发送“社群”领取15条爆火工作流。
如果有深入学习的需求,可以看看商品链接,包含市面上最全的150+工作流,从视频制作、文案收集、自媒体素材库的搭建,全方面助你走上自媒体道路。

