大家好,我是大明哥,目前专注 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 的使用技巧,不是纯理论,是实战+理论!!!
若有收获,可以点击下方⬇️关注我,以防迷路