一键生成短视频:MoneyPrinterTurbo 开源项目深度解析
一行命令,让 AI 帮你写文案、找素材、配音、剪辑------全自动视频生产流水线,56K+ Star 验证。
引子
我的中转站:https://api.aiseo.one/register?channel=c_0qyhisw6
你有没有这样的经历:
想做一个知识类短视频账号,但每次都要------
"写脚本、录配音、找素材、剪视频..."
一个 2 分钟的视频,花了 3 个小时。一个月下来,累得半死,产出还不到 10 条。
试过 AI 视频工具?要么只能生成几张图片轮播,要么配音像机器人,要么素材和文案对不上。想找个真正能用的"全自动"方案,折腾了一圈发现还是要自己动手。
这不是你的问题,而是视频制作的门槛本来就高。 文案、配音、画面、字幕、剪辑------每个环节都是独立技能。
直到我发现了 MoneyPrinterTurbo------这个项目把"一句话生成视频"这件事,变成了现实。
项目简介
MoneyPrinterTurbo 是一个开源的 AI 视频生成工具(MIT 协议),作者是 harry0703。它的定位非常清晰:
一句话生成视频:输入主题,自动完成文案→配音→素材→字幕→合成。
一句话概括:本地运行、免费开源、支持 15+ LLM 提供商、9 种 TTS 方案、三种运行模式(Web UI / API / CLI),从脚本到成片全程自动化。
核心特性
| 特性 | 说明 |
|---|---|
| 一键生成 | 输入主题,自动完成文案→配音→素材→字幕→视频全流程 |
| 15+ LLM | 支持 OpenAI、Claude、Gemini、DeepSeek、Ollama 等主流模型 |
| 9 种 TTS | Edge-TTS(免费)、Azure、OpenAI、Fish TTS、阿里云、火山引擎等 |
| 多尺寸 | 竖屏 9:16(抖音/小红书)、横屏 16:9(B站/YouTube) |
| ️ 三种模式 | Web UI(可视化)、API(集成)、CLI(批量) |
| 零成本 | 默认配置下完全免费,Edge-TTS + Pexels 免费素材 |
| 国内友好 | 支持国内 LLM、中英文视频、无需FQ |
| Docker 部署 | 一键 Docker Compose 启动,开箱即用 |
技术架构
核心理念:视频生产流水线
MoneyPrinterTurbo 的设计哲学是:把视频制作拆解成标准化的流水线,每个环节独立可替换。
┌─────────────────────────────────────────────────────────────┐
│ 用户输入主题 │
│ "如何用 AI 提高工作效率" │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Step 1: 文案生成 (LLM) │
│ OpenAI / Claude / DeepSeek / Ollama / ... │
│ 输入主题 → 输出结构化脚本(标题 + 分镜文案) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Step 2: 配音合成 (TTS) │
│ Edge-TTS(免费)/ Azure / OpenAI / Fish TTS / ... │
│ 文案 → 音频文件 + 时间轴 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Step 3: 素材匹配 │
│ Pexels / Pixabay / 本地素材库 │
│ 分镜关键词 → 视频/图片素材 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Step 4: 字幕生成 │
│ 自动对齐时间轴 + 样式渲染 │
│ 输出 SRT 格式 + 内嵌字幕 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Step 5: 视频合成 │
│ MoviePy + FFmpeg │
│ 素材 + 配音 + 字幕 → 最终视频 │
└─────────────────────────────────────────────────────────────┘
项目结构
MoneyPrinterTurbo/
├── app/ # 主应用
│ ├── controllers/ # API 路由控制器
│ │ └── video.py # 视频生成 API
│ ├── services/ # 核心业务逻辑
│ │ ├── llm/ # LLM 服务(15+ 提供商)
│ │ ├── tts/ # TTS 服务(9 种方案)
│ │ └── material.py # 素材匹配服务
│ ├── models/ # 数据模型
│ └── utils/ # 工具函数
├── resource/ # 静态资源
│ ├── fonts/ # 字体文件
│ └── html/ # 模板文件
├── webui/ # 前端(Streamlit)
│ └── Main.py # Web UI 入口
├── config.toml # 配置文件
├── Dockerfile # Docker 构建
└── docker-compose.yml # 一键启动
架构分层
| 层级 | 职责 | 技术选型 |
|---|---|---|
| 接入层 | 用户交互 | Streamlit Web UI / FastAPI / CLI |
| 编排层 | 流程调度 | 主控制器协调各服务 |
| 服务层 | 核心能力 | LLM / TTS / 素材 / 字幕 |
| 基础设施 | 底层依赖 | MoviePy / FFmpeg / Redis |
核心代码解析
1. 视频生成流水线
整个视频生成流程由 VideoService 统一编排:
# app/services/video_service.py(简化版逻辑)
classVideoService:
async defgenerate_video(self, topic: str, config: VideoConfig):
# Step 1: 生成文案
script = await self.llm_service.generate_script(
topic=topic,
style=config.style,
language=config.language
)
# Step 2: 合成配音
audio_segments = []
for scene in script.scenes:
audio = await self.tts_service.synthesize(
text=scene.narration,
voice=config.voice
)
audio_segments.append(audio)
# Step 3: 匹配素材
materials = await self.material_service.match(
keywords=[scene.keywords for scene in script.scenes],
source=config.material_source
)
# Step 4: 生成字幕
subtitles = self.subtitle_service.generate(
audio_segments=audio_segments,
style=config.subtitle_style
)
# Step 5: 合成视频
final_video = self.compose_video(
materials=materials,
audio=audio_segments,
subtitles=subtitles,
aspect_ratio=config.aspect_ratio
)
return final_video
精妙之处:
-
每个步骤独立可替换------不满意某个 TTS?换成 Azure 只需改配置
-
异步设计------支持并发处理多个场景
-
配置驱动------所有参数通过
config.toml控制
2. LLM 服务抽象
项目支持 15+ LLM 提供商,核心是统一的接口抽象:
# app/services/llm/base.py
classLLMProvider(ABC):
@abstractmethod
async defgenerate_script(
self,
topic: str,
language: str = "zh-CN",
style: str = "professional"
) -> VideoScript:
"""生成视频脚本"""
pass
# app/services/llm/openai.py
classOpenAIProvider(LLMProvider):
async defgenerate_script(self, topic: str, **kwargs) -> VideoScript:
response = await self.client.chat.completions.create(
model=self.model,
messages=[
{"role": "system", "content": SCRIPT_SYSTEM_PROMPT},
{"role": "user", "content": f"主题:{topic}"}
]
)
return VideoScript.from_json(response.choices[0].message.content)
# app/services/llm/ollama.py(本地模型)
classOllamaProvider(LLMProvider):
async defgenerate_script(self, topic: str, **kwargs) -> VideoScript:
# Ollama 本地推理,零成本
response = await self.client.generate(
model=self.model,
prompt=f"生成视频脚本:{topic}"
)
return VideoScript.from_json(response)
支持的 LLM 提供商:
| 提供商 | 特点 | 适用场景 |
|---|---|---|
| OpenAI | 质量最高 | 追求效果 |
| Claude | 长文本优秀 | 复杂脚本 |
| DeepSeek | 国产便宜 | 预算有限 |
| Ollama | 本地免费 | 隐私敏感 |
| Gemini | 谷歌出品 | 多语言 |
| Moonshot | 国产长文本 | 中文优化 |
3. TTS 服务矩阵
配音是视频的灵魂,项目支持多种 TTS 方案:
# app/services/tts/edge_tts.py(免费方案)
classEdgeTTSProvider(TTSProvider):
async defsynthesize(self, text: str, voice: str) -> AudioSegment:
# 微软 Edge-TTS,完全免费
# 支持中英文,多种音色
communicate = edge_tts.Communicate(text, voice)
await communicate.save("temp.mp3")
return AudioSegment.from_mp3("temp.mp3")
# app/services/tts/azure_tts.py(专业方案)
classAzureTTSProvider(TTSProvider):
async defsynthesize(self, text: str, voice: str) -> AudioSegment:
# Azure 语音服务,情感丰富
# 需要订阅 Key,但效果最好
speech_config = SpeechConfig(
subscription=self.key,
region=self.region
)
synthesizer = SpeechSynthesizer(speech_config)
result = synthesizer.speak_text_async(text).get()
return AudioSegment(result.audio_data)
TTS 方案对比:
| 方案 | 费用 | 质量 | 适用场景 |
|---|---|---|---|
| Edge-TTS | 免费 | 良好 | 日常使用 |
| Azure | 付费 | 优秀 | 商业项目 |
| OpenAI | 付费 | 良好 | 已有订阅 |
| Fish TTS | 按量 | 优秀 | 情感配音 |
| 阿里云 | 付费 | 良好 | 国内合规 |
4. 素材智能匹配
素材匹配采用关键词搜索 + 智能筛选:
# app/services/material.py
classMaterialService:
async defmatch(self, keywords: List[str], source: str = "pexels"):
materials = []
for keyword in keywords:
# 从 Pexels/Pixabay 搜索
results = await self.search_media(keyword, source)
# 智能筛选:时长、分辨率、相关性
best_match = self.select_best(
results,
criteria={
"min_duration": 3,
"min_resolution": (1920, 1080),
"relevance_threshold": 0.8
}
)
materials.append(best_match)
return materials
async defsearch_media(self, keyword: str, source: str):
if source == "pexels":
# Pexels API,免费高清素材
async with httpx.AsyncClient() as client:
resp = await client.get(
"https://api.pexels.com/videos/search",
params={"query": keyword, "per_page": 10},
headers={"Authorization": self.api_key}
)
return resp.json()["videos"]
# 支持本地素材库
elif source == "local":
return self.local_db.search(keyword)
快速开始
方式一:Docker 一键启动(推荐)
# 克隆项目
gitclonehttps://github.com/harry0703/MoneyPrinterTurbo.git
cdMoneyPrinterTurbo
# 配置环境变量
cpconfig.toml.exampleconfig.toml
# 编辑 config.toml,填入 API Key(可选)
# Docker 启动
docker-composeup-d
# 访问 Web UI
openhttp://localhost:8501
方式二:本地安装
# 克隆项目
gitclonehttps://github.com/harry0703/MoneyPrinterTurbo.git
cdMoneyPrinterTurbo
# 创建虚拟环境
python-mvenvvenv
sourcevenv/bin/activate
# 安装依赖
pipinstall-rrequirements.txt
# 安装 ImageMagick(视频处理必需)
# macOS
brewinstallimagemagick
# Ubuntu
sudoaptinstallimagemagick
# 启动 Web UI
streamlitrunwebui/Main.py
最小配置(免费使用)
只需修改 config.toml:
[app]
language="zh-CN"# 中文
[llm]
provider="deepseek"# 或 "ollama" 本地运行
deepseek_api_key="your-key"# DeepSeek 很便宜
[tts]
provider="edge-tts"# 完全免费
[material]
provider="pexels"# 免费高清素材
pexels_api_key="your-key"# 免费申请
一键生成视频
Web UI:
1.打开http://localhost:8501
2.输入主题:"如何提高工作效率的 5 个技巧"
3.选择配音风格、视频尺寸
4.点击"生成视频"
5.等待2-5分钟,下载成品
API 调用:
importrequests
response = requests.post(
"http://localhost:8080/api/v1/videos/generate",
json={
"topic": "AI 将如何改变未来工作",
"language": "zh-CN",
"voice": "zh-CN-XiaoxiaoNeural",
"aspect_ratio": "9:16",
"duration": 60
}
)
video_url = response.json()["video_url"]
CLI 批量:
pythonmain.py\
--topic"如何培养阅读习惯"\
--languagezh-CN\
--aspect-ratio9:16\
--output./videos/
实战案例
案例一:知识类短视频矩阵
目标:每天生产 10 条知识类短视频
topics = [
"如何提高专注力的 3 个方法",
"睡眠质量差的真正原因",
"为什么早起的人更成功",
# ... 更多主题
]
for topic in topics:
await video_service.generate_video(
topic=topic,
language="zh-CN",
voice="zh-CN-YunyangNeural",
aspect_ratio="9:16", # 竖屏适合抖音
style="knowledge"
)
效果:
-
单条视频成本:< ¥0.5(DeepSeek + Edge-TTS + Pexels)
-
日产 10 条,月产 300 条
-
适合知识博主、企业号批量运营
案例二:产品宣传视频
需求:为新产品生成 60 秒宣传视频
await video_service.generate_video(
topic="""
产品介绍:
- 名称:智能水杯 Aqua
- 卖点:自动提醒喝水、水温显示、健康追踪
- 目标用户:办公室白领
风格:简洁现代
""",
language="zh-CN",
aspect_ratio="16:9", # 横屏适合 B站
material_source="local", # 使用产品素材
voice="zh-CN-XiaoxiaoNeural"
)
优化点:
-
使用
material_source="local"替换为产品实拍素材 -
调整
style="commercial"增加营销感
案例三:多语言视频批量生产
需求:同一内容生成中英文双语版本
async defgenerate_multilingual(topic_zh: str, topic_en: str):
# 中文版本
video_zh = await video_service.generate_video(
topic=topic_zh,
language="zh-CN",
voice="zh-CN-YunyangNeural"
)
# 英文版本
video_en = await video_service.generate_video(
topic=topic_en,
language="en-US",
voice="en-US-JennyNeural"
)
return video_zh, video_en
await generate_multilingual(
"AI 如何改变教育行业",
"How AI is Transforming Education"
)
与同类方案对比
| 方案 | 成本 | 功能完整度 | 自定义 | 部署难度 |
|---|---|---|---|---|
| MoneyPrinterTurbo | 免费开源 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| HeyGen | $29/月起 | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| Runway | $12/月起 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Synthesia | $22/月起 | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 自己开发 | 时间成本 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ |
MoneyPrinterTurbo 的核心优势:
- 真正免费 - Edge-TTS + DeepSeek/Ollama 零成本运行
- 源码可控 - 完全开源,可深度定制
- 本地运行 - 数据不出本地,隐私安全
- 模块化设计 - 每个环节独立可替换
适合人群:
- ✅ 内容创作者(知识博主、自媒体运营)
- ✅ 企业营销团队(批量视频生产)
- ✅ 开发者(二次开发、API 集成)
- ✅ AI 爱好者(学习视频生成技术)
不适合场景:
- ❌ 需要真人出镜(这个做不到)
- ❌ 高端商业广告(素材和配音还不够精致)
- ❌ 实时直播(这是录播,不是直播)
最佳实践
1. 国内用户推荐配置
[llm]
provider="deepseek"# 国产,便宜,中文好
deepseek_api_key="sk-xxx"
[tts]
provider="edge-tts"# 免费,中文效果好
[material]
provider="pexels"
pexels_api_key="xxx"# 免费申请
[proxy]
# 不需要代理,国内直连
2. 性能优化建议
# 并发生成多个视频
uvicornmain:app--workers4
# 使用 Redis 缓存素材
redis-server&
# config.toml 添加
[cache]
provider="redis"
url="redis://localhost:6379"
3. 素材库建设
# 定期下载高质量素材到本地
python scripts/download_materials.py \
--keywords "办公,科技,城市,自然" \
--output ./local_materials/
# 配置优先使用本地素材
[material]
provider = "local"
local_path = "./local_materials/"
fallback = "pexels" # 本地没有时回退到 Pexels
总结
MoneyPrinterTurbo 是一个真正把"AI 视频生成"落地的项目。它没有追求花哨的功能,而是把生产效率做到了极致。
它的架构哲学值得称道:
- 流水线思维 - 每个环节独立可替换
- 配置驱动 - 改配置不用改代码
- 多模式运行 - Web/API/CLI 适应不同场景
- 成本可控 - 免费方案完全可用,付费方案效果更好
如果你是内容创作者,想在 AI 时代提升产能,这个项目值得花时间研究。它不会替代你的创意,但会把繁琐的执行工作全部自动化。
⭐ 项目地址: https://github.com/harry0703/MoneyPrinterTurbo
安装:docker-compose up -d
协议: MIT(商业可用)