短视频生成器
一个开源的自动化视频创作工具,用于生成短视频内容。短视频生成器结合了文本转语音、自动字幕、背景视频和音乐,通过简单的文本输入即可生成引人入胜的短视频。
硬件要求
- CPU:建议至少 2 核
- RAM:至少需要 2 GB,建议 4 GB。使用 Docker 时,可以通过
CONCURRENCY
环境变量限制内存使用(见下文)
- GPU:可选,可以显著加快字幕生成速度(Whisper.cpp)并略微提升视频渲染速度
软件要求
使用
npx
运行时需要:ffmpeg
build-essential
、git
、cmake
、wget
用于构建 Whisper.cpp
观看官方视频,了解如何使用 n8n 生成视频
运行项目
使用 NPX(推荐)
这是最简单的运行方式,支持 GPU:
使用 Docker
[!IMPORTANT] 为了避免内存问题,我已将用于渲染的 Chrome 标签页并发数限制为 1。如果您有更多内存,可以尝试调整适合您机器/VPS 的最佳设置。
CPU 镜像
为了提高性能,我为 Docker 镜像设置了 Whisper 模型为
base.en
。该模型比 medium.en
更小更快,但准确性稍低。在 2 个 vCPU 的情况下,Kokoro 生成 10 秒音频大约需要 7 秒,Whisper 生成一个场景的字幕大约需要 2 秒。
NVIDIA GPU
获取帮助
环境变量
变量 | 描述 |
PEXELS_API_KEY | 用于获取背景视频的 Pexels API 密钥 |
PORT | API/MCP 服务器的端口(默认:3123) |
LOG_LEVEL | 服务器的日志级别(默认: info ,可选:trace 、debug 、info 、warn 、error ) |
WHISPER_VERBOSE | Whisper 的详细模式(默认: false ) |
CONCURRENCY | 用于渲染视频的 Chrome 标签页数量,用于限制 Docker 容器中的内存使用(默认:未定义) |
VIDEO_CACHE_SIZE_IN_BYTES | 帧的缓存,用于防止 Docker 镜像中的内存相关崩溃(默认:未定义) |
示例
功能
- 从文本提示生成完整的短视频
- 文本转语音
- 自动生成字幕并设置样式
- 通过 Pexels 搜索和选择背景视频
- 根据风格/情绪选择背景音乐
- 作为 REST API 和模型上下文协议(MCP)服务器运行
工作原理
短视频生成器接收简单的文本输入和搜索词,然后:
- 使用 Kokoro TTS 将文本转换为语音
- 通过 Whisper 生成准确的字幕
- 从 Pexels 找到相关的背景视频
- 使用 Remotion 合成所有元素
- 渲染出带有完美时间字幕的专业短视频
视频生成依赖项
依赖项 | 版本 | 许可证 | 用途 |
^4.0.286 | 视频合成与渲染 | ||
v1.5.5 | MIT | 语音转文本生成字幕 | |
^2.1.3 | LGPL/GPL | 音频/视频处理 | |
^1.2.0 | MIT | 文本转语音生成 | |
N/A | 背景视频 |
如何贡献?
欢迎提交 PR。请参阅 CONTRIBUTING.md 文件,了解如何设置本地开发环境。
API 使用
REST API
提供以下 REST 端点:
GET /api/short-video/:id
- 通过 ID 获取视频,也可以通过以下方式下载:
POST /api/short-video
- 创建新视频
DELETE /api/short-video/:id
- 通过 ID 删除视频
GET /api/music-tags
- 获取可用的音乐标签
模型上下文协议(MCP)
该服务还实现了模型上下文协议:
GET /mcp/sse
- 用于 MCP 的服务器发送事件
POST /mcp/messages
- 向 MCP 服务器发送消息
可用的 MCP 工具:
create-short-video
- 从场景列表创建视频
get-video-status
- 检查视频创建状态
许可证
本项目基于 MIT 许可证。
致谢
- ❤️ Remotion 用于程序化视频生成
- ❤️ Whisper 用于语音转文本
- ❤️ Pexels 提供视频内容
- ❤️ FFmpeg 用于音频/视频处理
- ❤️ Kokoro 用于 TTS
- Author:waytomcp
- URL:https://www.waytomcp.com/article/gyoridavid/short-video-maker
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!