适用场景
这套方案适合三类人:想批量做口播类短视频但不想按条付费的运营和内容创作者;手上已经有大模型 API Key、希望把"写文案 → 配音 → 配画面 → 出成片"整条链路放在自己机器上跑的 AI 从业者;以及想把这条流水线接进内部系统、做二次开发的工程同学。
它解决的问题很具体:给一个主题,自动生成一段文案,用 TTS 合成旁白,从素材站拉取匹配的横屏/竖屏视频片段,烧上字幕,最后合成为一个可以直接发布的 mp4。整个流程本地执行,成片在你自己硬盘上,中途每一步都能替换成自己的模型或素材源。
环境与前置条件
- 操作系统:Windows 10/11、macOS、主流 Linux 发行版均可。Windows 上需要注意的坑多一些,下文会单独说明。
- Python:官方 README 会写当前要求的版本(一般是 3.10/3.11 这一个区间),以官方文档当前版本为准。不要图省事用系统自带的老版本 Python,也不要盲目上最新的 Python 大版本,依赖兼容性更容易出问题。
- 包管理:推荐 conda 或 venv 做环境隔离,避免污染全局环境。
- ffmpeg:硬性依赖,必须能被命令行直接调用。
- ImageMagick:Windows 上跑 moviepy 渲染字幕经常需要,建议一并装好。
- 磁盘:预留 10 GB 以上。素材会缓存到项目目录里,跑几十条之后占用会明显增长。
- 内存:8 GB 起步,16 GB 更稳。视频合成阶段是内存和 CPU 密集操作。
- 显卡:非必需。默认链路(云端大模型 + Edge TTS)纯 CPU 就能跑。只有当你想用本地 LLM 或本地语音模型时,才需要关注显存,具体需求以所选模型的官方说明为准。
- 网络:需要能访问大模型接口、TTS 接口和素材站 API。如果网络环境需要代理,提前准备好代理地址,项目配置里通常有对应的代理项。
- 需要提前准备的密钥:一个大模型 API Key;一个素材站 API Key(Pexels 一类,免费额度即可起步);TTS 如果不用免费的 Edge TTS,还需要 Azure 语音等服务的 Key。
分步骤部署
第 1 步:确认 Python 环境
先确认版本和路径,很多后续报错都源于"装到了另一个 Python 上"。
```bash
python --version
which python # Windows 用: where python
```
确认版本落在官方要求区间后,创建独立环境:
```bash
conda create -n mpt python=3.11 -y
conda activate mpt
```
后面的所有命令都要在这个环境里执行。命令行提示符前面出现 (mpt) 就算成功。
第 2 步:获取项目代码
从项目官方页面复制仓库地址,克隆到本地:
```bash
git clone <官方仓库地址> MoneyPrinterTurbo
cd MoneyPrinterTurbo
ls
```
看到 requirements.txt、config.example.toml、webui.py 这类文件,说明代码拿对了。不同版本根目录下的入口脚本名可能略有差异,以官方文档为准。
第 3 步:安装 Python 依赖
```bash
python -m pip install --upgrade pip
pip install -r requirements.txt
```
这一步在装 moviepy、streamlit、edge-tts 等一堆库,耗时取决于网速。成功的标志是最后几行没有 ERROR,并且出现 Successfully installed ...。
如果下载慢,可以临时指定国内镜像源(镜像地址以镜像站官方页面为准):
```bash
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
第 4 步:安装 ffmpeg 与 ImageMagick
按平台选一条:
```bash
macOS
brew install ffmpeg imagemagick
Ubuntu / Debian
sudo apt update && sudo apt install -y ffmpeg imagemagick
用 conda 统一装(三个平台都适用)
conda install -c conda-forge ffmpeg imagemagick -y
```
Windows 用户如果用安装包装 ImageMagick,安装向导里有一个 Install legacy utilities (e.g. convert) 选项,务必勾上,否则 moviepy 会找不到 convert 命令。ffmpeg 解压后要把 bin 目录加进系统 PATH,加完要重开一个终端才生效。
验证:
```bash
ffmpeg -version
convert --version # Windows 上可能是 magick --version
```
能打印出版本信息即可。
第 5 步:生成配置文件
```bash
cp config.example.toml config.toml # Windows: copy config.example.toml config.toml
```
config.toml 是真正生效的配置,config.example.toml 是模板。不要直接改模板文件,因为将来更新代码时模板会被覆盖。
第 6 步:配置大模型
最省事的方式是先启动 WebUI,在设置页里可视化填写 Key 和模型名,保存后会自动写回 config.toml。想直接改文件也可以,配置项大致长这样(字段名以当前版本的 config.example.toml 注释为准):
```toml
llm_provider = "openai" # 兼容 OpenAI 协议的厂商一般都能选这一类
openai_api_key = "sk-你的key"
openai_base_url = "https://你的服务商接口地址/v1"
openai_model_name = "你的模型名"
```
三个要点:base_url 有的厂商要带 /v1、有的不要,填错就是 404;模型名必须和厂商文档里完全一致;如果用 Azure、通义、Gemini、Ollama 等,选对应的 provider 而不是硬套 OpenAI 字段。
填完先做一次连通性测试,把问题挡在生成视频之前:
```bash
curl -sS https://你的接口地址/v1/models \
-H "Authorization: Bearer 你的key" | head
```
能返回一串 JSON 模型列表,说明网络和 Key 都没问题。
第 7 步:配置 TTS
预算为零的话用 Edge TTS,不用申请 Key,中文音色例如:
zh-CN-XiaoxiaoNeural(女声)zh-CN-YunxiNeural(男声)zh-CN-YunjianNeural(男声,偏解说感)
单独测一下 edge-tts 能不能出声:
```bash
python -c "import edge_tts, asyncio; asyncio.run(edge_tts.Communicate('这是一段测试语音','zh-CN-XiaoxiaoNeural').save('t.mp3'))"
```
目录里出现 t.mp3 并且能播放,就说明 TTS 链路通了。如果要用 Azure 语音,则改配 azure_speech_key / azure_speech_region 一类的字段。
第 8 步:配置素材来源
在素材站官网申请一个免费 API Key(地址以官方页面为准),填进 config.toml 对应的 key 字段,多个 key 一般用英文逗号分隔、轮询使用。如果 API 走不通,也可以改用项目支持的本地素材上传方式,具体能力以当前版本为准。
第 9 步:启动 WebUI
```bash
streamlit run webui.py
```
终端出现 You can now view your Streamlit app in your browser 和 http://localhost:8501 即启动成功。浏览器打开这个地址就能看到界面。局域网内其他机器要访问,加参数:
```bash
streamlit run webui.py --server.address 0.0.0.0 --server.port 8501
```
项目同时提供命令行入口(不同版本可能是 main.py 或 cli.py),可以用 python main.py --help 查看可用参数,方便做自动化批处理。
验证部署是否成功
按顺序做三层验证,从轻到重:
```bash
1. 依赖是否齐全
python -c "import moviepy, edge_tts, streamlit; print('deps ok')"
2. 外部工具是否就位
ffmpeg -version | head -n 1
```
两条都正常输出后,在 WebUI 里跑一条"最小可用"任务,参数尽量保守:
- 视频时长:15~30 秒
- 文案:100 字左右
- 分辨率:先用默认或较低档
- 语音:Edge TTS
点击生成后,界面上会出现任务进度。跑完在输出目录(通常是 storage/tasks/<任务 id>/ 下面,以当前版本为准)能看到一个最终的 mp4 文件,能正常播放、有画面有配音有字幕,就算整条流水线跑通了。
常见报错与解决
1. ModuleNotFoundError: No module named 'moviepy'(或 streamlit / edge_tts)
→ 原因:依赖装到了别的 Python 解释器上,或者 conda 环境没激活。
→ 解决:
```bash
conda activate mpt
python -m pip install -r requirements.txt
python -c "import moviepy; print(moviepy.__file__)"
```
输出的路径应该在你当前 conda 环境目录里。
2. ImageMagick is not installed on your computer. 或 convert: command not found
→ 原因:moviepy 渲染文字需要 ImageMagick,系统里没有,或者装的是没有 convert 的新版本。
→ 解决:安装后在 config.toml 里把 imagemagick_path 指向实际安装目录(Windows 下目录名以你的安装结果为准):
```bash
sudo apt install -y imagemagick # macOS 用 brew install imagemagick
convert --version
```
```toml
imagemagick_path = "C:\\Program Files\\ImageMagick"
```
3. ffmpeg: command not found / FileNotFoundError: ffmpeg
→ 原因:没装 ffmpeg,或者装了但不在 PATH 里。
→ 解决:
```bash
conda install -c conda-forge ffmpeg -y
ffmpeg -version
```
Windows 加完 PATH 后要重开终端。
4. 生成文案时报 401 Unauthorized / invalid api key / 模型不存在
→ 原因:Key 错、base_url 少了或多写了 /v1、模型名拼错、账户余额或额度不足。
→ 解决:用 curl 单独打一次接口,把报错定位在模型侧而不是项目侧:
```bash
curl -sS https://你的接口地址/v1/chat/completions \
-H "Authorization: Bearer 你的key" \
-H "Content-Type: application/json" \
-d '{"model":"你的模型名","messages":[{"role":"user","content":"ping"}]}'
```
5. Edge TTS 报 No audio was received 或连接超时
→ 原因:edge-tts 依赖在线语音服务,网络不通或代理没生效。
→ 解决:先用第 7 步那行 python -c 单独测;确认网络后,给项目配置代理项,或者改用 Azure 语音等带 Key 的引擎。
6. 素材下载数量为 0,或提示素材站 API 报错
→ 原因:API Key 未填、超额、被限流,或网络无法访问素材站。
→ 解决:换一个可用 Key;配置代理;或改用本地素材文件上传,绕开外部接口。
7. 字幕显示成方框或者乱码
→ 原因:系统缺少中文字体,或项目中指定的字体名与实际字体文件不匹配。
→ 解决:把中文字体文件(思源黑体一类)放进项目的字体目录,并在配置里把字幕字体名改成该字体的实际名称,重启 WebUI 后再生成。
8. Port 8501 is already in use
→ 原因:端口被占用,可能是上一次的进程没退干净。
→ 解决:
```bash
streamlit run webui.py --server.port 8502
```
后续维护
配置备份:config.toml 里存着你的所有密钥,单独备份一份到安全位置,权限设为仅本人可读。这个文件绝对不要提交进 git 仓库,git status 时确认它在忽略列表里。
升级:更新前先备份 config.toml,然后:
```bash
git pull
pip install -r requirements.txt
```
依赖列表和新配置项都可能变化,升级后对着官方 README 和更新记录核一遍配置字段有没有改名的。如果 git pull 冲突,不要强行覆盖自己的 config.toml。
日志与长期运行:前台跑容易随终端关闭而中断,建议用 tmux 或 systemd 托管,并把输出重定向到文件:
```bash
streamlit run webui.py >> mpt.log 2>&1 &
tail -f mpt.log
```
排错时主要看这几类信息:大模型返回的原始报错、素材下载数量、ffmpeg 的合成报错、以及生成目录里是否留下了中间产物(音频、字幕、切片视频),哪一步的产物缺失,问题就出在哪一步。
磁盘与配额:定期清理 storage 下的历史任务和缓存素材,du -sh storage 看一眼占用。如果用的是付费 API,留意余额和限流,最好在配置里放多个 Key 做轮询。
安全:不要把 8501 端口直接暴露到公网。需要远程访问时,走反向代理并加上鉴权。
