简介:MoneyPrinterV2 是一套面向内容创作者、自媒体运营者与副业探索者的 AI 自动变现工具。它将大模型内容生成、本地语音合成、视频合成和多平台分发推广串联成一条自动化流水线,解决从选题到发布变现链条过长、重复劳动多的问题,目标是帮助用户以较低边际成本建立被动收入来源。资源共 43 个文件,压缩包约 301KB;其中 21 个 Python 源码文件承担核心逻辑,11 个 Markdown 文档覆盖 PostBridge、TwitterBot、AffiliateMarketing、YouTube 等模块说明与部署指南,另有 shell 部署脚本、配置文件样例、字体、许可证和测试文件等,目录结构清晰,适合按部署说明直接上手。已有 45 人学习下载。通过该包可以拿到完整源码、模块化架构实现、基于 Ollama 与 KittenTTS 的本地模型接入方式,以及 Selenium 控制浏览器自动发布的设计思路;资源还附带一键部署与预检工具、相关测试用例,既适合快速复现 AI 内容生产流程,也便于在现有框架上继续扩展。
1. 别把“在线赚钱”当噱头:MoneyPrinterV2 解决的是内容产能问题
如果你做过短视频号,一定有这种体会:瓶颈不是创意,是产出速度。一条60秒的口播视频,写文案一小时、找素材一小时、配音剪辑再一小时,一天拼死做三条。而 MoneyPrinterV2 这类工具的思路是——把“脚本生成、配音、画面素材、字幕、剪辑合成”这条流水线全部交给大模型和自动化脚本,你只需要输入一个主题词,剩下的事情由程序完成。做不到直接替你赚钱,但能把内容生产的边际成本压到接近零,这对内容创作者和副业探索者的意义是:你终于有余力去测试不同赛道、不同选题,而不是把时间耗在重复劳动上。
这个项目用 Python 编写,依赖大模型 API 生成文案、图像/视频素材,再通过剪辑库完成成片输出。标题里的“在线赚钱”建议理解为“通过自动化内容生产间接变现”,别指望装完就跑出一个24小时赚钱机器。下文我会按实际部署顺序展开,从架构选型讲到安装配置、跑通第一条视频、参数调优,最后给你一份能直接照抄的踩坑清单。
2. 架构拆解:内容生成管道的四个核心模块与两台“引擎”
2.1 标题生成与脚本生成:大模型在这里扮演什么角色
MoneyPrinterV2 的第一层是大模型调用层。你输入一个中文或英文的“话题”,程序会先让大模型生成若干个候选标题,再针对选中的标题生成完整的短视频脚本。这里的实现逻辑通常是这样一段 Python 伪代码:
def generate_script(topic: str) -> list[str]: prompt = ( "你是一名短视频编导。请围绕以下主题生成一条60秒短视频的完整脚本。\n" "要求:口语化开头(前3秒抓人),正文有三个论点,结尾有行动号召。\n" f"主题:{topic}\n" "输出格式:只输出脚本正文,不要其他说明。" ) response = call_llm_api(prompt) return parse_script(response)这段代码的关键不在函数本身,而在 prompt 的结构。我实际用下来的经验是:脚本质量直接取决于你对“输出格式”的约束强度。如果你不限定“口语化开头、三个论点、结尾行动号召”这些结构化要求,模型会给你写出一篇论文摘要,根本不适合朗读。另外一个细节是温度参数——生成脚本时 temperature 建议设 0.7 到 0.9,太低会显得机械,太高容易跑题。
2.2 素材获取层:本地素材库、在线图库与视频源的优先级
脚本生成之后,程序要给每一句话配画面。MoneyPrinterV2 的做法是先对脚本做“短句切分”,然后逐句匹配素材。素材来源有三个层级:
- 本地素材库:程序扫描你指定的目录,按文件名关键词匹配句子中的核心词。
- 在线图库(Pexels 等):通过 API 按关键词搜索图片和视频片段。
- 兜底素材:匹配不到时使用默认背景。
这个模块我一般建议改三个参数。第一个是source_priority,默认顺序是本地优先,但如果你本地素材库很空,建议改成在线优先,否则会大量落在兜底素材上。第二个是video_duration_match,每句话对应的视频片段长度尽量控制在句子读音时长加 0.5 秒的缓冲。第三个是素材关键词的提取算法,有些版本直接用 jieba 分词,有些版本允许你传入自定义权重词表,实测自定义词表对“科技类”这种泛词的效果提升最明显。
2.3 配音合成:两种引擎的选型理由与音色参数
配音模块决定了视频的“质感”。MoneyPrinterV2 通常支持两类配音方案:一类是本地 TTS 引擎(如 edge-tts、pyttsx3),免费、延迟低,但音色机械感较强;另一类是云厂商 TTS(Azure、OpenAI TTS),音色自然,但要付费且需要额外 API 密钥。
这里有一个容易被忽略的点——字幕时间轴。你的配音合成后,程序需要知道每一句话在音频里的起始时间,才能精确压制字幕。本地 TTS 引擎一般能拿到逐句时间戳,云 TTS 则要看 API 是否返回时间边界。如果拿不到,程序只能按字数估一个时间轴,结果就是字幕和声音错位,观感很糟。所以部署时我建议优先选能返回时间戳的方案,哪怕音色略差,也别在早期阶段追求高级音色而牺牲字幕同步。
# 一个简化的配音与字幕时间轴生成流程 audio_segments = [] subtitle_lines = [] for sentence in script_sentences: response = tts_synthesize(sentence) audio_segments.append(response.audio) start = response.start_time # 保证 TTS 引擎支持时间戳返回 end = response.end_time subtitle_lines.append(SubtitleItem(start, end, sentence)) merged_audio = concat_audio(audio_segments) save_with_subtitles(merged_audio, subtitle_lines) # 输出 mp4 + srt这个流程里的关键参数是max_sentence_length。中文按标点切句时,如果一句话超过 25 个字,TTS 合成时长会明显变长,视频节奏拖慢;少于 8 个字又会导致字幕闪得太快。我一般在脚本预处理阶段做一次强制断句,超长的用逗号拆开,过短的与上一句合并。
2.4 视频合成:拼接逻辑与字幕烧录的边界问题
最后一个模块是把配音、图片/视频片段、字幕合成为 MP4。这块用到的核心库是 moviepy 或 ffmpeg。合成的复杂度集中在两处:一是图片类素材要加“克南”效果(Ken Burns,慢速缩放平移),否则静态画面配动态配音会显得死板;二是字幕烧录,中文字体文件的指定路径,以及文字大小、描边宽度的参数调整。
# 使用 ffmpeg 将字幕烧录进视频的常见命令 ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontName=SimHei,FontSize=12,Outline=2'" \ -c:v libx264 -crf 20 -preset medium -c:a aac -b:a 128k output.mp4这里要说明的是FontName=SimHei在 Linux 服务器上经常失效,因为系统没装中文字体。你需要在部署机上执行fc-list | grep -i simhei确认字体存在,否则字幕会显示为一排方框。这条命令里的crf 20是质量参数,值越小画质越高、文件越大,短视频平台建议 20 到 23 之间。“preset medium”是编码速度预设,不影响画质,只影响转换耗时。
2.5 并发与队列:为什么它能“全自动”却不能“多任务乱跑”
MoneyPrinterV2 的自动化体现在你能批量提交任务。常见的实现是维护一个任务队列——你可以在 Web 界面一次输入五个主题,程序逐个跑完。但这里有个性能边界:大模型 API、素材下载、视频编码都是耗时操作,如果你的部署机器只有 2 核 4G,同时跑两条任务就会把 CPU 打满,视频编码速度会从 1 分钟降到 10 分钟,甚至内存溢出进程被杀。
所以我的建议是:先摸清单条任务的资源占用,再决定并发数。具体做法是用htop观察跑视频合成时的 CPU 和内存峰值,然后用“内存总量除以单任务峰值”粗略估算并发上限。多数 VPS 上,单任务合成 60 秒视频大约需要 2G 内存,4G 内存机器跑 2 条已经是极限了。
3. 安装与部署:从 Python 环境到 API 密钥,全步骤复现
3.1 部署前的环境准备:Python 版本、pip 镜像与虚拟环境
这个项目是典型的 Python 应用,依赖一堆第三方库。先明确环境要求:建议 Python 3.10 以上,Python 3.8 有一些老库的兼容性问题。如果你在 Windows 上部署,注意别用系统自带的 PowerShell 直接跑服务,建议用 Anaconda 或 pyenv 管理 Python 版本。Linux 服务器上则先用以下命令准备基础环境:
# Ubuntu/Debian 系安装基础依赖 sudo apt update sudo apt install -y python3-venv python3-pip ffmpeg git python3 -m venv venv source venv/bin/activateffmpeg 是必须的。项目里的视频合成命令直接调系统 ffmpeg,不是 Python 库能替代的。安装完以后执行ffmpeg -version确认版本不低于 4.4,老版本在处理特殊字幕样式时会报错。Python 虚拟环境这一步千万别跳,后面装 opencv、moviepy 这类库时,依赖冲突会让你想砸电脑,虚拟环境是唯一的后悔药。
3.2 拉取源码与依赖安装:国内网络环境的处理方式
git clone <项目仓库地址> MoneyPrinterV2 cd MoneyPrinterV2 pip install -r requirements.txt这一步可能遇到的问题很有代表性:直接pip install在大模型相关依赖上经常卡住,尤其是 torch 和 moviepy。如果装到一半报网络超时,先换 pip 源再装一次:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txttorch 这个包比较大,建议单独装。你要先查项目要求的 torch 版本(写在 requirements.txt 里),然后到 pytorch.org 官方渠道按 CUDA 版本选命令。单说部署的话,纯 CPU 机器也能跑,但视频合成速度会慢 3 到 5 倍。如果只是测试功能,CPU 版本够用;如果打算批量生产内容,建议租个带 GPU 的云服务器,哪怕是最小的 T4 都行。
装完依赖后,验证一下关键库是否可用:
python -c "import moviepy, cv2, torch; print('OK')"如果 import 报错,八成是库版本冲突。常见的是 opencv 的 libGL.so.1 缺失,这个在 Ubuntu 服务器上很常见,解决方法是sudo apt install -y libgl1。
3.3 配置文件详解:API 密钥、素材目录、模型名称的填写逻辑
项目的配置通常是一个.env文件或config.toml。我把最核心的几项列出来,以.env为例:
# .env 文件核心配置 LLM_API_KEY=sk-xxxxxxxxxxxx LLM_MODEL_NAME=你的模型名称 LLM_BASE_URL=https://api.xxx.com/v1 PEXELS_API_KEY=xxxxx TTS_ENGINE=edge-tts TTS_VOICE=zh-CN-XiaoxiaoNeural LOCAL_VIDEO_DIR=./assets/videos IMAGE_SOURCE=pexels VIDEO_SOURCE=pexels这里面最需要留意的是LLM_BASE_URL。很多兼容 OpenAI 协议的国内服务商(比如 DeepSeek、智谱等)都要求填自己的基础地址,否则请求会默认走到 OpenAI 官方地址,直接超时。你以为代码写错了,其实是地址没改。PEXELS_API_KEY是全球图库的 API 密钥,不填的话素材会全部落到本地目录,本地没素材就黑屏。TTS 的 voice 参数我建议先用zh-CN-XiaoxiaoNeural,这是比较稳妥的女声,换了别的声音有的版本会出现个别字发音异常。
3.4 启动 Web 服务:两种模式分别怎么跑
MoneyPrinterV2 通常提供两种运行方式:命令行单次生成和 Web 服务批量操作。命令行模式适合调试,Web 模式适合日常使用。先启动 Web 服务:
python app.py --port 8088访问http://localhost:8088就能看到一个网页界面。页面里一般有三个必填项:主题词、视频时长、比例(横屏/竖屏)。如果你在远程服务器上部署,记得在配置里关掉调试模式,或者用--host 0.0.0.0启动,否则只能本机访问。
命令行模式的长这样:
python main.py --topic "人工智能如何改变教育行业" --duration 60 --format vertical跑通后,在输出目录会看到 mp4 文件、同名 srt 字幕文件和一堆临时素材。这里我第一次跑的时候犯过一个错:以为任务跑完就结束了,但程序其实还有一个上传/发布模块可选,可以把视频推送到某些内容平台,需要在配置里额外填写平台 API 密钥。没有密钥的话,这一步会静默跳过,不会报错。
4. 从零跑通第一条视频:配置校验、文本生成到成片输出的完整链路
4.1 启动前自检:三分钟确认配置没有坑
在跑第一条任务之前,先做一次快速的配置自检。我把步骤写成一个 bash 脚本片段,你可以直接粘贴执行:
# 1. 检查 ffmpeg ffmpeg -version | head -n 1 # 2. 检查字体 fc-list :lang=zh | head -n 3 # 3. 检查网络连通性(将下面地址换成你配置的 LLM_BASE_URL) curl -I --max-time 5 https://api.你的服务商.com # 4. 检查素材目录是否存在且有写入权限 ls -ld ./assets/videos这四条里,第二条最容易被忽略。很多人视频生成出来字幕全是方框,就是因为系统缺少中文字体。如果你fc-list输出为空,执行sudo apt install -y fonts-wqy-microhei fonts-wqy-zenhei安装文泉驿字体,然后在视频合成参数里把字体名改成WenQuanYiMicroHei。
网络连通性这条也别省。大模型 API 的连通性波动会影响生成质量,如果你配置的是海外服务商,测试时延迟很高,建议换国内兼容 OpenAI 协议的服务。注意别用任何代理工具,纯粹从代码层面解决。
4.2 第一条视频的推荐参数:新手最不容易翻车的组合
我用过一段时间后总结了一套“保底参数”,适用于绝大多数主题:
- 主题词:选词具体一点,比如不要写“科技”,写成“国产大模型 2025 年应用落地”
- 时长:60 秒
- 比例:竖屏 9:16(短视频平台主推格式)
- 脚本生成温度:0.8
- 每句最长字数:20 字
- 素材来源:在线优先,本地兜底
- 字幕字体:WenQuanYiMicroHei
- 输出分辨率:1080x1920
这里有几个参数你可能在界面上找不到——比如“每句最长字数”,它可能在脚本预处理模块里,需要手动改代码。别慌,搜索代码里的max_sentence_length,把它从默认值改小即可。为什么要改这个参数?因为大模型生成的脚本里经常有一句 50 字的长句,配音会读成一整段,画面素材却只有一张图,观感就是“一张图配了一长段解说”,很尴尬。
4.3 从主题到成片:分步执行与日志关键词解读
配置好以后,提交第一条任务。观察终端日志,你会看到类似这样几个阶段:
[1/6] Generating titles... OK [2/6] Selecting title... OK [3/6] Generating script... OK [4/6] Fetching audio resources... OK [5/6] Fetching video resources... OK [6/6] Composing video... OK Output saved to /output/xxx.mp4每个阶段对应的日志关键词值得留意。第 4 步如果卡很久或者大量输出“retry”,说明 TTS 服务不稳定或限流,最简单的处理是换一个 TTS 引擎重新跑。第 5 步如果大量输出“fallback to local”,说明在线素材 API 的密钥过期或配额用完,去 API 管理面板看一下。最后一步如果提示编码错误,十有八九是输出目录空间不足,df -h确认。
正常一条 60 秒视频,在普通 4 核机器上大约耗时 2 到 4 分钟。如果超过 10 分钟还没结束,别傻等,直接 Ctrl+C 杀掉进程,查一下是不是视频素材下载卡住了——某些在线图库在特定时间段访问极慢。
4.4 批量生成的正确姿势:队列操作与限流策略
跑通第一条以后,你会想批量生成。这里我建议采用“3 + 1”策略:一次提交 3 条不同主题的任务队列,同时保持 1 条人工审核的余量。原因很实际——批量输出里总有 20% 左右的内容有明显的逻辑硬伤,比如大模型把话题写偏、素材匹配错乱,如果完全没人审核就发布,很伤账号标签。
批量操作时还要注意 API 的限流(rate limit)。免费额度通常按分钟或按天计数,批量跑的时候很容易触发限制,表现为脚本阶段大量重试。处理方式是在代码里加一个简单的 sleep 间隔:
import time # 在循环生成脚本的任务之间,强制休眠 1 秒,避免触发限流 for topic in topic_list: generate_video_task(topic) time.sleep(1)多少台机器跑多少个任务,没有标准答案。但一个口碑比较好的经验是:单账号单机,每分钟最多提交 2 条任务,也就是间隔 30 秒以上。跑小批量时不必改代码,Web 界面的任务队列本身就带间隔设置。
5. 避坑指南:MoneyPrinterV2 部署与使用中的 5 个高频翻车点
5.1 字幕出方框而不是汉字
现象:成片里字幕位置显示一排 “口口口” 或根本无字。原因:系统缺少中文字体文件,或者代码里指定的字体名不对。解决:安装文泉驿字体后,把视频合成代码里的字体名改成系统里实际存在的名称,再用fc-list | grep WenQuanYi验证。需要确认的是——字体的“内部名称”和“文件名”未必一致,建议直接在代码里写fonts/wqy-microhei.ttc这样的文件路径,跳过字体名解析环节。
5.2 视频合成速度比大模型生成还慢
现象:日志停在 6/6 很久,CPU 100%,内存吃满。原因:moviepy 或者 ffmpeg 在做高分辨率编码,竖屏 1080x1920 比横屏 1920x1080 慢很多,因为像素数量更多。解决:我一般把渲染分辨率降到 720x1280,短视频平台会自动优化码率,肉眼很难看出区别。如果坚持 1080p,可以关掉视频软件里的“硬件加速”开关,这个开关在有独立显卡的机器上反而会让 ffmpeg 锁在 x264 软件编码。
5.3 大模型生成的脚本文风统一,像个机器人写的
现象:十条标题全是“震惊”“揭秘”“竟然后缀”,正文充满“首先、其次、最后”。原因:prompt 里没做多样性约束,同一个系统默认 prompt 把所有风格锁死了。解决:在脚本生成函数中增加一个“风格”字段,把风格:日常口语/硬核知识/情感叙事作为参数传入。如果项目不支持这个参数,就在 topic 前面手动加风格前缀,例如“请用街头采访的语气,聊一聊……”
5.4 素材匹配永远错位:说“苹果”配了一张手机图片
现象:脚本提到苹果公司,画面却配了一个红苹果。原因:素材关键词提取用的是通用分词,没有行业语境判断。解决:改造素材关键词模块,加入“领域词典替换”。具体做法是把脚本中的词先映射成语义向量,再计算与素材标签的相似度。“苹果(公司)”映射到 手机、科技、发布会;普通“苹果”映射到水果。实现上可以用 sentence_transformers 加载一个小型中文模型,但会增加 200MB 内存占用,低配机器谨慎使用。
5.5 部署成功但视频里没有声音
现象:mp4 能播放,画面正常,但没有声轨。原因:TTS 合成失败后代码静默跳过,或者音频格式与视频容器不兼容。解决:先检查输出目录有没有生成临时音频文件,如果没有,单独调 TTS 接口测试。如果音频文件存在,用下面的命令检查容器:
ffprobe output.mp4 # 关注 Audio 行,没有 Audio 表示声轨缺失确认是容器问题后,把音频转成统一的 AAC 格式再合成:
ffmpeg -i input_audio.wav -c:a aac -b:a 160k merged_audio.m4a加了这条常规处理逻辑后,声音也就稳定了。
6. 让 MoneyPrinterV2 的质量上台阶:内容模板、交叉验证与账号节奏
先说一个容易被忽略的事实:这类工具生成的内容,同质化非常严重。同一个模型、同一套 prompt、同样的素材源,一百个人跑出来,前 5 秒叫嚣话术都差不多。想让它真正可用,你要做的是给它建“差异化外壳”。我最常用的做法是配置三套不同的脚本模板并随机轮换:新闻评述类(“跟你聊个刚发生的事……”)、知识清单类(“本期讲三个你不知道的细节……”)、亲测体验类(“我花了一周测了五个工具,结果……”)。这些模板不是改 prompt 风格,而是直接改变脚本开头句子结构和素材节奏,观众观感差异极大。
其次,一定要建立素材的“回流验证”。很多重复词和素材错位问题,并不是当前版本能修复的,但你可以让系统把每次生成的“主题词 + 脚本 + 素材关键词”记录下来,每周人工抽查 10 条,聚类出哪些词最容易匹配失败,然后手动补充到自定义词典里。这个行为比调任何参数都有效——相当于你在帮大模型做在线学习。
另外一个质量方法是做“双模型交叉验证”。如果你有两条不同的 API 渠道,可以设置一个选项:先用模型 A 生成脚本,再用模型 B 检查脚本里有没有事实性错误和敏感词。别小看这一步,它能把视频内容踩线的概率降低七成以上,对想在公域平台发布的创作者尤其重要。代码实现也不复杂,多写一个validate_script()的函数,把输出的概率映射为 pass/warn/reject 三档即可。
最后聊一下发布节奏。批量工具容易让人产生“一次性创作 20 条然后慢慢发”的想法,这个策略我会劝你放弃。平台评论区对账号权重的影响很大,基于大模型生成的内容通常互动率偏低。我的做法是每天发 1 到 2 条,并且每一条都由真人改一下标题和首句——只花 2 分钟,但能显著降低“一眼假”的风险。
经历这么多轮部署之后,我最大的教训是:自动化工具最大的价值不是“替你思考”,而是“把批量生产的执行成本压缩到接近零”,好让你把精力花在真正有复利的地方——选题方向判断和内容差异化。这大概也是 MoneyPrinterV2 这类项目最值得你投入的理由,希望帮到你。
本文还有配套的精品资源,点击获取