3分钟自动生成爆款儿童古诗启蒙视频!Coze+即梦一键搞定(附源码)​

0 阅读4分钟

1. 前言

最近刷短视频的朋友应该都注意到,那些带点"小心机"的古诗启蒙视频简直火得离谱——随便一个"春晓配卡通动画"的模板,动辄几+点赞;李白的《静夜思》配上童声朗诵和星空特效,评论区全是家长催更;更别说那些用AI生成国风水墨画的账号,单条视频带货古诗绘本就能月入6位数。

这几天社群里刚好讨论了这种爆款儿童古诗词视频,群友问能不能基于coze一键生成这种视频,我的回答当然是可以的。我用了一天时间搭建了这个工作流,只需要输入古诗名字,就能一键生成爆款儿童古诗启蒙视频,效果如下:

2. 工作流设计

在正式开始解释工作流之前,还是按照惯例先给大家梳理一下工作流设计思路:

  1. 用户填入古诗名字;

  2. 大模型根据古诗名字解析出诗歌内容、诗人名字和朝代;

  3. 基于每句古诗生成音频;

  4. 基于每句古诗生成图像;

  5. 基于每句古诗调用即梦AI插件生成视频;

  6. 组装视频、字幕、音频要素写入剪映草稿。

3. 工作流实现

本章还是照旧给大家讲解一下工作流实现的核心节点,完整工作流如下图:

开始: 开始节点的输入参数为古诗名字。

根据故事名字生成古诗内容、作者、朝代( 大模型 ): 这个节点的大模型采用的DeepSeek R1,可根据古诗名字检索诗歌完整内容,返回内容、作者和作者朝代。

将每句古诗生成音频(插件): 这个节点的作用是生成每句古诗的音频,我选的音色是小助佩奇,语速0.8。

文生图、图像生成: 这两个节点的作用基于每句古诗生成符合其意境的配图。

图生视频: 这个节点我选的通义千问大模型,它的作用是基于前面的文生图提示词生成图生视频提示词。

image2video_task_create(即梦 AI 插件): 这个节点的作用是将我们前面生成的图片转变为视频。

需要注意的是image2video_task_create插件需要搭配image2video_task_query插件使用,我这里写了一个死循环机制去获取即梦AI插件生成的视频地址:

代码_信息组装: 这个节点的作用将前面节点生成的内容转换为剪映小助手需要的格式。

完整代码:

async function main(args) {
    const params = args.params;
    
    // 解析所有输入参数为数组
    let times, video_list, texts, audio_urls, author, title;
    try {
        // 将字符串类型的参数解析为JavaScript对象
        times = typeof params.time === 'string' ? JSON.parse(params.time) : params.time;
        video_list = typeof params.video_list === 'string' ? JSON.parse(params.video_list) : params.video_list;
        texts = typeof params.texts === 'string' ? JSON.parse(params.texts) : params.texts;
        audio_urls = typeof params.audio_urls === 'string' ? JSON.parse(params.audio_urls) : params.audio_urls;
        author = params.author;
        title = params.title;
    } catch (e) {
        return { error: `解析输入参数时出错: ${e.message}` };
    }
    
    // 保证所有参数都是数组类型
    if (!Array.isArray(times)) times = [times];
    if (!Array.isArray(video_list)) video_list = [video_list];
    if (!Array.isArray(texts)) texts = [texts];
    if (!Array.isArray(audio_urls)) audio_urls = [audio_urls];
    
    // 获取其他参数
    const width = parseInt(params.width);
    const height = parseInt(params.height);
    
    // 初始化结果数组
    const captions = [];
    const videos = [];
    const audios = [];
    const captions1 = [];
    const captions2 = [];
    
    let current_time = 0;
    let duration_all = 0; // 用于累加所有duration
    
    // 获取所有数组的最小长度
    const data_length = Math.min(times.length, video_list.length, texts.length, audio_urls.length);
    
    for (let idx = 0; idx < data_length; idx++) {
        // 使用当前索引的时间值
        const duration = times[idx]; // 转为微秒
        const end_time = current_time + duration;
        
        // 累加duration
        duration_all += duration;
        
        try {
            // 获取音频URL (处理嵌套结构)
            let audio_url;
            if (typeof audio_urls[idx] === 'object' && audio_urls[idx].data && audio_urls[idx].data.link) {
                audio_url = audio_urls[idx].data.link;
            } else {
                audio_url = String(audio_urls[idx]);
            }
            
            // 获取文本 (处理嵌套结构)
            let text;
            if (typeof texts[idx] === 'object' && texts[idx].sentence) {
                text = texts[idx].sentence;
            } else {
                text = String(texts[idx]);
            }
            
            // 获取视频URL
            const video_url = String(video_list[idx]);
            
            // 添加到结果数组
            audios.push({
                audio_url: audio_url,
                duration: duration,
                start: current_time,
                end: end_time
            });
            
            captions.push({
                text: text,
                start: current_time,
                end: end_time,
                in_animation: "打字机 II",
                out_animation: "消散",
                in_animation_duration: duration
            });
            
            videos.push({
                video_url: video_url,
                width: width,
                height: height,
                start: current_time,
                end: end_time,
                duration: duration
                // transition: "叠化",
                // transition_duration: 1000000
            });
            
        } catch (e) {
            console.error(`处理第${idx}个元素时出错: ${e.message}`);
            continue;
        }
        
        // 更新时间
        current_time = end_time;
    }

    // 标题字幕
    captions1.push({
        text: title,
        start: 0,
        end: duration_all,
        in_animation: "渐显",
        out_animation: "渐隐",
        in_animation_duration: 1000000  // 1秒
    });

    // 作者字幕
    captions2.push({
        text: author,
        start: 0,
        end: duration_all,
        in_animation: "渐显",
        out_animation: "渐隐",
        in_animation_duration: 1000000  // 1秒
    });
    
    // 返回结果
    return {
        captions: JSON.stringify(captions),
        videos: JSON.stringify(videos),
        audios: JSON.stringify(audios),
        captions1: JSON.stringify(captions1),
        captions2: JSON.stringify(captions2),
        duration_all: duration_all
    };
}

add_audios、add_videos、add_captions(剪映小助手插件): 这三个插件的作用是将我们前面节点生成的素材写入到剪映草稿中。

结束: 结束节点的参数设置为剪映小助手的草稿地址,将这个地址粘贴到剪映小助手点击创建草稿就能在剪映中查看成品视频。

4. 资料领取

你觉得大模型不好用,可能是你不会写提示词,小肥肠为你准备了海量提示词模板和DeepSeek相关教程,只需关注公众号后端小肥肠,点击底部【资源】菜单即可领取。

本文的工作流及提示词已经上传至coze空间,感兴趣的朋友可以私信小肥肠详细了解~

5. 结语

通过Coze平台结合即梦AI插件,本文实现了从输入古诗名字到自动生成儿童启蒙视频的全流程自动化,极大地提升了内容创作的效率和质量。通过这篇文章,我希望大家能感受到AI在创作过程中的巨大潜力,也期待看到更多的人利用这些工具进行创新,创造出更多有趣和有价值的内容。