大家好,我是大明哥,目前专注 AI 智能体。我的教程《大明哥 AI 觉醒社 | AI 智能体 》正在免费开放中,如果想学习AI 智能体,请加大明哥微信(daming091),免费领取教程
这是大明哥《100 个 Coze 精品案例 》的第 009个案例:抖音爆款星座 IP 混剪视频。
在前面两篇文章《抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!》和《Coze 全自动情感治愈视频混剪。用 Coze 工作流帮您节约 99% 的时间,从此告别手动!》。一篇是生成星座 IP 视频,一条是情感治愈视频混剪。其实在下图中,该博主最近的视频都是混剪,所以这里就来实现下星座 IP 混剪视频。

视频效果:
整体思路
- 文案、星座图片、音频和抖音爆款星座 IP 视频,每条点赞 10000+,用 Coze 工作流轻松复制!一样,没有什么改动。唯一的改动点就在于视频的处理上面,不再是固定的背景视频了,而是从一堆视频里面挑选一些。
完整流程图:

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

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

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

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

input_video_list
:用户输入视频input_video_duration
:用户输入视频时长audio_duration
:音频时长。这里是需要保证整个视频时长和音频时长一致
再就是代码处理了:
ini
import random
import math
async 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 代码将视频的时间线处理下:

输入参数:
video_url_list
:筛选视频video_duration
:筛选视频时长max_duration
:最大音频时长main_role_duration
:主星座图片时长。这个主要是为了保证视频和开场图片的时间线连贯
输出参数:
video_infos
:视频数据bg_video_infos
:背景视频数据opening_video_infos
:开场背景视频数据opening_effect_infos
:开场背景视频数据特效(用于处理转场)
代码也不是很难:
ini
import json
async 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] 插件获取即可,在处理背景音乐的时候,由于也需要与音频的时间线保持一致,所以我们需要获取第一个时长比音频时长要长的背景音乐,代码如下:
ini
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
到这里,整个视频、背景音乐都处理好了,最后就是将他们和其他数据,如文案、十二星座图片、文案音频都添加到剪映草稿中:

- 原文可以领取完整提示词、代码、工作流: 点击领取
- 大明哥 AI 觉醒社 | AI 智能体