12.4 测试与发布(视频混剪智能体开发) 《扣子编程从零开始搭建智能体 卢欣欣 清华大学出版社》【摘要 书评 试读】- 京东图书《扣子编程从零开始搭建智能体》全书案例分享~-CSDN博客 已完成完成以上各项配置后为确保智能体的交付质量进行系统功能测试。在“预览与调试”对话框中发送“你好啊”进行智能体引导测试测试结果如图12-41所示。图12-41 智能体引导测试按照系统引导提示输入主题和背景音乐风格后智能体开始调用已绑定的工作流。测试结果如图12-42所示。图12-42 输入完整信息后的测试结果经过多轮测试无误后单击智能体编排页面右上角的“发布”按钮按照系统引导完成智能体的发布与部署复制并分享智能体链接给用户使用。12.5拓展提升增加朗读音频前文构建的视频混剪智能体仅添加了背景音乐本节将在此基础上进一步引入朗读音频效果。其实现思路为在批处理生成图片阶段同步批量生成各段文本对应的朗读音频并根据每段音频的时长精准设定对应图片的过渡时长以确保音画严格同步。在混剪阶段首先需将各段分散的朗读音频拼接为一份完整的音频文件随后将其与背景音乐进行叠加处理生成最终的完整音频最后将该音频与生成的图片视频进行合成。优化后的工作流全貌如图12-43所示。图12-43 增加朗读音频后的工作流全貌1.合成语音步骤1添加合成语音插件。在批处理节点内部“图像生成”节点的下游添加一个插件节点。在插件市场搜索“语音”关键字找到扣子官方提供的语音合成插件并添加“speech_synthesis”工具如图12-44所示。图12-44 添加语音合成插件添加语音合成插件后的批处理体节点如图12-45所示。图12-45 批处理体步骤2配置输入参数。选中合成语音插件为文本参数“text”绑定“批处理”节点默认迭代变量Item下的text变量拆分后的文案文本为音色ID参数voice_id选择一种合适的音色如奶气萌娃参数配置如图12-46所示。图12-46 合成语音插件的输入配置步骤3配置批处理的输出参数。为“批处理”节点新增一个名为“voice_list” 的输出参数并绑定“合成语音”节点的输出变量data以便返回合成后的语音文件地址。如图12-47所示。图12-47 批处理节点的输出配置2.修改原转换图片数据格式的代码节点原有代码节点主要用于完成图片数据格式的转换。增加音频后批处理节点返回的音频数据为对象类型的数组同样需要将其转换为仅包含音频地址的字符串数组用于后续拼接朗读音频时使用同时还需根据音频时长动态调整图片的显示时长以实现音画同步。具体步骤如下。步骤1增加输入参数。在该代码节点的输入参数中新增一个名为“voices”的参数并绑定“批处理”节点的输出变量voice_list如图12-48所示。图12-48 代码节点的输入配置步骤2修改原有代码。在原有代码的基础上增加音频地址的提取逻辑并根据“合成语音”插件节点返回的音频时长参数duration设置对应图片的显示时长。修改后的代码如下。async def main(args: Args) - Output:#获取输入参数params args.paramsurl_list params.get(pics, [])voice_list params.get(voices, [])#防御性检查确保两个列表长度一致if len(url_list) ! len(voice_list):raise ValueError(fpics和voices的数量不匹配pics: {len(url_list)}, voices: {len(voice_list)})#定义循环动画类型anim_types [move_up, move_down, move_left, move_right, zoom_in, zoom_out]#生成图片列表并计算真实总时长image_list []audio_links []total_duration 0for idx, url in enumerate(url_list):#获取当前语音时长并累加到总时长current_duration voice_list[idx].get(duration, 3)current_link voice_list[idx].get(link, )#累加总时长total_duration current_durationimage_list.append({source: url,duration: current_duration,animation_type: anim_types[idx % len(anim_types)],animation_in: 0,animation_out: 2})#将音频地址追加到数组中audio_links.append(current_link)#构建符合规范的输出对象ret: Output {image_list: image_list,total_duration: total_duration,audio_links: audio_links}return ret步骤3增加输出参数。在输出参数中新增一个名为“audio_links”的参数变量类型选择ArrayString如图12-49所示。图12-49 代码节点的输出配置3.拼接朗读音频在批处理中生成的是与分段文案对应的零散朗读音频前序步骤已利用其时长控制图片显示。而在后续视频混剪时需要将分段朗读音频拼接为一个完整的音频文件具体操作如下。步骤1添加音频拼接节点。在原有“图片转视频”节点之后增加一个“视频剪辑工具”插件中的“concat_videos”工具添加方法同12.3.1节图片转视频中的步骤1。步骤2配置输入参数。在参数配置面板中为输入参数“videos”绑定前文“代码”节点的输出变量audio_links其余参数暂不配置如图12-50所示。图12-50 concat_videos接口的输入参数4.音频叠加为使朗读音频与背景音乐同时播放实现混音效果需对拼接后的朗读音频和背景音乐进行叠加处理。而音频叠加插件要求传入的参数为包含音频地址的字符串数组因此需要先将朗读音频地址与背景音乐地址合并至同一数组中。具体操作步骤如下。步骤1处理音频地址。在原有剪辑BGM节点的下游添加一个代码节点。步骤2配置输入参数。为该代码节点设置“String1”和“String2”两个输入参数分别绑定“剪辑BGM”节点的输出变量url和“拼接朗读音频文件”节点的输出变量url如图12-51所示。图12-51 代码节点的输入参数步骤3编写代码。进入代码编辑模式选择“Python语言”将输入的两个字符串整合至数组“result_array”中代码如下。async def main(args: Args) - Output:params args.params#获取输入的两个字符串str1 params.get(string1, )str2 params.get(string2, )#将两个字符串直接放入一个列表中数组merged_array [str1, str2]#返回结果ret: Output {result_array: merged_array}return ret步骤4配置输出参数。为该代码节点设置一个与代码返回值同名的输出参数“result_array”类型选择ArrayString如图12-52所示。图12-52 代码节点的输出参数步骤5添加音频叠加插件。参照前述方法在代码节点的下游添加一个“视频剪辑工具”插件中的“audio_mix”工具用于执行音频叠加。步骤6设置输入参数。选择该插件节点为输入参数“audios”绑定步骤1添加的“代码”节点的输出参数result_array如图12-53所示。图12-53 插件节点的输入参数5.音视频合成最后将原有音视频合成插件节点的输入参数“audio”绑定至音频叠加插件的输出参数url混音后的音频文件其他配置保持不变如图12-54所示。图12-54 音视频合成节点的输入参数至此增加朗读音频功能已全部配置完毕再次进行测试与发布即可生效。读者也可在此基础上尝试增加字幕功能。