@ww_nero/skills 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/video_prompt.txt +91 -124
- package/index.js +2 -2
- package/package.json +1 -1
package/assets/video_prompt.txt
CHANGED
|
@@ -1,174 +1,141 @@
|
|
|
1
|
-
|
|
1
|
+
制作视频的完整步骤如下(可根据当前实际状态,跳过部分已经完成的环节):
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**重要说明**:本指南仅适用于**定格动画风格**的视频制作,即通过若干静态图片按顺序拼接成视频。如需制作**连续变化、流畅过渡**的视频(如人物动作、场景变换等),建议使用以下专业工具:
|
|
4
|
+
- AI视频生成工具:Sora、Kling、Runway、Pika等
|
|
5
|
+
- 专业视频剪辑软件:Adobe Premiere Pro、Final Cut Pro、DaVinci Resolve等
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
7
|
-
##
|
|
9
|
+
## 一、规划视频内容
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
**确定视频结构**,存储到markdown文件中:
|
|
12
|
+
- 视频主题和整体风格
|
|
13
|
+
- 分镜脚本:每个画面的内容描述、旁白/字幕文本
|
|
14
|
+
- 背景音乐需求(如有)
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 audio.mp3
|
|
14
|
-
```
|
|
16
|
+
## 二、生成配音并获取时间戳
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
使用 ASR 工具(如 mcp__media__asr)将音频转换为 SRT 字幕文件。
|
|
18
|
+
由于语音的时长难以精确控制,应**先生成配音,再根据音频时长编排画面**。
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
1. **准备旁白文本**:根据分镜脚本整理完整的旁白内容
|
|
21
|
+
2. **使用语音合成工具生成语音**:将文本转为音频文件
|
|
22
|
+
3. **使用语音识别工具获取时间戳**:对生成的音频进行识别,获取带时间戳的SRT字幕文件
|
|
23
|
+
4. **根据时间戳规划画面**:根据SRT文件中每段文字的起止时间,确定每张图片的显示时长
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
# 查看视频流信息
|
|
25
|
-
ffprobe -i input.mp4
|
|
26
|
-
|
|
27
|
-
# 移除内嵌字幕流(保留视频和音频)
|
|
28
|
-
ffmpeg -i input.mp4 -map 0:v -map 0:a -c copy output_no_sub.mp4
|
|
29
|
-
```
|
|
25
|
+
## 三、准备图片素材
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# 软字幕(可关闭)
|
|
34
|
-
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4
|
|
27
|
+
根据语音识别工具返回的时间戳信息准备图片:
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
1. **收集或生成图片**:
|
|
30
|
+
- 优先使用用户提供的图片素材
|
|
31
|
+
- 如需生成图片,使用图像生成工具创建
|
|
32
|
+
2. **图片规格要求**:
|
|
33
|
+
- 所有图片保存到`images`文件夹
|
|
34
|
+
- 建议使用统一的分辨率(如1920x1080或1280x720)
|
|
35
|
+
- 图片命名规则:`frame_01.png`、`frame_02.png`等,按播放顺序编号
|
|
39
36
|
|
|
40
|
-
|
|
37
|
+
## 四、使用ffmpeg合成视频
|
|
41
38
|
|
|
42
|
-
|
|
39
|
+
### 基础图片序列转视频
|
|
43
40
|
|
|
44
|
-
**截取片段**
|
|
45
41
|
```bash
|
|
46
|
-
#
|
|
47
|
-
ffmpeg -i
|
|
48
|
-
|
|
49
|
-
# 精确截取(需重新编码)
|
|
50
|
-
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:40 -c:v libx264 -c:a aac output.mp4
|
|
42
|
+
# 将图片序列转为视频(每张图片显示2秒)
|
|
43
|
+
ffmpeg -framerate 0.5 -i images/frame_%02d.png -c:v libx264 -pix_fmt yuv420p -r 30 output.mp4
|
|
51
44
|
```
|
|
52
45
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
参数说明:
|
|
47
|
+
- `-framerate 0.5`:输入帧率,0.5表示每张图片持续2秒(1/0.5=2秒)
|
|
48
|
+
- `-i images/frame_%02d.png`:输入图片序列,%02d表示两位数编号
|
|
49
|
+
- `-c:v libx264`:使用H.264编码
|
|
50
|
+
- `-pix_fmt yuv420p`:像素格式,确保兼容性
|
|
51
|
+
- `-r 30`:输出帧率30fps
|
|
58
52
|
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
# 创建文件列表 files.txt:
|
|
62
|
-
# file 'part1.mp4'
|
|
63
|
-
# file 'part2.mp4'
|
|
64
|
-
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
|
|
65
|
-
```
|
|
53
|
+
### 添加背景音乐
|
|
66
54
|
|
|
67
|
-
**调整速度**
|
|
68
55
|
```bash
|
|
69
|
-
#
|
|
70
|
-
ffmpeg -i
|
|
56
|
+
# 合成视频和背景音乐
|
|
57
|
+
ffmpeg -i video.mp4 -i bgm.mp3 -c:v copy -c:a aac -shortest output_with_bgm.mp4
|
|
71
58
|
```
|
|
72
59
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
## 3. 视频理解
|
|
60
|
+
### 添加配音
|
|
76
61
|
|
|
77
|
-
对于视频内容理解,推荐采用 **抽帧 + 图像理解** 的方式:
|
|
78
|
-
|
|
79
|
-
**适用范围**
|
|
80
|
-
- 仅适用于短视频(小于 1 分钟)
|
|
81
|
-
- 建议每 5 秒抽取 1 帧
|
|
82
|
-
|
|
83
|
-
**抽帧命令**
|
|
84
62
|
```bash
|
|
85
|
-
#
|
|
86
|
-
ffmpeg -i
|
|
87
|
-
|
|
88
|
-
# 指定起止时间抽帧
|
|
89
|
-
ffmpeg -i input.mp4 -ss 00:00:00 -to 00:01:00 -vf "fps=1/5" frame_%03d.png
|
|
63
|
+
# 合成视频和配音
|
|
64
|
+
ffmpeg -i video.mp4 -i narration.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output_with_voice.mp4
|
|
90
65
|
```
|
|
91
66
|
|
|
92
|
-
|
|
93
|
-
1. 使用上述命令抽取关键帧
|
|
94
|
-
2. 使用图像理解工具(如视觉模型)逐帧分析
|
|
95
|
-
3. 综合各帧信息得出视频内容理解
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 4. 视频生成
|
|
67
|
+
### 添加字幕
|
|
100
68
|
|
|
101
|
-
|
|
69
|
+
1. **准备字幕文件**(SRT格式),例如`subtitles.srt`:
|
|
70
|
+
```
|
|
71
|
+
1
|
|
72
|
+
00:00:00,000 --> 00:00:03,000
|
|
73
|
+
这是第一段字幕
|
|
102
74
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
75
|
+
2
|
|
76
|
+
00:00:03,000 --> 00:00:06,000
|
|
77
|
+
这是第二段字幕
|
|
78
|
+
```
|
|
107
79
|
|
|
108
|
-
|
|
80
|
+
2. **烧录字幕到视频**:
|
|
81
|
+
```bash
|
|
82
|
+
# 硬字幕(字幕嵌入视频画面)
|
|
83
|
+
ffmpeg -i video.mp4 -vf "subtitles=subtitles.srt:force_style='FontName=Microsoft YaHei,FontSize=24,PrimaryColour=&HFFFFFF&'" -c:a copy output_with_sub.mp4
|
|
84
|
+
```
|
|
109
85
|
|
|
110
|
-
|
|
86
|
+
### 完整合成示例
|
|
111
87
|
|
|
112
|
-
|
|
88
|
+
```bash
|
|
89
|
+
# 一次性合成:图片序列 + 配音 + 字幕
|
|
90
|
+
ffmpeg -framerate 0.5 -i images/frame_%02d.png -i narration.mp3 \
|
|
91
|
+
-c:v libx264 -pix_fmt yuv420p -r 30 \
|
|
92
|
+
-vf "subtitles=subtitles.srt:force_style='FontName=Microsoft YaHei,FontSize=24'" \
|
|
93
|
+
-c:a aac -shortest output_final.mp4
|
|
94
|
+
```
|
|
113
95
|
|
|
114
|
-
|
|
96
|
+
## 五、注意事项
|
|
115
97
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
98
|
+
1. **图片尺寸一致性**:所有图片必须使用相同的分辨率,否则ffmpeg可能报错
|
|
99
|
+
2. **图片编号连续**:图片序列编号必须连续,不能有间断(如01、02、04会导致03之后的图片被忽略)
|
|
100
|
+
3. **中文字幕字体**:使用中文字幕时需指定支持中文的字体(如Microsoft YaHei、SimHei等)
|
|
101
|
+
4. **音视频同步**:使用`-shortest`参数可让视频在音频或视频任一结束时停止
|
|
102
|
+
5. **文件格式**:输出建议使用MP4格式(H.264+AAC),兼容性最好
|
|
119
103
|
|
|
120
|
-
|
|
121
|
-
- 使用专业视频编辑软件:Adobe Premiere、DaVinci Resolve、Final Cut Pro
|
|
122
|
-
- 使用 AI 视频编辑工具:Runway、Pika Labs
|
|
104
|
+
## 六、进阶技巧
|
|
123
105
|
|
|
124
|
-
|
|
106
|
+
### 不同图片不同持续时间
|
|
125
107
|
|
|
126
|
-
|
|
108
|
+
如需每张图片显示不同时长,可使用concat方式:
|
|
127
109
|
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
|
|
110
|
+
1. 创建`input.txt`文件:
|
|
131
111
|
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
112
|
+
file 'images/frame_01.png'
|
|
113
|
+
duration 3
|
|
114
|
+
file 'images/frame_02.png'
|
|
115
|
+
duration 2
|
|
116
|
+
file 'images/frame_03.png'
|
|
117
|
+
duration 4
|
|
118
|
+
file 'images/frame_03.png'
|
|
136
119
|
```
|
|
120
|
+
注意:最后一个文件需要重复一次(ffmpeg的concat demuxer要求)
|
|
137
121
|
|
|
138
|
-
|
|
122
|
+
2. 执行合成:
|
|
139
123
|
```bash
|
|
140
|
-
ffmpeg -i input.
|
|
124
|
+
ffmpeg -f concat -i input.txt -c:v libx264 -pix_fmt yuv420p -r 30 output.mp4
|
|
141
125
|
```
|
|
142
126
|
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
|
|
146
|
-
```
|
|
127
|
+
### 添加转场效果
|
|
147
128
|
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -t 5 output.gif
|
|
151
|
-
```
|
|
129
|
+
ffmpeg支持简单的转场效果(如淡入淡出):
|
|
152
130
|
|
|
153
|
-
**旋转视频**
|
|
154
131
|
```bash
|
|
155
|
-
#
|
|
156
|
-
ffmpeg -i
|
|
132
|
+
# 添加淡入效果(前2秒)
|
|
133
|
+
ffmpeg -i video.mp4 -vf "fade=t=in:st=0:d=2" -c:a copy output_fade.mp4
|
|
134
|
+
|
|
135
|
+
# 添加淡出效果(最后2秒,假设视频10秒)
|
|
136
|
+
ffmpeg -i video.mp4 -vf "fade=t=out:st=8:d=2" -c:a copy output_fade.mp4
|
|
157
137
|
```
|
|
158
138
|
|
|
159
139
|
---
|
|
160
140
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
**可以执行的操作**
|
|
164
|
-
- 所有基于 ffmpeg 的视频处理操作
|
|
165
|
-
- 结合 ASR 实现字幕生成
|
|
166
|
-
- 抽帧后进行图像分析
|
|
167
|
-
|
|
168
|
-
**无法执行的操作**
|
|
169
|
-
- 视频生成(建议使用专业工具)
|
|
170
|
-
- 逐帧内容编辑(成本过高)
|
|
171
|
-
- 复杂特效制作(建议使用 After Effects 等)
|
|
172
|
-
- 实时视频处理
|
|
173
|
-
|
|
174
|
-
如遇到无法实现的需求,建议使用更专业的视频处理工具。
|
|
141
|
+
**完成后建议保留**:规划文档、图片素材、字幕文件和音频文件,方便后续修改调整。
|
package/index.js
CHANGED
|
@@ -149,7 +149,7 @@ const listTools = () => ({
|
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
151
|
name: 'video',
|
|
152
|
-
description: '
|
|
152
|
+
description: '制作视频的全流程指导说明和注意事项',
|
|
153
153
|
inputSchema: {
|
|
154
154
|
type: 'object',
|
|
155
155
|
properties: {},
|
|
@@ -159,7 +159,7 @@ const listTools = () => ({
|
|
|
159
159
|
]
|
|
160
160
|
});
|
|
161
161
|
|
|
162
|
-
const server = new Server({ name: 'skills', version: '3.
|
|
162
|
+
const server = new Server({ name: 'skills', version: '3.5.0' }, { capabilities: { tools: {} } });
|
|
163
163
|
|
|
164
164
|
server.setRequestHandler(ListToolsRequestSchema, async () => listTools());
|
|
165
165
|
|