大家好,我是大明哥,目前专注 AI 智能体。
相信大家都刷到过这类视频:它们以情绪化、人生感悟、心灵治愈的文案,配上一些简单的视频。这类视频非常容易引发共鸣。制作也相对容易些,如果你用剪映来做的话,制作一个视频应该要花几十分钟。
但是,如果你用 Coze 工作流的花,几十秒就可以搞定。你只需要输入文案主题,Coze 工作流就可以对多个视频片段进行混剪(支持自定义上传视频),同时生成文案、配音。
整体思路
- 利用 deepSeek 生成情感治愈的文案将文案转换为音频根据音频的时间随机获取一些视频片段将字幕、音频、视频片段、背景音乐添加到剪映草稿里面
完整工作流:
搭建工作流
整个工作流接收三个参数:
input:文案主题api_token:字幕跟音频对齐插件的 tokenvideo_urls:自定义视频片段利用 DeepSeek 来生成文案,提示词如下:
# 角色你是一位出色的治愈情感文案专家,擅长依据用户输入的主体,创作出饱含温情、抚慰人心的情感文案。你的文字细腻且富有感染力,能精准捕捉情感的微妙之处,给人带来温暖与力量。## 技能### 技能 1: 创作情感文案1. 接收用户输入的主体后,深入剖析主体蕴含的情感元素。2. 围绕主体展开丰富联想,从多维度挖掘相关情感脉络。3. 使用电影旁白的深情风格,文案需能够引起用户的情感共鸣,精炼简短,字数在 150 字左右===回复示例===[情感文案内容]===示例结束===### 输出格式最后直接输出创作好的文案,无需额外说明。## 限制:- 仅围绕用户输入的主体创作情感文案,拒绝回答与创作情感文案无关的话题。- 所输出的情感文案须逻辑清晰、语句通顺,符合情感表达要求。- 情感文案应紧密围绕用户输入的主体,不得偏离主题创作。 - 最后直接输出文案,文案字数 150字左右。生成文案后就将文案转换为语音,同时获取它的时长:
由于生成的文案是一整段的,所以需要将其进行分割处理,主要是按照标点符号来分割:
由于文案是切割的,但是音频是一整段,所以需要利用插件将文案和音频对齐,这里采用插件[字幕音频对齐]:
注意:这个插件是收费的。当然,这里也有不收费的方式,就是先将文案分割,然后在批量将其合成音频,最后利用代码来进行时间线的处理。这种方案实现起来也不难(大明哥前面大部分工作流都是这么处理的),就是稍微繁琐了点。
文案和音频处理完成后就需要来处理视频了。
如果输入了自定义视频的话,需要先获取自定义视频的时长,因为需要根据自定义视频时长和音频长度进行补齐处理:
再就是挑选视频片段了,由于代码比较多就比贴出来了。挑选完视频后,还需要再次对挑选的视频时长再次进行下计算,主要目的是为了构建视频的时间线:
再然后就是利用 Python 代码来构建剪映草稿的数据了。输入参数:
输出参数:
Python 代码:
import jsonasync def main(args: Args) -> Output: params = args.params video_url = params["video_url"] time_lines = params["time_lines"] audio_url = params["audio_url"] text_list = params["text_list"] audio_duration = params["audio_duration"] title = params["title"] video_duration = params["video_duration"] # 处理视频 video_start = 0 video_end = 0 video_infos = [] for index,item in enumerate(video_url): duration = convert_to_seconds(video_duration[index]["duration"]) video_end = video_start + duration * 1000000 if (video_end >= audio_duration): video_end = audio_duration video_infos.append({ "video_url": item, "start": video_start, "end": video_end, "width":576, "height":1024, "transition": "叠化", "transition_duration": 1000000 }) video_start = video_end if (video_start >= audio_duration): break # 背景音乐 bg_audio = [{ "audio_url":"https://houht.oss-cn-shanghai.aliyuncs.com/public/mp3/qingroubgm.MP3", "start":0, "end":video_end }] # 配音和字幕 ## 配音 audio_infos = [{ "audio_url": audio_url, "duration": audio_duration, "start":0, "end":audio_duration }] ## 字幕 start = 0 end = 0 caption_infos = [] for index,item in enumerate(time_lines): start = item["start"] end = item["end"] text = text_list[index] caption_infos.append({ 'text': text, 'start': start, 'end': end, "in_animation":"渐显", "out_animation":"渐隐" }) captions_title = [{ 'text': title, 'start': 0, 'end': 2000000, "in_animation":"", "out_animation":"渐隐" }] # 构建输出对象 ret: Output = { "video_infos": json.dumps(video_infos), "bg_audio": json.dumps(bg_audio), "audio_infos": json.dumps(audio_infos), "caption_infos": json.dumps(caption_infos), "captions_title": json.dumps(captions_title) } return ret# 将时间格式转化为秒数def convert_to_seconds(time_str): ## 为空 返回 0 if not time_str: return 0 parts = time_str.split('时') if len(parts) == 2: hours = int(parts[0]) sub_parts = parts[1].split('分') minutes = int(sub_parts[0]) seconds = int(sub_parts[1].split('秒')[0]) total_seconds = hours * 3600 + minutes * 60 + seconds else: parts = parts[0].split('分') if len(parts) == 2: minutes = int(parts[0]) seconds = int(parts[1].split('秒')[0]) total_seconds = minutes * 60 + seconds else: total_seconds = int(parts[0].split('秒')[0]) return total_seconds最后就是创建剪映草稿,然后添加数据了:
视频效果(掘金上传视频太麻烦了),看这里:mp.weixin.qq.com/s/D8MPrtrXn…
- 原文可以领取完整提示词、代码、工作流: 点击领取大明哥 AI 觉醒社 | AI 智能体
