掘金 人工智能 前天 16:18
100 个 Coze 精品案例:抖音爆款星座 IP 混剪视频,用 Coze 工作流轻轻松松日更 100 条
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何利用 Coze 平台,通过工作流实现抖音爆款星座 IP 混剪视频的制作。该方法在原有星座 IP 视频和情感治愈视频混剪的基础上,增加了自定义视频上传功能,使得视频制作更加灵活。文章详细阐述了工作流的搭建流程,重点讲解了视频处理、时长匹配、音频和背景音乐的选取与整合,并提供了关键的代码示例和流程图,帮助读者快速掌握制作技巧。

🎬 **视频处理:** 核心在于从用户上传的视频或预设视频库中挑选素材。根据用户上传的视频时长,以及音频时长,计算并筛选合适的视频片段,保证视频总时长与音频时长一致。

⏱️ **时长匹配:** 通过Python代码处理视频时间线,确保视频片段的起始和结束时间与音频完美同步。代码中包含了对视频时长进行计算、截取,以及对开场视频和特效的处理,以保证视频的连贯性。

🎵 **音频处理:** 结合背景音乐插件,从插件中获取时长大于音频时长的背景音乐,并将其与视频进行融合,保证视频的整体效果。同时,也对开场音效进行处理,增强视频的吸引力。

⚙️ **工作流搭建:** 整个工作流在抖音爆款星座 IP 视频的基础上进行调整。主要的不同在于视频的处理。通过自定义视频上传,增加了工作流的灵活性,使得视频的制作更加多样化。

💡 **代码实现:** 提供了关键的 Python 代码片段,用于视频筛选、时间线处理、以及背景音乐的选取。通过这些代码示例,读者可以更深入地了解工作流的实现细节,并进行个性化的定制。

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


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

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

视频效果:

整体思路

完整流程图:

执行过程:

搭建工作流

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

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

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

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

再就是代码处理了:

import randomimport mathasync def 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 代码将视频的时间线处理下:

输入参数:

输出参数:

代码也不是很难:

import jsonasync def 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

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


Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Coze AI 智能体 抖音 星座 IP 视频制作
相关文章