Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌅 早安电台 — 一键 AI 视频生成系统

输入日期 + 主题 → Coze AI 自动生成早安视频 → 导入剪映草稿


📋 目录


一、项目概述

项目 说明
项目名 早安电台(Good Morning Radio)
用途 每天自动生成早安短视频,含 AI 文案 + Pexels 素材 + 剪映草稿
技术栈 Python 3.11, Coze API, Pexels API, pyautogui, pyperclip, PyGetWindow
输出 剪映草稿(.draft),可直接在剪映专业版中编辑导出
作者 Undo
仓库 https://github.com/你的用户名/goodmorning-radio(待创建)

核心能力

  • ✅ Tkinter 弹窗输入日期和主题文案
  • ✅ 自动匹配主题关键词 → Pexels 搜索 4K 横屏素材
  • ✅ 调用 Coze 工作流合成视频 → 返回 Draft ID
  • ✅ 自动打开米核剪映小助手 → 粘贴 ID → 创建剪映草稿
  • ✅ 支持命令行传参跳过弹窗(适合自动化)

二、系统架构

┌─────────────────────────────────────────────────────────┐
│                    用户启动(双击快捷方式)                  │
└──────────────────────┬──────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────┐
│               Python 脚本 generate_video.py               │
│                                                         │
│  1. show_input_dialog()  — 弹窗输入日期 + 主题             │
│  2. rwf()               — 调用 Coze API                   │
│  3. gdi()               — 解析 Draft ID                   │
│  4. pm()                — 自动粘贴到米核 + 创建草稿          │
│  5. 打开剪映专业版                                          │
└──────────┬──────────────────────────────────────────────┘
           │
           ├── ① ──→ Coze 工作流(云端)
           │              │
           │              ├── 接收参数:time, zhuti, API_KEY
           │              ├── 调用 Pexels API 搜索 4K 横屏素材
           │              ├── AI 合成视频
           │              └── 返回 Draft ID
           │
           ├── ② ──→ 米核剪映小助手(本地 exe)
           │              │
           │              ├── 粘贴 Draft ID
           │              └── 点击"创建剪映草稿"
           │
           └── ③ ──→ 剪映专业版(打开)

三、完整工作流程

步骤 1:用户输入

弹窗让用户填写:

  • 日期(YYYY-MM-DD,默认当天)
  • 主题/文案(默认从模板按天数轮换生成)

支持 {date} → 如 "2026年6月17日" 支持 {weekday} → 如 "星期四"

步骤 2:调用 Coze 工作流

POST https://api.coze.cn/v1/workflow/run
Authorization: Bearer {pat}
Content-Type: application/json

{
  "workflow_id": "7648157202642403382",
  "parameters": {
    "time": "2026-06-17",
    "zhuti": "早安文案内容...",
    "API_KEY": "xxx"
  },
  "is_async": false
}

步骤 3:Coze 工作流内部逻辑

  1. 接收 timezhutiAPI_KEY
  2. 根据 zhuti 关键词匹配视频风格(夏天/治愈/励志/风景/生活...)
  3. 调用 Pexels API 搜索 4K 横屏素材
  4. 按每段 3 秒计算需要的片段数量
  5. 返回视频链接列表

步骤 4:解析 Draft ID

Coze 工作流返回的数据中提取 output 字段作为 Draft ID。

步骤 5:自动导入米核剪映小助手

  1. 启动 米核剪映小助手.exe
  2. 等待窗口出现(超时 20 秒)
  3. 将 Draft ID 复制到剪贴板
  4. 点击输入框(窗口中央,垂直 28% 位置)
  5. Ctrl+A → Delete 清空
  6. Ctrl+V 粘贴 ID
  7. 截图保存到本地(便于调试)
  8. 点击"创建剪映草稿"按钮(窗口中央,垂直 52% 位置)

步骤 6:打开剪映专业版

自动启动 剪映专业版.lnk,用户可直接查看生成的草稿。


四、项目文件结构

goodmorning-radio/
│
├── generate_video.py          # 主脚本(一键视频生成)
├── config.json                # 配置文件(含 API 密钥,已 gitignore)
├── config.json.template       # 配置文件模板(可公开,占位符替换)
├── .gitignore                 # Git 忽略规则
│
├── docs/
│   └── README.md              # 本文档
│
├── __pycache__/               # Python 缓存(已 gitignore)
│
└── debug_*.png                # 调试截图(运行自动生成,已 gitignore)

可移植性说明

文件 是否提交 Git 说明
generate_video.py ✅ 是 主程序,跨机器通用
config.json.template ✅ 是 模板,新机器复制为 config.json 填入密钥即可
config.json ❌ 否 含真实 API 密钥,每个机器独立配置
docs/README.md ✅ 是 文档
debug_*.png ❌ 否 运行时产生的调试截图

五、Python 脚本详解

5.1 函数清单

函数 职责 关键细节
lc() 加载 config.json 读取配置,失败则退出
gz(ds, c) 生成默认主题文案 从 8 条模板按天数轮换,支持 {date}/{weekday} 变量
show_input_dialog() 弹窗输入日期和主题 Tkinter,置顶,回退到命令行 input
rwf(pat, wid, dt, zt, ak) 调用 Coze 工作流 POST 同步请求,超时 600s
gdi(res) 解析 Draft ID 遍历 output/data/result 字段
fw(t, to) 查找窗口 轮询 15 秒,按标题匹配
pm(did) 粘贴到米核 剪贴板复制 + Ctrl+V(非 typewrite,对 Electron 更可靠)
main() 主流程编排 组装所有步骤

5.2 关键实现细节

弹窗输入(show_input_dialog)

# 520x260 居中窗口,默认日期当天,默认主题从模板自动生成
# 置顶显示,支持取消回退到命令行

Coze API 调用(rwf)

b = {
    "workflow_id": wid,
    "parameters": {
        "time": dt,          # 日期字符串
        "zhuti": zt,         # 主题文案
        "API_KEY": ak        # API 密钥
    },
    "is_async": False        # 同步等待
}

自动粘贴(pm)

pyperclip.copy(did)                # 复制到剪贴板
pyautogui.click(input_x, input_y)  # 点击输入框(3次确保焦点)
pyautogui.hotkey("ctrl", "a")      # 全选
pyautogui.press("delete")          # 删除
pyautogui.hotkey("ctrl", "v")      # 粘贴(比 typewrite 可靠)
pyautogui.click(btn_x, btn_y)      # 点击创建按钮

输入框位置:窗口 水平居中 × 垂直 28% 创建按钮位置:窗口 水平居中 × 垂直 52%


六、Coze 工作流代码

6.1 工作流信息

项目 说明
平台 Coze(扣子)— https://www.coze.cn
工作流 ID 7648157202642403382
空间 ID 7648146632676081698
触发方式 REST API
API 端点 https://api.coze.cn/v1/workflow/run
输入参数 time(字符串)、zhuti(字符串)、API_KEY(字符串)
输出 Draft ID(剪映草稿 ID,字符串)

6.2 Pexels 视频搜索代码

这个节点是 Coze 工作流中的关键逻辑:根据主题文案匹配关键词,搜索 4K 横屏素材。

async function main({ params }: { params: Record<string, any> }): Promise<Record<string, any>> {
    let input = Number(params.input) || 0;
    const zhuti = (params.zhuti ?? '').trim();

    // 兼容单位:微秒 → 秒
    if (input >= 1000000) {
        input = input / 1000000;
    }
    const num = Math.ceil(input / 3);
    const limit = Math.min(Math.max(num, 1), 30);

    // 主题关键词匹配
    const keywordMap: Record<string, string[]> = {
        "夏天|夏|暑|热": ["summer morning", "sunny day", "beach sunrise", "green nature", "blue sky", "sunshine field"],
        "治愈|温暖|温柔|放松|舒缓": ["sunshine garden", "golden morning light", "bright meadow", "sunlit forest", "peaceful sunrise", "calm lake nature"],
        "励志|加油|努力|奋斗|拼搏|梦想": ["sunrise mountain", "morning run", "city sunrise", "motivation", "success"],
        "风景|自然|山水|旅行|远方|大地": ["misty mountain", "lake sunrise", "forest morning", "waterfall", "landscape"],
        "生活|日常|烟火|人间|平凡": ["morning coffee", "sunlight window", "fresh bread", "city morning", "street"],
        "情感|爱情|思念|陪伴|相遇": ["sunset love", "couple morning", "romantic sunrise", "together"],
        "孤独|独处|安静|深夜|宁静": ["alone morning", "quiet street", "silent dawn", "peaceful alone"],
    };

    let keywords: string[];
    let matched = false;
    for (const [key, words] of Object.entries(keywordMap)) {
        const regex = new RegExp(key);
        if (regex.test(zhuti)) {
            keywords = words;
            matched = true;
            break;
        }
    }
    if (!matched) {
        keywords = [
            "golden sunrise", "sunlight forest", "sunshine meadow",
            "warm morning light", "sunny garden", "peaceful lake sunrise",
            "sun rays through trees", "bright flowers", "calm ocean sunrise",
            "sunlit path", "morning glow", "sunbeam nature"
        ];
    }

    const keyword = keywords[Math.floor(Math.random() * keywords.length)];
    let video_urls: string[] = [];
    let debug_msg = `keyword: ${keyword}`;

    try {
        // Pexels API: 4K 横屏视频
        const resp = await fetch(
            `https://api.pexels.com/videos/search?query=${keyword}&per_page=${limit}&orientation=landscape&size=4k`,
            { headers: { "Authorization": "你的 Pexels API Key" } }
        );
        debug_msg += `, status: ${resp.status}`;
        const data = await resp.json();
        debug_msg += `, results: ${data.total_results ?? 0}`;

        if (data.videos && data.videos.length > 0) {
            video_urls = data.videos.map((v: any) => {
                const files = v.video_files;
                const hd = files.find((f: any) => f.quality === "hd")
                    || files.find((f: any) => f.quality === "sd")
                    || files[0];
                return hd.link;
            });
        }
    } catch (e: any) {
        debug_msg += `, error: ${e.message || String(e)}`;
    }

    // 保底视频
    if (video_urls.length === 0) {
        video_urls = [
            "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/61877f9dc37f1eb02a73b1459267b917dce6017b.mp4",
            "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/28cbe8e5cf1cc69051c6d9a8653349892a65185b.mp4"
        ];
    }

    const selected = video_urls.slice(0, Math.min(num, video_urls.length));
    return { video_urls: selected, num: selected.length, total_seconds: selected.length * 3, debug_msg };
}

6.3 工作流节点说明

[开始节点]
    ↓ 参数: time, zhuti, API_KEY
[代码节点 - Pexels 搜索]
    ↓ 输出: video_urls, num, total_seconds, debug_msg
[后续处理节点]
    ↓ 合成视频,生成剪映草稿
[返回节点]
    ↓ 输出: Draft ID
[结束]

注意: Pexels API Key 需自行替换为有效的 Key。免费注册地址:https://www.pexels.com/api/


七、配置文件说明

config.json

{
  "coze": {
    "workflow_id": "7648157202642403382",
    "space_id": "7648146632676081698",
    "api_key": "your-api-key",
    "pat": "pat_your-personal-access-token"
  },
  "auto_zhuti": {
    "enabled": true,
    "source": "template",
    "templates": [
      "早安,{date} {weekday},人生的答案,总是藏在时光的褶皱里。..."
    ]
  }
}
字段 类型 说明 获取方式
coze.workflow_id string Coze 工作流 ID Coze 控制台 → 工作流 → 基本信息
coze.space_id string Coze 空间 ID Coze 控制台 → 空间设置
coze.api_key string 传给工作流的 API 密钥 自定义,工作流内校验用
coze.pat string Coze 个人访问令牌 Coze → 设置 → API 令牌
auto_zhuti.templates string[] 早安文案模板 可自定义,支持变量

PAT 优先级: 环境变量 COZE_PAT > config.json 中的 pat


八、安装与运行

8.1 首次安装

# 1. 克隆仓库
git clone https://github.com/你的用户名/goodmorning-radio.git
cd goodmorning-radio

# 2. 创建配置文件
copy config.json.template config.json
# 编辑 config.json 填入真实密钥

# 3. 安装 Python 依赖(脚本会自动安装,也可手动)
pip install requests pyautogui pyperclip PyGetWindow

8.2 运行方式

方式一:桌面快捷方式(推荐)

创建快捷方式指向:

目标: C:\Path\To\Python311\python.exe "C:\Path\To\goodmorning-radio\generate_video.py"
起始位置: C:\Path\To\goodmorning-radio

方式二:命令行运行(弹窗输入)

cd C:\Path\To\goodmorning-radio
python generate_video.py

方式三:命令行传参(跳过弹窗,适合自动化)

python generate_video.py "2026-06-17" "早安文案内容..."

8.3 所需外部程序

程序 用途 路径配置
米核剪映小助手 接收 Draft ID 创建剪映草稿 C:\Users\用户名\Desktop\米核剪映小助手.exe
剪映专业版 视频编辑 C:\Users\用户名\Desktop\剪映专业版.lnk

脚本中路径可根据实际位置修改。


九、外部依赖

9.1 Python 库

用途 pip 包名 安装方式
requests HTTP 请求 requests 自动
pyautogui 鼠标/键盘自动化 pyautogui 自动
pyperclip 剪贴板操作 pyperclip 自动
PyGetWindow 窗口查找 PyGetWindow 自动
tkinter 弹窗 UI Python 内置

脚本启动时自动 pip install 缺失的库。

9.2 外部 API

API 用途 需要 Key
Coze API 调用工作流合成视频 ✅ Coze PAT
Pexels API 搜索 4K 横屏视频素材 ✅ Pexels API Key

十、常见问题

Q: 启动后没反应?

A: 检查 Python 是否安装,运行 python --version。检查快捷方式路径是否正确。

Q: Coze API 调用失败?

A: 检查 config.json 中的 pat 是否过期。Coze PAT 有有效期,需定期更新。

Q: 粘贴 ID 没成功?

A: 查看项目目录下的 debug_*.png 截图。如果输入框为空,可能是因为米核窗口位置/大小变了——调整脚本 pm() 函数中的比例参数(0.28 和 0.52)。

Q: 提示"Config not found"?

A: 确保 config.jsongenerate_video.py 在同一目录。首次使用需从 config.json.template 复制创建。

Q: 如何迁移到新电脑?

  1. 克隆仓库
  2. 复制 config.json.templateconfig.json
  3. 填入 Coze PAT 和 Pexels API Key
  4. 修改脚本中的 MEJY 路径为实际路径
  5. 安装 Python 3.11
  6. 双击运行

📜 更新日志

日期 版本 说明
2026-06-15 v1.0 初始版本,Coze API + pyautogui typewrite
2026-06-17 v1.1 改为剪贴板粘贴(解决 Electron 输入问题)
2026-06-17 v1.2 增加弹窗输入,Pexels 改为 4K 横屏素材

文档生成日期:2026-06-17

About

🌅 早安电台 - 一键AI视频生成系统,输入日期+主题自动生成早安视频并导入剪映

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages