MoneyPrinterTurbo 全解析:从主题关键词到高清短视频的 AI 自动化生成流水线
MoneyPrinterTurbo 是一个基于 AI 大模型与自动化工作流的开源项目:只需提供一个视频主题或关键词,它便会自动完成文案撰写、素材检索下载、语音合成、字幕生成与背景音乐混音,最终合成一支高清短视频。本文以项目英文 README 为主体,结合仓库源码(app/services/task.py、config.example.toml 等)深入讲解其功能特性、配置体系、Docker 与手动两种部署方式、字幕双引擎机制,以及常见运行报错的排查方法,帮助读者从零完成部署并理解底层流水线。
一、项目定位与核心功能特性
MoneyPrinterTurbo 的核心价值在于“一键式”短视频生产:用户无需剪辑经验,输入关键词即可得到成片。从 README-en.md 列出的功能清单看,其特性可归纳为以下几类:
- 架构:完整的 MVC 架构,代码结构清晰、易于维护,同时支持
API与Web 界面两种使用方式; - 文案:支持 AI 自动生成视频文案,也支持自定义文案(customized copy);
- 画幅:支持多种高清视频尺寸——竖屏 9:16(
1080x1920)、横屏 16:9(1920x1080); - 批量生成:支持一次生成多个视频(batch video generation),从中挑选最满意的一版;
- 片段时长:可设置视频片段(clip)时长,方便调节素材切换频率;
- 多语言:支持中文与英文视频文案;
- 语音:支持多种语音合成;
- 字幕:支持字幕生成,可调整
字体、位置、颜色、大小,并支持字幕描边; - 背景音乐:支持随机或指定音乐文件,可调节
背景音乐音量; - 素材:视频素材来源高清且无版权(Pexels / Pixabay);
- 大模型接入:支持 OpenAI、Moonshot、Azure、gpt4free、one-api、通义千问(Qwen)、Google Gemini、Ollama 等多种模型。
从源码结构看,这些特性有对应的实现载体:画幅、批量数、片段时长等参数全部收敛在 Pydantic 模型 VideoParams 中,例如 video_aspect(默认竖屏 9:16)、video_count(默认 1,>1 即批量生成)、video_clip_duration(默认 5 秒)、subtitle_enabled、font_size、stroke_width 等字段一一对应 README 中承诺的可配置项。画幅到分辨率的映射由 VideoAspect.to_resolution() 完成:16:9 -> (1920, 1080)、9:16 -> (1080, 1920)、1:1 -> (1080, 1080)。
后期计划(Future Plans)
README 同时列出了尚未实现的路标,可作为项目演进预期:GPT-SoVITS 配音支持、利用大模型增强语音合成的自然度与情绪表现、视频转场效果、提升视频内容相关性、视频长度(短/中/长)选项、Windows/macOS 一键启动包、自定义素材、配音与背景音乐的实时试听、更多 TTS 服务商(OpenAI TTS、Azure TTS)、YouTube 自动上传等。
二、系统要求
- 建议最低配置:4 核 CPU 及以上、8GB 内存及以上,无需 GPU;
- 操作系统:Windows 10 或 macOS 11.0 及更高版本。
从依赖清单 requirements.txt 看,核心运行时依赖包括:fastapi / uvicorn(API 服务)、streamlit(Web 界面)、moviepy(视频合成)、edge_tts(在线 TTS)、faster-whisper(本地字幕模型)、openai / google.generativeai / dashscope / azure-cognitiveservices-speech(各家大模型与语音 SDK)、g4f(免费 GPT 通道)以及 redis(可选的任务状态管理)。
三、安装与部署
前置条件
- 尽量避免使用中文路径,防止出现不可预期的问题;
- 确保网络稳定,能够正常访问国外网站(Pexels 素材检索、Edge TTS、OpenAI 等服务均依赖外网)。
第一步:克隆代码
git clone https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTurbo
第二步:修改配置文件
- 将 config.example.toml 复制一份,重命名为
config.toml; - 按照文件内注释配置
pexels_api_keys与llm_provider,并根据所选大模型服务商填入对应的 API Key。
从源码看,app/config/config.py 的 load_config() 会在 config.toml 不存在时自动从 config.example.toml 复制一份;若 TOML 解析失败,还会回退按 utf-8-sig 编码重试读取——这意味着带 BOM 的中文环境配置文件也能被正确加载。此外,配置中的 imagemagick_path / ffmpeg_path 若指向真实存在的可执行文件,会被自动写入环境变量 IMAGEMAGICK_BINARY / IMAGEIO_FFMPEG_EXE(见 config.py),这是后续“找不到 ffmpeg”问题的手动解法。
第三步:配置大语言模型(LLM)
- 使用
GPT-4.0或GPT-3.5需要 OpenAI 的API Key;如果没有,可将llm_provider设为g4f(免费的 GPT 开源库)。
config.example.toml 中给出的完整提供商列表及默认值如下:
| 配置项 | 说明 / 默认值 |
|---|---|
llm_provider |
提供商选择:openai、moonshot、oneapi、g4f、azure、qwen、gemini(默认 openai) |
openai_api_key / openai_base_url / openai_model_name |
OpenAI 密钥、代理地址(留空则直连)、模型名(默认 gpt-4-turbo) |
moonshot_api_key / moonshot_base_url / moonshot_model_name |
Moonshot(月之暗面)配置,默认模型 moonshot-v1-8k |
g4f_model_name |
免费 GPT 通道模型名,默认 gpt-3.5-turbo |
azure_api_key / azure_base_url / azure_model_name / azure_api_version |
Azure OpenAI 部署配置 |
gemini_api_key / gemini_model_name |
Google Gemini 配置,默认 gemini-1.0-pro |
qwen_api_key / qwen_model_name |
通义千问(DashScope)配置,默认 qwen-max |
deepseek_api_key / deepseek_base_url / deepseek_model_name |
DeepSeek 配置,默认 deepseek-chat |
ollama_base_url / ollama_model_name |
本地 Ollama 服务地址与模型名 |
pexels_api_keys / pixabay_api_keys |
素材站 API Key,支持多个 Key 以规避限流(英文双引号包裹、逗号分隔) |
subtitle_provider |
edge 或 whisper,留空表示不生成字幕(默认 edge) |
imagemagick_path / ffmpeg_path |
两个二进制的显式路径,默认自动检测(Windows 需手动设置) |
endpoint |
视频下载接入点,默认当前服务地址;用 nginx + 域名对外服务时可填域名 |
material_directory |
素材缓存位置:留空为默认 ./storage/cache_videos,可指定目录或设为 task(按任务隔离、不共享缓存) |
enable_redis / redis_host / redis_port / redis_db / redis_password |
是否用 Redis 做任务状态管理 |
max_concurrent_tasks |
文生视频的最大并发任务数(默认 5) |
说明:素材 Key 的读取逻辑在 app/services/material.py 的
get_api_key()中——当提供多个 Key 时,会按请求轮询取用(round-robin),这正是“多 Key 规避限流”的实现方式。
Docker 部署
1. 启动 Docker 容器
cd MoneyPrinterTurbo
docker-compose up
注意:新版 Docker 已自动以插件形式安装 compose,命令可写作
docker compose up。Windows 系统需先安装 Docker Desktop,并按微软文档配置 WSL(安装 WSL、启用 Docker 容器支持)。
从 docker-compose.yml 看,一次 docker-compose up 会拉起两个容器:
webui:以 Streamlit 运行 webui/Main.py,映射端口 8501;api:运行python3 main.py(FastAPI 服务),映射端口 8080;- 两者共享卷
./->/MoneyPrinterTurbo,即本地配置与产物直接挂载进容器。
Dockerfile 基于 python:3.11-slim-bullseye,预装 git、imagemagick、ffmpeg,并特别执行了一步 sed 修改 /etc/ImageMagick-6/policy.xml,删除 pattern="@\*" 的 rights="none" 策略条目——这正对应手动部署时“ImageMagick 安全策略阻止临时文件操作”的报错(见第六节 FAQ)。
2. 访问 Web 界面
浏览器访问 http://0.0.0.0:8501
3. 访问 API 接口
浏览器访问 http://0.0.0.0:8080/docs 或 http://0.0.0.0:8080/redoc,即可在线调试接口。
手动部署
1. 创建 Python 虚拟环境
推荐使用 conda 创建虚拟环境:
git clone https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTurbo
cd MoneyPrinterTurbo
conda create -n MoneyPrinterTurbo python=3.11
conda activate MoneyPrinterTurbo
pip install -r requirements.txt
2. 安装 ImageMagick
- Windows:下载静态库版本(如
ImageMagick-7.1.1-29-Q16-x64-static.exe)安装,不要修改安装路径;随后在config.toml中把imagemagick_path设为实际安装路径(若未改路径,直接取消示例配置中的注释即可)。 - macOS:
brew install imagemagick - Ubuntu:
sudo apt-get install imagemagick - CentOS:
sudo yum install ImageMagick
3. 启动 Web 界面
注意需在项目根目录下执行:
- Windows:
conda activate MoneyPrinterTurbo
webui.bat
- macOS / Linux:
conda activate MoneyPrinterTurbo
sh webui.sh
启动后浏览器会自动打开。
4. 启动 API 服务
python main.py
main.py 的入口逻辑非常简洁:读取配置后调用 uvicorn.run(app="app.asgi:app", ...),监听 config.listen_host(默认 0.0.0.0)与 config.listen_port(默认 8080)。启动后访问 http://127.0.0.1:8080/docs 即可在线测试接口。FastAPI 应用实例在 app/asgi.py 中组装,路由由 app/router.py 挂载 v1 版本的 video 与 llm 两组控制器,整体呈现典型的 MVC 分层:controllers(路由/请求)→ services(业务流水线)→ models(数据模型)。
四、视频生成流水线:一次任务的完整生命周期
README 宣称“提供主题即自动完成全部环节”,这一承诺的完整实现链路在 app/services/task.py 的 start() 函数中,共 6 个阶段、100% 进度条:
- 生成文案(progress 10):
generate_script()调用llm.generate_script()按主题与语言(中文/英文)产出文案;若请求中已带video_script则直接使用,对应“AI 生成 + 自定义文案”双模式; - 生成检索关键词(progress 20):
generate_terms()让 LLM 从文案中提取 5 个用于素材搜索的 terms;自定义 terms 支持逗号分隔字符串或列表; - 语音合成(progress 30):
generate_audio()调用 app/services/voice.py 的tts()(基于 edge_tts),产出audio.mp3并计算语音时长——该时长决定后续素材总下载量; - 字幕生成(progress 40):
generate_subtitle()按subtitle_provider选择引擎(机制见下一节); - 获取视频素材(progress 50):
get_video_materials()根据video_source走在线检索(material.download_videos()按 terms 到 Pexels/Pixabay 下载、按video_clip_duration切割)或本地素材预处理(video_source = "local"); - 合成成片(progress 50→100):
generate_final_videos()对video_count个输出分别执行combine_videos()(按video_concat_mode拼接素材片段、混入音频)与video.generate_video()(烧录字幕、叠加背景音乐),产出combined-N.mp4与final-N.mp4。
值得注意的两个细节:start() 支持 stop_at 参数(script/terms/audio/subtitle/materials/video),允许在任意阶段提前收尾,这是 API 层可单独“只生成文案 / 只生成音频”能力的来源;批量生成(video_count > 1)时拼接模式会被强制切为 VideoConcatMode.random,保证多条成片素材顺序不同、避免同质化。每步失败都会把任务状态置为 TASK_STATE_FAILED 并输出可操作的错误日志(如“检查语音语言是否与文案一致”“网络不可用时请开启 VPN”)。
五、语音合成
所有支持的声音列表见 docs/voice-list.txt。语音由 edge_tts 提供,voice.py 内置了全量 Azure Neural 音色清单(含 zh-CN、en-US、zh-HK、zh-TW、vi-VN 等语区),voice_rate 控制语速、voice_volume 控制音量(见 VideoParams 默认值:1.0 / 1.0)。
六、字幕生成:edge 与 whisper 双引擎
当前支持 2 种字幕生成方式,通过在 config.toml 中修改 subtitle_provider 切换:
- edge:生成速度快、性能好,对电脑配置无特殊要求,但质量可能不稳定;
- whisper:生成速度慢、性能开销大,对电脑配置有要求,但质量更可靠。
官方建议:先用 edge,若字幕质量不满足需求再切换到 whisper。留空则不生成字幕。
从 app/services/task.py 的实现看,edge 引擎直接复用 TTS 阶段的 SubMaker(edge_tts 逐句时间戳)生成 SRT;若 edge 未产出字幕文件,会自动回退到 whisper;whisper 模式下还会额外执行 subtitle.correct(),用原始文案修正识别结果,进一步提升准确率。
下载与放置 whisper 模型
- 请确保网络通畅,
whisper模型(whisper-large-v3)可从 HuggingFace 的 openai 仓库下载; - 下载后将整个目录拷贝到
.\MoneyPrinterTurbo\models下,最终路径应形如.\MoneyPrinterTurbo\models\whisper-large-v3:
MoneyPrinterTurbo
├─models
│ └─whisper-large-v3
│ config.json
│ model.bin
│ preprocessor_config.json
│ tokenizer.json
│ vocabulary.json
[whisper] 配置段(见 config.example.toml)还允许调整运行精度:model_size(推荐 large-v3)、device(CPU 或 cuda)、compute_type(如 int8、float16、int8_float16),分别对应“GPU FP16 / GPU INT8 / CPU INT8”三种部署形态。
七、背景音乐与字幕字体
- 背景音乐:项目内置音乐位于
resource/songs目录(README 提示其中部分音乐来自 YouTube 视频,如有版权问题请删除)。请求参数中bgm_type可为random(随机)或指定文件,bgm_file指定具体音乐,bgm_volume默认0.2; - 字幕字体:渲染字幕所用字体位于
resource/fonts目录,可自行放入新字体;配合font_name、text_fore_color、font_size、stroke_color、stroke_width等参数即可完成字体、颜色、大小与描边控制。
八、常见问题(FAQ)
如何使用免费的 OpenAI GPT-3.5 模型?
有开发者将免费的 GPT-3.5 封装成了 API 直接调用。确保已安装并启动 Docker,执行:
docker run -p 3040:3040 missuo/freegpt35
启动成功后修改 config.toml:
llm_provider设为openai;openai_api_key随便填一个值,例如'123456';openai_base_url改为http://localhost:3040/v1/;openai_model_name改为gpt-3.5-turbo。
RuntimeError: No ffmpeg exe could be found
正常情况下 ffmpeg 会被自动下载并检测。若环境异常导致无法自动下载,会报:
RuntimeError: No ffmpeg exe could be found.
Install ffmpeg on your system, or set the IMAGEIO_FFMPEG_EXE environment variable.
此时可手动下载 ffmpeg 并解压,在 config.toml 中设置 ffmpeg_path 为实际安装路径:
[app]
# 请根据实际路径设置,注意 Windows 路径分隔符为 \\
ffmpeg_path = "C:\\Users\\harry\\Downloads\\ffmpeg.exe"
对应实现:config.py 检测该文件存在后将其写入 IMAGEIO_FFMPEG_EXE 环境变量。
音频生成失败或视频下载失败
典型报错:
failed to generate audio, maybe the network is not available.
if you are in China, please use a VPN.
failed to download videos, maybe the network is not available.
if you are in China, please use a VPN.
两者均源于网络问题导致无法访问国外服务(Edge TTS、Pexels),请通过 VPN 解决;该提示也直接来自 task.py 与 task.py 中的错误日志。
ImageMagick is not installed on your computer
- 按示例配置给出的地址安装静态库版本(如
ImageMagick-7.1.1-30-Q16-x64-static.exe); - 不要安装在含中文的路径,避免不可预期问题;
- Linux 系统可参考社区文档手动安装。
另有一类相关报错:“ImageMagick 的安全策略阻止了与临时文件 @/tmp/tmp*.txt 相关的操作”——需在 ImageMagick 的 policy.xml(通常位于 /etc/ImageMagick-X/ 或安装目录)中找到 pattern="@" 的条目,将 rights="none" 改为 rights="read|write"。Docker 镜像已在 Dockerfile 中预先处理了该策略。
九、许可与致谢
项目遵循 LICENSE 文件声明的开源协议。README 特别说明:本项目基于开源项目 MoneyPrinter 重构而来,做了大量优化与功能增强,感谢原作者的开源精神;同时感谢 RecCloud 平台基于本项目提供的免费“AI 视频生成器”在线服务,方便不愿本地部署的用户直接在线使用。
十、小结
MoneyPrinterTurbo 用一条清晰的六阶段流水线(文案 → 检索词 → 语音 → 字幕 → 素材 → 合成)把“一句话生成短视频”落为工程现实:Docker 一条命令即可完成双服务(WebUI 8501 + API 8080)部署;config.toml 以 TOML 承载十余种 LLM 提供商、双引擎字幕、素材源与路径配置;而 VideoParams 与 task.start() 共同保证了每一项 README 承诺的特性(批量生成、画幅、片段时长、字幕样式、背景音乐音量)都有明确、可调、可验证的实现入口。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00

