无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

博思AIPPT

大家好,我是焦哥。零代码基础手搓工作流,专注于AI智能体工作流的搭建知识分享。

早就想搞一个英语单词跟读视频的工作流,但一直被两个“拦路虎”劝退:一是卡片设计太耗时,找素材排版头都大;二是视频剪辑太折磨,特别是那个“读到哪、亮到哪”的高亮效果,手动去对简直是“坐牢”。直到看到了一个“骚操作”:
利用 HTML 代码循环高亮 + 视频自动拼接!这一下全解决了:颜值顶:12宫格、思维导图等 4 种风格随意切,张张都是海报级。全自动:扔个主题(比如水果),自动提取单词、生成语音。免剪辑:最爽的是,它能自动把音画同步好,直接吐出成品视频!可量产:从素材到成片,几分钟搞定,纯纯的流量收割机。这套“输入即成品”的玩法,你确定不心动?赶紧跟我一起动手搭建吧!
先看下效果

工作流原理

  1. 1.利用大模型生成一个漂亮的英文单词卡片,用html代码展示,再转成图片;
  2. 2.把每个单词都提取出来,通过循环高亮处理,加上音频,合成一个小视频,最后再拼接成完整的视频。

工作流总览

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

工作流节点开始节点theme:输入个主题,例如:水果、动物、蔬菜等。api:kimi的官方API(下一步的插件需要用到),申请地址:https://platform.moonshot.cn/console/account

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

插件节点这里用到焦哥开发的这个插件【word_cards】,英文单词卡片,输出为html代码,若需转为图片,可借助html_to_png插件。地址:https://www.coze.cn/store/plugin/7573726791500840994

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

有四种风格:word cards_12gongge:输入一个主题,生成12宫格风格的英文单词卡片。word cards surround:输入一个音节,生成 金星环绕 风格的英文单词卡片。word_cards_mind:输入一个音节,生成 思维导图 风格的英文单词卡片。word_cards_9gongge:输入一个主题,生成9宫格风格的英文单词卡片。图片预览:

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。
无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。
无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。
无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

每种风格都可以制作出不错的跟读视频,下面的是我们用12宫格制作出一篇卡片跟读视频。

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

插件节点把上一步的html代码,转成图片

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

代码节点(提取单词)利用代码,把卡片的所有的单词都提取出来,用来生成音频。

无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

pyrhon代码

fromtypingimportList,Dict,Any
importre # 导入正则表达式模块

# 定义异步主函数,接收一个参数args (可以是字典或带.params属性的对象),并返回一个字典类型的结果
asyncdefmain(args:Any) ->Dict[str,List[str]]:
# 确定实际的参数字典
actual_params_dict:Dict[str,Any]

ifhasattr(args,'params'):
# 检查args是否具有'params'属性 (类似参考格式中的args.params)
params_attr =getattr(args,'params')
ifisinstance(params_attr,dict):
actual_params_dict = params_attr # args.params 是一个字典
else:
# args.params 存在但不是字典,这是一种意外情况
# 默认为空字典以避免后续错误。
actual_params_dict = {}
elifisinstance(args,dict):
# args 本身是一个字典
# 尝试获取args['params'],如果不存在,则假定args本身就是参数字典
actual_params_dict = args.get("params", args)
else:
# args 既不是带有.params属性的对象,也不是字典。这是不支持的格式。
# 默认为空字典以避免后续错误。
actual_params_dict = {}

# 从 actual_params_dict 中获取input输入,如果不存在则默认为空字符串
html_content:str= actual_params_dict.get("input","") # 获取HTML输入内容

# 初始化用于存储提取到的英文单词及中文意思的列表
word_pairs:List[str] = [] # 存储"英文,中文"格式的字符串

# 正则表达式1:匹配HTML中的英文单词和中文意思(处理

  • apple 苹果
  • 格式)
    # 使用更宽松的模式匹配中文内容
    pattern1 = re.compile(r']*>([a-zA-Z][a-zA-Z\s-]*)\s+([\s\S]*?)]*>')
    # 正则表达式2:匹配英文/音标/中文格式(处理apple/ˈæpl/苹果格式)
    # 修改后的模式能更好处理各种字符
    pattern2 = re.compile(r'^([a-zA-Z][a-zA-Z\s-]*)(?:\s*/[^/]*/\s*|\s+)(.*)$')
    # 正则表达式3:匹配HTML中的表格格式(处理

    apple 苹果

    格式)
    # 使用更宽松的模式匹配中文内容
    pattern3 = re.compile(r'

    ]*>\s*([a-zA-Z][a-zA-Z\s-]*)\s*

    \s*

    ]*>\s*([\s\S]*?)\s*

    ')

    # 正则表达式4:匹配12宫格HTML格式(处理

    Lion
    狮子

    格式)
    pattern4 = re.compile(r'

    ([^<]+)

    [\s\S]*?

    ([^<]+)

    ')

    # 方法0:优先尝试匹配12宫格HTML格式
    matches0 = pattern4.findall(html_content)
    forenglish, chineseinmatches0:
    english = english.strip() # 去除英文单词前后空白
    chinese = chinese.strip() # 去除中文意思前后空白
    ifenglishandchinese: # 确保两个部分都不为空
    word_pairs.append(f"{english},{chinese}") # 格式化为"英文,中文"格式

    # 方法1:如果方法0没有找到内容,尝试匹配HTML列表项格式
    ifnotword_pairs:
    matches1 = pattern1.findall(html_content)
    forenglish, chineseinmatches1:
    english = english.strip() # 去除英文单词前后空白
    chinese = chinese.strip() # 去除中文意思前后空白
    ifenglishandchineseandnotchinese.startswith('{'): # 确保两个部分都不为空,且中文不是残缺的
    word_pairs.append(f"{english},{chinese}") # 格式化为"英文,中文"格式

    # 方法2:如果方法1没有找到内容,尝试匹配普通文本格式
    ifnotword_pairs:
    # 按行分割HTML内容
    lines = re.split(r'
    |
    ', html_content) # 支持
    标签和换行符分割
    forlineinlines:
    line = re.sub(r']*>','', line).strip() # 去除HTML标签并去除前后空白
    ifnotline: # 如果是空行,跳过
    continue

    # 尝试匹配英文/音标/中文格式
    match2 = pattern2.match(line)
    ifmatch2:
    english = match2.group(1).strip() # 提取英文单词
    chinese = match2.group(2).strip() # 提取中文意思
    ifchineseandnotchinese.startswith('{'): # 确保中文内容完整
    word_pairs.append(f"{english},{chinese}") # 格式化为"英文,中文"格式
    else:
    # 尝试简单的英文+中文格式(空格分隔)
    simple_match = re.match(r'^([a-zA-Z][a-zA-Z\s-]*)\s+(.+)$', line)
    ifsimple_match:
    english = simple_match.group(1).strip() # 提取英文单词
    chinese = simple_match.group(2).strip() # 提取中文意思
    ifchineseandnotchinese.startswith('{'): # 确保中文内容完整
    word_pairs.append(f"{english},{chinese}") # 格式化为"英文,中文"格式

    # 方法3:如果前两种方法都没有找到,尝试匹配HTML表格格式
    ifnotword_pairs:
    matches3 = pattern3.findall(html_content)
    forenglish, chineseinmatches3:
    english = english.strip() # 去除英文单词前后空白
    chinese = chinese.strip() # 去除中文意思前后空白
    ifenglishandchineseandnotchinese.startswith('{'): # 确保两个部分都不为空,且中文完整
    word_pairs.append(f"{english},{chinese}") # 格式化为"英文,中文"格式

    # 方法4:特殊处理 - 如果检测到可能是JSON格式的一部分,尝试清理
    ifnotword_pairsandhtml_content.strip().startswith('{'):
    # 清理JSON格式残留
    cleaned_content = re.sub(r'^[^{]*{\s*"[^"]*"\s*:\s*','', html_content)
    cleaned_content = re.sub(r'\s*}\s*$','', cleaned_content)
    # 重新处理方法1
    matches1 = pattern1.findall(cleaned_content)
    forenglish, chineseinmatches1:
    english = english.strip()
    chinese = chinese.strip()
    ifenglishandchineseandlen(chinese) >1: # 确保中文内容完整
    word_pairs.append(f"{english},{chinese}")

    # 去除重复的单词对(保持顺序)
    seen =set() # 用于记录已经处理过的单词对
    unique_word_pairs:List[str] = [] # 存储去重后的结果
    forpairinword_pairs:
    ifpairnotinseen: # 如果这个单词对还没有处理过
    seen.add(pair) # 添加到已处理集合
    unique_word_pairs.append(pair) # 添加到结果列表

    # 输出提取统计信息(可选,调试用)
    ifunique_word_pairs:
    print(f"成功提取到{len(unique_word_pairs)}个单词对") # 输出成功提取的单词数量
    # 打印前几个结果用于调试
    fori, pairinenumerate(unique_word_pairs[:3]):
    print(f" 单词对{i+1}:{pair}")
    else:
    print("警告:未能从HTML内容中提取到任何单词对") # 输出提取失败警告
    print("支持的格式包括:") # 输出支持的格式提示
    print("1.

  • apple 苹果
  • ") # HTML列表格式
    print("2. apple/ˈæpl/苹果") # 斜杠分隔格式
    print("3.

    apple 苹果

    ") # HTML表格格式
    print("4. apple 苹果") # 简单空格分隔格式

    # 构建包含提取结果的返回字典
    ret:Dict[str,List[str]] = {
    "danci": unique_word_pairs # 返回提取到的"英文,中文"格式单词对列表
    }

    returnret # 返回构建好的结果字典

    # 如果直接运行此文件,执行测试
    if__name__ =="__main__":
    importasyncio
    asyncio.run(test())

    批处理节点这一步主要就是批量处理每一个单词,生成音频→单词高亮显示→重新生成卡片→图片加音频合成单个小视频。注意:并行运行数量,焦哥通过多次测试,设置为2,输出的效果是最稳定的。

    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。
    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

    4.1节点:文本生成语音4.2节点:html代码转图片4.3节点:字符串转列表以上都是我们的老朋友了,就不多赘述了。4.2节点:把循环到的每一个单词在html代码中都高亮显示。

    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

    4.5节点:coze官方插件,可以把图片及音频合成视频,这款插件还是不错的,消耗的资源点也不是太多。

    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

    插件节点视频拼接:对输入的多个视频片段进行拼接,并支持添加转场。

    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

    结束节点这里我们可以输出两个内容,一个是合成的最后的视频,一个是生成的英语单词卡片。

    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。

    运行正常后,我们就可以点击发布了,绑定到智能体。


    都已经看到这里了,如果觉得对你有帮助,记得点赞、在看、收藏、转发哦!获取工作流中的提示词、代码,麻烦您一键三连,评论区留言“单词卡片”,加焦哥VX,邀请您加入交流群,免费领取飞书AI智能体知识库资料。完整的工作流,我已经上传到Coze团队空间了,后期会逐步更新新的智能体,如果你也想完整的复刻这样的工作流,欢迎加入我的团队空间,添加焦哥VX获取加入方法。

    无需剪辑,效果炸裂!Coze + Kimi 一键生成“英文单词跟读”视频,这颜值绝了。
    © 版权声明

    相关文章