大家好,我是小肥肠,专注 智能体干货教程分享!今天手把手教你用 Coze+ComfyUI实现高质量视频制作,全流程保姆级拆解,哪怕是新手也轻松学会,赶紧码住跟练!
1. 前言
最近有朋友总跟我吐槽在Coze里面制作视频的成本有点高,有没有别的办法可以把成本降低一点。我找到了一个办法:用Coze+ComfyUI制作视频,经过我一周的可行性研究找到以下几个方案:
方案序号 | 方案名称 | 核心说明 | 成本情况 | 实测情况 |
---|---|---|---|---|
1 | 基于仙宫云的成品ComfyUI工作流接入Coze制作视频 | 云端租用装有ComfyUI镜像的算力(你可以理解为云端的一个电脑),与Coze组合生成视频,仙宫云开机即产生费用 | 按照仙宫云算力每小时单价计算 | 已接入Coze实测,1分钟左右视频成本几毛钱,比之前降低10倍不止,效果较好,缺点是只要开机就会产生费用,不适合个人用户 |
2 | 调用Running hub上的成品ComfyUI工作流接入Coze制作视频 | 调用云端的ComfyUI工作流,与仙宫云不同,仅在调用工作流时产生费用,一个5秒的分镜4分钱 | 一个5秒分镜4分钱 | 已接入Coze实测,1分钟左右视频成本几毛钱,比之前降低10倍不止,效果较好,调用才会产生费用,适合个人用户 |
3 | 基于本地ComfyUI接入Coze制作视频 | 需要本地硬件显存在24G以上,可在本地部署工作流,封装为API后接入Coze | 需要自己准备硬件,主要是硬件的成本 | 没测,我显存就8G |
下面视频就是Coze结合ComfyUI制作的独居女孩vlog视频,可以看出效果比之前的版本好很多:

之前的版本: Coze实战:一分钟生成10w+独居女孩Vlog动画,零基础也能日更!
2. Coze中ComfyUI插件使用示例
几个方案测下来,我个人是更偏向用Running Hub,于是我们封装了一套对接Running Hub上的ComfyUI工作流生成视频的工具插件。工具涵盖文生图,图生视频、首尾帧视频这几个插件,大家需要可以直接使用:

插件调用很简单,核心分为两大步骤,第一个步骤为提交任务,这个任务可以是文生图、也可以是图生视频和文生视频等,第二个步骤就是查询这个任务的执行进度和结果,我写了几个简单的调用示例给大家参考使用。
2.1. 文生视频插件
2.1.1. 工作流搭建
文生视频插件调用的完整工作流如下:

开始: 开始节点主要输入文生视频提示词和Running Hub的key。

因为Running Hub一个时间只能跑一个任务,故需要工作流来实现排队逻辑逻辑,查询任务队列是否满了,如果满了则延迟几秒后再重新创建文生视频任务,这个功能基于循环节点来实现。

create_text_2_video创建任务:这个节点的作用是创建文生视频任务,填入的参数有prompt(文生视频提示词),height(视频高),width(视频宽),plugin_key(插件key),plugin_uuid(插件的uuid),plus(是否启用plus模式,建议启用),rh_key(Running Hub的key)。
ps:无论宽高,最长边不要超过1024,否则容易爆 显存

选择器: 这个节点的作用的用来进行判断的,如果create_text_2_video 节点输出的err_msg 的值为TASK_QUEUE_MAXCED则代表队列已满,则需要进入排队进程,间隔几秒后再次创建文生视频任务,如果队没有满就可以获取任务id正式进入文生视频任务来获取视频地址了。

下图为选择器_2出来后的衔接节点,delay_2为延时节点,这个节点的作用是延时59秒,59秒后继续发起文生视频任务。

前面我们通过排队机制拿到了文生视频任务id,之后的步骤就是基于这个任务id来查询视频生情况,获取视频地址,这部分的工作流如下:

提取提取有效的任务id(代码): 在前面的工作流流程中,我们经过排队进程获取了任务id,下述代码的作用是把任务id提取到task_id参数中。

源代码:
csharp
async def main(args: Args) -> Output:
params = args.params
task_ids = params['task_ids']
msg_ids = params['msg_ids']
for i in task_ids:
if i is not None and i != '':
return { "task_id": i }
return {"task_id": None}
当任务id成功获取后,我们就拿到了制作文生图视频任务的任务编号,要注意这里依然不是即时获得视频任务的结果,需要写一个循环每个几秒去文生视频插件产生的视频地址。
query_task_status(获取任务状态): 这个节点可以获得任务执行的状态,如果返回的参数中status为SUCCESS就代表视频制作完成了

query_task_result(获取视频地址): 在确认query_task_status 插件返回的status为SUCCESS 时就可以基于query_task_result插件获取视频地址了。

另一边,如果query_task_status 不为SUCCESS就需要进入二级判断,我们需要判断err_msg是否等于APIKEY_TASK_STATUS_ERROR,如果等于就代表工作流出错了,直接结束循环,否则延迟30秒继续获取视频状态。

取结果图片地址(代码): 在退出循环后我们需要用代码来获取成果视频地址。

源代码:
ini
import json
async def main(args: Args) -> Output:
params = args.params
# Get the first item from the result_url_list
result_url_json_string = params['result_url_list'][0]
# Parse the JSON string to get the dictionary
result_url_dict = json.loads(result_url_json_string)
# Extract the fileUrl from the dictionary
file_url = result_url_dict['fileUrl']
# Build the output object
ret: Output = {
"result_url": file_url
}
return ret
2.1.2. 效果演示
以上就是Running Hub视频调用插件的完整流程,我基于这个做了一个动物世界的视频效果很不错,给大家展示一下:

2.2. 图生视频
2.2.1. 工作流搭建
图生视频的完整工作流如下,它与文生视频插件调用的区别就在于多了一个图片上传的步骤:

开始节点: 在开始节点中需要输入以下参数,rh_key为Running Hub的key,prompt为图生视频的提示词,img为图生视频流程所需要的图片,plugin_key为插件调用所需要的key。

upload_file: 这个节点的作用是用于上传图片,rh_key对应开始节的Running Hubkey,url对应开始节点的图片。

由于Running Hub执行任务的机制是一个时间段只能执行一个任务(作图或做视频),所以在基于Running Hub的图生视频工作流中也要有排队逻辑,工作流排布节点如下:

CreateImage2Video(创建图生视频任务): 这个节点的作用是用于在Running Hub中创建一个图生视频任务,
imagePath对应upload_file节点输出的图片地址,prompt参数对应图生视频提示词,rhKey对应开始节点输入的Running Hub的key,height对应视频的最长边(不要超过1024,容易爆显存),plugingKey对应插件使用的key,plus参数代表是否开启plus模式,推荐选true。

选择器: 在选择器_2 中需要判断CreateImage2Video 输出中列队有没有满了,如果err_msg 参数为TASK_QUEUE_MAXED 则代表队列已满,需要等待几秒后继续调用CreateImage2Video创建任务,否则直接获取任务id进去正式图生视频任务。

退出循环后,获得了任务id就能基于这个任务id来获取视频生产结果了,相关工作流节点排布如下:

这部分和文生视频章节的步骤是一样的,不再赘述。
2.2.2. 效果演示
基于Running Hub插件我这边制作了橘猫视频,效果也很好:

以上就Running Hub插件文生视频和图生视频插件调用的完整演示,有不清楚的可以评论区留言,博主看见后会一一回复。如果想直接获取 工作流 ,可以加入社群后我拉你进Coze空间直接学习使用。
3. 结语
其实做内容创作,成本和效率一直是大家头疼的事,这次摸索出的这些法子,能实实在在帮着把视频制作的门槛降一降。要是你在试的过程中遇到啥卡壳的地方,随时来交流,毕竟实操里的小细节还挺多的,多聊聊总能找到更顺的路。往后有新的玩法,我也会接着分享,咱们一起在低成本做优质内容的路上慢慢琢磨,慢慢进步。
