大家好,我是大明哥,目前专注 AI 智能体。我的教程《大明哥 AI 觉醒社 | AI 智能体 》正在免费开放中,如果想学习AI 智能体,请加大明哥,免费领取教程
这是大明哥《100 个 Coze 精品案例 》的第 009个案例:抖音爆款星座 IP 混剪视频 。
在前面两篇文章《最新 Coze 教程:Coze 全自动情感治愈视频混剪。用 Coze 工作流帮您节约 99% 的时间,从此告别手动!!》和《100 个 Coze 精品案例:抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!》。一篇是生成星座 IP 视频,一条是情感治愈视频混剪。其实在下图中,该博主最近的视频都是混剪,所以这里就来实现下星座 IP 混剪视频。
视频效果:
「整体思路」
- 文案、星座图片、音频和 100 个 Coze 精品案例:抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制! 一样,没有什么改动。唯一的改动点就在于视频的处理上面,不再是固定的背景视频了,而是从一堆视频里面挑选一些。
完整流程图:
完整视频:
「搭建工作流」
整个工作流和抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!有 80% 的相同之处,大明哥只介绍不同的地方:处理视频。即下图:
由于支持自定义视频,所以在开始节点会多一个参数:
这样在获取视频时就需要判断用户是否已上传了视频,如果上传了则需要先获取视频的时长,也就是这段:
在筛选视频时,需要传入三个参数:
- 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 代码将视频的时间线处理下:
输入参数:
- 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  
处理完视频数据后,就处理开场音效和背景音乐。
背景音乐的话,我们利用 [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  
到这里,整个视频、背景音乐都处理好了,最后就是将他们和其他数据,如文案、十二星座图片、文案音频都添加到剪映草稿中:
· 往期推荐 ·
小红书爆款图文,单篇点赞 20000+,用 Coze 智能体一键生成有声儿童绘本!
最新 Coze 教程:Coze 全自动情感治愈视频混剪。用 Coze 工作流帮您节约 99% 的时间,从此告别手动!!
100 个 Coze 精品案例:抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!
100 个 Coze 精品案例:一键批量抓取小红书博主所有笔记,写入飞书多维表格
为什么你还在苦学提示词,狂搜提示词?一招让 AI 自动帮你生成完美提示词!
「
」
「
」
「
」
今天的分享就到这里啦,如果想领取文中完整版的**《流程图、代码、提示词》** ,可以加大明哥微信,邀请进学习空间!!备注【Coze 实战】
大明哥创建了《Coze 入门实战教程》 ,通过 6 个工作流&教程就可以彻底掌握 Coze 的使用技巧,不是纯理论,是实战+理论!!!
若有收获,可以点击下方⬇️关注我,以防迷路
