Benny的泥坑

探索n8n工作流和AI技术

n8n自动短视频工作流思路整理

本文提供了一套完整的 n8n 自动化短视频生成方案,涵盖从脚本撰写、语音合成、口型同步、智能剪辑到生成剪映草稿的全流程,全部基于开源工具和免费 API 实现,帮助用户实现短视频的全自动制作与发布。

下面给你一套「从素材到剪映草稿」的 n8n 自动化思路,全部用可白嫖或自带 API 的云服务/开源模型完成,不依赖任何商业闭源方案。思路拆成 6 个阶段,每个阶段都给出:

  1. 用什么节点/工具
  2. 输入输出
  3. 关键参数或脚本片段
  4. 避坑提示

你可以按需裁剪,最终跑通后把「剪映草稿 JSON」推到云盘→手机剪映打开即可一键成片,再手动或自动发布到抖音/视频号。


0. 前置准备

  • 一台 4G 内存以上、能跑 Docker 的电脑/小服务器(Win/Mac 都行)。

  • Docker 装好 n8n(社区版即可)。

  • 提前把「主播原片」按「一句台词一个文件」切好,命名规则:
    主播名_序号_关键词.mp4(关键词后面做口型同步用)。

  • 装 3 个容器(一次拉好,后面 n8n 直接调 API):

    1
    2
    3
    docker run -d -p 9880:9880 ghcr.io/sayashi/vits-tts-api    # 脚本→语音
    docker run -d -p 8001:8001 ghcr.io/sayashi/wav2lip-gan-api # 语音+视频→口型同步
    docker run -d -p 9000:9000 ghcr.io/sayashi/auto-editor-api # 智能剪辑(去静音、停顿)

    镜像地址我随便写的,你可以换成自己打包的或 HuggingFace 镜像,只要 REST 风格一致即可。

  • 安装 n8n 社区节点:
    –「Read/Write File from Disk」
    –「HTTP Request」
    –「Execute Command」
    –「Function」
    –「Google Drive」或「阿里云盘」节点(二选一,用来把草稿同步到手机)。


1. 批量写口播脚本(ChatGPT 节点)

节点:OpenAI / ChatGLM / 任意大模型
Prompt 模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
你是一位短视频口播编剧。
主题:{{$node["Set"].json["topic"]}}
时长:30 秒左右
风格:快节奏+金句结尾
输出 JSON 格式:
{
"title": "标题(15 字内)",
"hook": "前 3 秒钩子",
"body": ["每句 5~7 秒,共 5 句"],
"tag": ["话题标签1","话题标签2"]
}
```
**输出**:`workflow.json.script`
**避坑**:让模型把「body」拆成数组,后面一句一句生成语音,方便对齐。

---

### 2. 脚本 → 语音(TTS)
**节点**:HTTP Request
**URL**:`http://localhost:9880/vits`
**Method**:POST
**Body**(JSON):
```json
{
"text": "{{$item(0).json.body[0]}}",
"speaker_id": 0,
"length_scale": 0.9
}
```
**循环模式**:「Loop over items」→ 把 body 数组 5 句依次跑完。
**输出**:`voice_0.wav … voice_4.wav` 保存在 `/data/voice/`。
**避坑**:
- 语速 `length_scale` 设 0.9,后面对口型更稳。
- 采样率统一 16 kHz,Wav2Lip 不吃 48 kHz。

---

### 3. 选素材 → 口型同步(Wav2Lip)
**节点**:HTTP Request ×2
3-A 「找对口型素材」
用 Function 节点根据关键词(keywords)去 `/footage/` 目录扫 `主播名_*_关键词.mp4`,随机挑 1 条。
3-B 「丢给 Wav2Lip」
URL: `http://localhost:8001/sync`
Form-Data:
– face: 选中素材(file)
– audio: 对应 voice_n.wav(file)
– output_name: `sync_n.mp4`
**输出**:`sync_0.mp4 … sync_4.mp4`
**避坑**:
- 素材提前裁剪成 720×1280 竖屏,<=30 秒,Wav2Lip 显存省一半。
- 如果素材长度 < 音频,Function 节点里先算「音频秒数」,再对素材做「倍数循环」或「随机补帧」。

---

### 4. 智能剪辑(去静音、加字幕、加 BGM)
**节点**:HTTP Request(Auto-Editor)
URL: `http://localhost:9000/autoedit`
Body:
```json
{
"input": "{{$node["Wav2Lip"].json["output_path"]}}",
"margin": 0.2,
"subs": true,
"subs_lang": "zh",
"bgm": "/data/bgm/funky.mp3",
"bgm_volume": -25
}
```
**输出**:`final_n.mp4`
**避坑**:
- 如果想保留「停顿感」就把 margin 调大。
- 字幕文件(srt)同步生成,后面一起塞进剪映草稿。

---

### 5. 合成剪映草稿 JSON(核心)
剪映草稿本质就是一个 `draft.json` + 一堆素材。
**节点**:Function(JavaScript)
把以下模板填进去即可:

```javascript
const uid = Date.now();
const material_list = [];
const tracks = [];

items.forEach((item, index) => {
const vid = `final_${index}.mp4`;
material_list.push({
id: `video${index}`,
type: "video",
path: `/storage/emulated/0/Android/data/com.lemon.lv/files/Movies/${vid}`,
duration: item.json.duration * 1000000, // 微秒
width: 720,
height: 1280
});
tracks.push({
type: "video",
material_id: `video${index}`,
start: index * 5000000, // 每段间隔 5 秒,可自行重叠
duration: item.json.duration * 1000000
});
});

return [{
json: {
draft_name: `${items[0].json.title}_${uid}`,
duration: tracks.reduce((a,b)=>a+b.duration,0),
material_list,
tracks,
subtitle_path: `/storage/emulated/0/Android/data/com.lemon.lv/files/Movies/draft_${uid}.srt`
}
}];

输出draft_content.json
避坑

  • 路径必须是「手机剪映能认的 Android 绝对路径」,否则草稿会报「素材丢失」。
  • 字幕文件也一起丢进云盘同目录,剪映会自动挂载。

6. 推到云盘 → 手机剪映打开

节点:Google Drive Upload / 阿里云盘 Upload
把下列文件一次性同步到固定目录:

/draft_${uid}/
  ├─ draft_content.json
  ├─ final_0.mp4 … final_4.mp4
  └─ draft_${uid}.srt

手机端:

  1. 打开剪映→「本地草稿」→右上角「⋮」→「导入草稿」→选中 draft_content.json 即可。
  2. 检查无误后一键「发布」,标题、话题标签已经在 JSON 里写好了,可直接带 # 话题发出去。

7. 定时/批量跑

用 n8n 的「Schedule」触发器,每天 8:00/20:00 跑一次;
或者把「主题」丢进 Google Sheet,一行一个选题,n8n 用「Read Sheet」循环跑,批量生成 N 条草稿。


8. 一键部署脚本(bonus)

我把上面 6 个容器 + n8n 的 docker-compose.yml 模板放在 Gist,直接 docker-compose up -d 就能跑,地址:
https://gist.github.com/yourname/n8n-shortvideo-stack
(自行替换成你的真实地址)


9. 后续可加的爽点

  • 自动抽「评论区关键词」→ 再跑一遍工作流,24 小时内蹭热点。
  • 把「口播脚本」同时喂给「Stable Diffusion」生成封面图,一起塞进草稿。
  • 数据回传:剪映发布后把「播放/点赞」回写到 Sheet,跑 A/B 选题模型。

一句话总结

「脚本 → TTS → 主播口型同步 → 自动剪辑 → 剪映草稿 JSON → 云盘同步 → 手机一键发」,整条链路全部 n8n 节点化,0 手工剪片,10 分钟就能出一条 30 秒竖屏短视频。先把 MVP 跑通,再慢慢加花活!