最新 Coze 教程:抖音爆款星座 IP 混剪视频,用 DeepSeek + Coze 工作流轻轻松松日更 100 条

大模型向量数据库云通信

大家好,我是大明哥,目前专注 AI 智能体。我的教程《大明哥 AI 觉醒社 | AI 智能体 》正在免费开放中,如果想学习AI 智能体,请加大明哥,免费领取教程

picture.image

这是大明哥《100 个 Coze 精品案例 》的第 009个案例:抖音爆款星座 IP 混剪视频

在前面两篇文章《最新 Coze 教程:Coze 全自动情感治愈视频混剪。用 Coze 工作流帮您节约 99% 的时间,从此告别手动!!》和《100 个 Coze 精品案例:抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!》。一篇是生成星座 IP 视频,一条是情感治愈视频混剪。其实在下图中,该博主最近的视频都是混剪,所以这里就来实现下星座 IP 混剪视频。

picture.image

视频效果:

「整体思路」

完整流程图:

picture.image

完整视频:

「搭建工作流」

整个工作流和抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!有 80% 的相同之处,大明哥只介绍不同的地方:处理视频。即下图:

picture.image

由于支持自定义视频,所以在开始节点会多一个参数:

picture.image

这样在获取视频时就需要判断用户是否已上传了视频,如果上传了则需要先获取视频的时长,也就是这段:

picture.image

在筛选视频时,需要传入三个参数:

picture.image

  • input\_video\_list :用户输入视频
  • input\_video\_duration :用户输入视频时长
  • audio\_duration :音频时长。这里是需要保证整个视频时长和音频时长一致

再就是代码处理了:

  
import random  
import math  
asyncdef main(args: Args) -> Output:  
    params = args.params  
  
    input\_video\_list = params["input\_video\_list"]  
    input\_video\_duration = params["input\_video\_duration"]  
    audio\_duration = params["audio\_duration"]  
  
    # 计算总时长  
    max\_video\_duration = 2000000  
    max\_audio\_duration = 0  
    for duration in audio\_duration:  
        max\_video\_duration += duration["duration"]  
        max\_audio\_duration += duration["duration"]  
  
    video\_url\_list = []  
    if input\_video\_list:  
        video\_url\_list.extend(input\_video\_list)  
  
    video\_duration = 0  
    if input\_video\_duration:  
        for video in input\_video\_duration:  
            duration = video["data"]["duration"]  
            video\_duration += duration  
  
    # 判断用户输入的视频是否够文案长度  
    diff\_duration = max\_video\_duration - video\_duration * 1000000  
    if diff\_duration > 0:  
        clip\_duration = 6 * 1000000  
        total\_duration = math.ceil(diff\_duration)  
        video\_num = total\_duration // clip\_duration  
        if total\_duration % clip\_duration != 0:  
            video\_num += 2  
        ## 获取随机视频  
        random\_video = get\_random\_videos(video\_num)  
        video\_url\_list.extend(random\_video)  
  
        # 开场音效  
    open\_audio\_url = ["https://sike.skjava.com/ai/1748396216512\_ojzmqyqa0t.mp3"]  
  
    # 构建输出对象  
    ret: Output = {  
        "video\_url\_list": video\_url\_list,  
        "max\_video\_duration":max\_video\_duration,  
        "max\_audio\_duration":max\_audio\_duration,  
        "open\_audio\_url":open\_audio\_url  
    }  
    return ret  
  
  
# 随机挑选视频  
def get\_random\_videos(num):  
    video\_urls = [  
        "https://sike.skjava.com/ai-sucai/xxxx.mp4",  
        "https://sike.skjava.com/ai-sucai/xxxx.mp4",  
        "https://sike.skjava.com/ai-sucai/xxxx.mp4",  
        // 资源比较多就不列举了....  
       ]  
    # 随机抽取所需的视频片段  
    return random.sample(video\_urls, num)  

筛选完视频后,再一次获取筛选视频的时长,然后再利用 Python 代码将视频的时间线处理下:

picture.image

输入参数:

  • video\_url\_list :筛选视频
  • video\_duration :筛选视频时长
  • max\_duration :最大音频时长
  • main\_role\_duration :主星座图片时长。这个主要是为了保证视频和开场图片的时间线连贯

输出参数:

  • video\_infos :视频数据
  • bg\_video\_infos :背景视频数据
  • opening\_video\_infos :开场背景视频数据
  • opening\_effect\_infos :开场背景视频数据特效(用于处理转场)

代码也不是很难:

  
import json  
asyncdef main(args: Args) -> Output:  
    params = args.params  
  
    video\_url\_list = params["video\_url\_list"]  
    video\_duration = params["video\_duration"]  
    max\_duration = params["max\_duration"]  
    main\_role\_duration = params["main\_role\_duration"]  
  
    video\_start = 2000000 + main\_role\_duration  
  
    # 计算视频时长  
    video\_duration\_list = []  
    for duration in video\_duration:  
        duration1 = duration["data"]["duration"]  
        video\_duration\_list.append(duration1 * 1000000)  
  
    # 获取开场视频  
    open\_video\_url = ""  
    for index,duration in enumerate(video\_duration\_list):  
        if (duration >= video\_start):  
            open\_video\_url = video\_url\_list[index]  
            del video\_url\_list[index]  
            del video\_duration\_list[index]  
            break  
      
    opening\_video\_infos = [{  
        "video\_url": open\_video\_url,  
        "start": 0,  
        "end": video\_start,  
        "width":1024,  
        "height":1024  
    }]  
  
    # 开场特效  
    opening\_effect\_infos = [{  
        "effect\_title":"方形开幕",  
        "start":video\_start,  
        "end":video\_start + 1000000  
    }]  
  
    # 构建视频数据  
    start = video\_start  
    end =  0  
    video\_infos = []  
    for index,item in enumerate(video\_url\_list):  
        duration2 = video\_duration\_list[index]  
        end = start + duration2  
        if (end > max\_duration):  
            end = max\_duration  
          
        video\_infos.append({  
            "video\_url": item,  
            "start": start,  
            "end": end,  
            "width":1024,  
            "height":1024  
        })  
  
        start = end  
        if start > max\_duration:  
            break  
      
    # 纯黑背景视频  
    bg\_video\_url = "https://sike.skjava.com/ai/1748928397635\_qha7zbgz1.mp4"  
    bg\_video\_infos = [{  
        "video\_url":bg\_video\_url,  
        "start":video\_start,  
        "end": end,  
        "width":1024,  
        "height":1024,  
    }]  
  
    # 构建输出对象  
    ret: Output = {  
        "opening\_video\_infos":json.dumps(opening\_video\_infos),  
        "bg\_video\_infos":json.dumps(bg\_video\_infos),  
        "video\_infos":json.dumps(video\_infos),  
        "opening\_effect\_infos":json.dumps(opening\_effect\_infos)  
    }  
    return ret  

处理完视频数据后,就处理开场音效和背景音乐。

picture.image

背景音乐的话,我们利用 [search_bgm ] 插件获取即可,在处理背景音乐的时候,由于也需要与音频的时间线保持一致,所以我们需要获取第一个时长比音频时长要长的背景音乐,代码如下:

  
async def main(args: Args) -> Output:  
    params = args.params  
  
    bg\_audio = params["bg\_audio"]  
    max\_audio\_duration = params["max\_audio\_duration"]  
  
    bg\_audio\_url = [bg\_audio[0]["bgm\_url"]]  
    for item in bg\_audio:  
        if item["duration"] > max\_audio\_duration:  
            bg\_audio\_url = [item["bgm\_url"]]  
            break  
  
  
    bg\_time\_lines = [{  
        "start":2000000,  
        "end":max\_audio\_duration  
    }]  
  
    # 构建输出对象  
    ret: Output = {  
        "bg\_audio\_url":bg\_audio\_url,  
        "bg\_time\_lines":bg\_time\_lines  
    }  
    return ret  

到这里,整个视频、背景音乐都处理好了,最后就是将他们和其他数据,如文案、十二星座图片、文案音频都添加到剪映草稿中:

picture.image

· 往期推荐 ·

小红书爆款图文,单篇点赞 20000+,用 Coze 智能体一键生成有声儿童绘本!

最新 Coze 教程:Coze 全自动情感治愈视频混剪。用 Coze 工作流帮您节约 99% 的时间,从此告别手动!!

100 个 Coze 精品案例:抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!

100 个 Coze 精品案例:一键批量抓取小红书博主所有笔记,写入飞书多维表格

为什么你还在苦学提示词,狂搜提示词?一招让 AI 自动帮你生成完美提示词!


今天的分享就到这里啦,如果想领取文中完整版的**《流程图、代码、提示词》** ,可以加大明哥微信,邀请进学习空间!!备注【Coze 实战】

picture.image

大明哥创建了《Coze 入门实战教程》 ,通过 6 个工作流&教程就可以彻底掌握 Coze 的使用技巧,不是纯理论,是实战+理论!!!

picture.image

若有收获,可以点击下方⬇️关注我,以防迷路

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论