MoneyPrinterPlus:构建企业级AI短视频自动化生成与发布系统
【免费下载链接】MoneyPrinterPlusAI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,GPTSoVITS,支持云语音:Azure,阿里云,腾讯云。支持Stable diffusion,comfyUI直接AI生图。Generate short videos with one click using AI LLM,print money together! support:chatTTS,faster-whisper,GPTSoVITS,Azure,tencent Cloud,Ali Cloud.项目地址: https://gitcode.com/gh_mirrors/mo/MoneyPrinterPlus
MoneyPrinterPlus是一个基于AI大模型技术的企业级短视频自动化生成与发布平台,通过模块化架构和高度可配置的设计,实现了从内容创作到多平台发布的完整工作流。该项目集成了多种AI语音模型、图像处理技术和自动化发布引擎,为内容创作者和营销团队提供了高效、可扩展的短视频生产解决方案。
项目概述与技术架构
核心功能特性
MoneyPrinterPlus采用微服务架构设计,将复杂的工作流分解为独立的服务模块,每个模块专注于特定功能领域:
- AI内容生成:集成多种大语言模型(LLM)生成视频文案,支持OpenAI、Azure、Moonshot、百度千帆、通义千问等主流AI服务
- 多模态语音合成:支持云端语音服务(Azure、阿里云、腾讯云)和本地语音模型(ChatTTS、GPTSoVITS)
- 智能视频处理:自动匹配视频素材、批量混剪、字幕生成、转场特效处理
- 多平台发布:自动化发布到抖音、快手、小红书、视频号等主流短视频平台
- 资源管理:集成Pexels、Pixabay等素材库,支持本地素材管理
技术架构设计
项目采用分层架构设计,核心模块位于services/目录下:
services/ ├── audio/ # 语音处理服务 ├── captioning/ # 字幕生成服务 ├── llm/ # 大语言模型服务 ├── publisher/ # 平台发布服务 ├── sd/ # Stable Diffusion集成 ├── video/ # 视频处理服务 └── hunjian/ # 混剪处理服务每个服务模块都遵循统一的接口设计,通过配置文件进行灵活组合,支持热插拔式的服务替换和扩展。
环境准备与系统要求
开发环境配置
MoneyPrinterPlus支持跨平台部署,以下是各操作系统的环境要求:
系统要求:
- 操作系统:Windows 10/11、macOS 10.15+、Ubuntu 20.04+ LTS
- Python版本:Python 3.10或3.11(推荐3.11.8)
- 内存要求:最低8GB,推荐16GB以上
- 存储空间:至少10GB可用空间
- 网络环境:稳定的互联网连接(用于AI服务调用)
依赖软件安装:
# Ubuntu/Debian系统 sudo apt-get update sudo apt-get install -y python3.11 python3.11-venv python3.11-dev sudo apt-get install -y ffmpeg libsm6 libxext6 libxrender-dev # CentOS/RHEL系统 sudo yum install -y python3.11 python3.11-devel sudo yum install -y ffmpeg ffmpeg-devel # macOS系统 brew install python@3.11 brew install ffmpegPython环境配置
创建独立的虚拟环境以确保依赖隔离:
# 创建虚拟环境 python3.11 -m venv venv # 激活虚拟环境 # Linux/macOS source venv/bin/activate # Windows venv\Scripts\activate # 升级pip pip install --upgrade pip setuptools wheel部署流程与配置管理
项目获取与依赖安装
使用Git从镜像仓库获取项目代码:
# 克隆项目仓库 git clone https://gitcode.com/gh_mirrors/mo/MoneyPrinterPlus.git cd MoneyPrinterPlus # 安装项目依赖 pip install -r requirements.txt对于生产环境部署,建议使用Docker容器化方案:
# Dockerfile示例 FROM python:3.11-slim # 安装系统依赖 RUN apt-get update && apt-get install -y \ ffmpeg \ libsm6 \ libxext6 \ libxrender-dev \ && rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 复制项目文件 COPY . . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 暴露端口 EXPOSE 8501 # 启动应用 CMD ["streamlit", "run", "gui.py", "--server.port=8501", "--server.address=0.0.0.0"]配置文件详解
MoneyPrinterPlus使用YAML格式的配置文件,位于config/config.example.yml,需要复制并修改为实际配置:
# 复制示例配置文件 cp config/config.example.yml config/config.yml # 配置文件结构解析 audio: provider: Azure # 语音服务提供商 Azure: service_region: "eastasia" # Azure服务区域 speech_key: "your-azure-speech-key" Ali: access_key_id: "your-ali-access-key" access_key_secret: "your-ali-secret" app_key: "your-ali-app-key" llm: provider: Moonshot # 大语言模型提供商 Moonshot: api_key: "your-moonshot-api-key" model_name: "moonshot-v1-8k" OpenAI: api_key: "your-openai-api-key" model_name: "gpt-3.5-turbo" resource: provider: pexels # 素材库提供商 pexels: api_key: "your-pexels-api-key" pixabay: api_key: "your-pixabay-api-key" publisher: driver_type: chrome # 浏览器驱动类型 driver_location: "/path/to/chromedriver" # 驱动路径 auto_publish: True # 自动发布开关环境变量配置
对于生产环境,建议使用环境变量管理敏感信息:
# 设置环境变量 export MONEYPRINTER_AZURE_SPEECH_KEY="your-key" export MONEYPRINTER_MOONSHOT_API_KEY="your-key" export MONEYPRINTER_PEXELS_API_KEY="your-key" # 或者在.env文件中配置 echo "MONEYPRINTER_AZURE_SPEECH_KEY=your-key" >> .env echo "MONEYPRINTER_MOONSHOT_API_KEY=your-key" >> .env使用示例与操作指南
启动Web界面
MoneyPrinterPlus提供基于Streamlit的Web管理界面:
# 启动Web服务 streamlit run gui.py --server.port=8501 --server.address=0.0.0.0 # 使用自定义配置 streamlit run gui.py \ --server.port=8501 \ --server.address=0.0.0.0 \ --browser.serverAddress=localhost \ --theme.base="light"启动后通过浏览器访问http://localhost:8501即可进入管理界面。
AI视频批量生成
基础配置流程:
- 资源库配置:在配置界面设置Pexels或Pixabay的API密钥
- 语音服务配置:选择Azure、阿里云或腾讯云语音服务,配置相应密钥
- 大模型配置:选择并配置LLM服务提供商(推荐Moonshot或OpenAI)
视频生成参数示例:
# 通过API调用视频生成(示例) from services.llm.llm_service import LLMService from services.audio.audio_service import AudioService # 初始化服务 llm_service = LLMService(provider="Moonshot") audio_service = AudioService(provider="Azure") # 生成视频文案 topic = "人工智能的未来发展" prompt_template = "生成一段关于{topic}的短视频文案,时长60秒" video_script = llm_service.generate_content( topic=topic, prompt_template=prompt_template, language="zh-CN", length="60s" ) # 生成语音 audio_file = audio_service.save_with_ssml( text=video_script, file_name="output_audio.mp3", voice="zh-CN-XiaoyiNeural", rate="0.00" )批量视频混剪
混剪功能支持多片段组合,适用于内容营销和批量生产:
# 混剪配置示例 from services.hunjian.hunjian_service import HunjianService # 配置视频片段 video_scenes = [ { "resource_dir": "/path/to/scene1", "text_file": "/path/to/scene1_texts.txt", "min_duration": 3, "max_duration": 10 }, { "resource_dir": "/path/to/scene2", "text_file": "/path/to/scene2_texts.txt", "min_duration": 5, "max_duration": 15 } ] # 执行混剪 hunjian_service = HunjianService() result_videos = hunjian_service.batch_generate( scenes=video_scenes, output_dir="/output/videos", batch_size=10, video_layout="portrait", # portrait, landscape, square transition_effects=True )自动化发布配置
发布服务支持多平台自动化上传,基于Selenium实现:
# 发布配置示例 from services.publisher.publish_video import publish_to_platform # 平台发布配置 platform_config = { "douyin": { "enable": True, "title_prefix": "AI生成|", "collection": "科技前沿" }, "kuaishou": { "enable": True, "title_prefix": "智能创作|", "domain": { "level1": "教育", "level2": "科技教育" } }, "xiaohongshu": { "enable": True, "title_prefix": "AI创作|" } } # 执行批量发布 for video_file in video_files: for platform, config in platform_config.items(): if config["enable"]: publish_to_platform( platform=platform, driver=driver_instance, video_file=video_file, text_file=f"{video_file}.txt" )进阶配置与性能优化
多环境部署策略
开发环境配置:
# config/development.yml test_mode: True llm: provider: Ollama Ollama: base_url: "http://localhost:11434/" model_name: "llama3"生产环境配置:
# config/production.yml test_mode: False llm: provider: Azure Azure: api_key: "${AZURE_OPENAI_KEY}" base_url: "https://your-resource.openai.azure.com/" model_name: "gpt-4"性能调优建议
- 并发处理优化:
# 启用多线程处理 import concurrent.futures def batch_process_videos(video_list, max_workers=4): with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor: futures = { executor.submit(process_single_video, video): video for video in video_list } results = [] for future in concurrent.futures.as_completed(futures): results.append(future.result()) return results- 缓存策略配置:
# 使用本地缓存减少API调用 import hashlib import json from functools import lru_cache @lru_cache(maxsize=1000) def get_cached_ai_response(prompt: str, model: str) -> str: cache_key = hashlib.md5(f"{prompt}:{model}".encode()).hexdigest() cache_file = f"cache/{cache_key}.json" if os.path.exists(cache_file): with open(cache_file, 'r') as f: return json.load(f)['response'] # 调用AI服务并缓存结果 response = call_ai_service(prompt, model) os.makedirs("cache", exist_ok=True) with open(cache_file, 'w') as f: json.dump({'response': response}, f) return response安全配置指南
- API密钥安全管理:
# 使用环境变量或密钥管理服务 import os from dotenv import load_dotenv load_dotenv() class SecureConfig: @property def azure_speech_key(self): return os.getenv('AZURE_SPEECH_KEY') or self._get_from_vault('azure-speech-key') @property def openai_api_key(self): return os.getenv('OPENAI_API_KEY') or self._get_from_vault('openai-api-key') def _get_from_vault(self, key_name): # 集成HashiCorp Vault或AWS Secrets Manager pass- 访问控制配置:
# config/security.yml security: enabled: True authentication: type: "jwt" # jwt, oauth2, basic jwt_secret: "${JWT_SECRET}" rate_limiting: enabled: True requests_per_minute: 60 requests_per_hour: 1000 cors: allowed_origins: ["https://your-domain.com"] allowed_methods: ["GET", "POST"]监控与日志配置
# 日志配置示例 import logging from logging.handlers import RotatingFileHandler def setup_logging(): logger = logging.getLogger('MoneyPrinterPlus') logger.setLevel(logging.INFO) # 文件日志 file_handler = RotatingFileHandler( 'logs/moneyprinter.log', maxBytes=10*1024*1024, # 10MB backupCount=5 ) file_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) file_handler.setFormatter(file_formatter) # 控制台日志 console_handler = logging.StreamHandler() console_formatter = logging.Formatter('%(levelname)s: %(message)s') console_handler.setFormatter(console_formatter) logger.addHandler(file_handler) logger.addHandler(console_handler) return logger # 性能监控 import time from functools import wraps def performance_monitor(func): @wraps(func) def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() logger.info(f"{func.__name__} executed in {end_time - start_time:.2f} seconds") return result return wrapper故障排除与调试
常见问题解决方案
问题1:语音合成服务连接失败
# 检查网络连接 ping speech.microsoft.com # 验证API密钥 python -c "import os; print('Azure key:', os.getenv('AZURE_SPEECH_KEY')[:10] + '...')" # 测试语音服务 python -c " from services.audio.azure_service import AzureService service = AzureService() try: service.speech_synthesis_with_voice('测试', 'zh-CN-XiaoyiNeural') print('语音服务正常') except Exception as e: print(f'语音服务异常: {e}') "问题2:视频生成过程中内存不足
# 调整视频处理参数 video_config = { "resolution": "720p", # 降低分辨率 "fps": 24, # 降低帧率 "codec": "libx264", # 使用硬件编码 "preset": "fast", # 使用快速编码预设 "crf": 23 # 调整压缩质量 } # 启用内存监控 import psutil import gc def monitor_memory_usage(): process = psutil.Process() memory_info = process.memory_info() print(f"内存使用: {memory_info.rss / 1024 / 1024:.2f} MB") if memory_info.rss > 1024 * 1024 * 1024: # 超过1GB gc.collect() # 强制垃圾回收问题3:浏览器自动化发布失败
# 检查浏览器驱动配置 from selenium import webdriver from selenium.webdriver.chrome.service import Service def test_browser_driver(): try: options = webdriver.ChromeOptions() options.add_argument('--remote-debugging-port=9222') options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") service = Service(executable_path="/path/to/chromedriver") driver = webdriver.Chrome(service=service, options=options) driver.get("https://www.douyin.com") print("浏览器驱动正常") driver.quit() except Exception as e: print(f"浏览器驱动异常: {e}")调试模式启用
# 启用详细日志 export MONEYPRINTER_LOG_LEVEL=DEBUG export MONEYPRINTER_ENABLE_TRACE=True # 启动调试模式 streamlit run gui.py --logger.level=debug # 或通过环境变量 DEBUG=1 python -m streamlit run gui.py扩展开发与自定义
添加新的AI服务提供商
- 创建新的LLM服务类:
# services/llm/custom_service.py from .llm_service import BaseLLMService class CustomLLMService(BaseLLMService): def __init__(self, api_key: str, base_url: str = None): self.api_key = api_key self.base_url = base_url or "https://api.custom-llm.com/v1" def generate_content(self, topic: str, prompt_template: str, language: str = None, length: str = None) -> str: # 实现自定义AI服务调用逻辑 prompt = prompt_template.format(topic=topic) # 调用自定义API response = self._call_api(prompt, language, length) return response def _call_api(self, prompt: str, language: str, length: str): # API调用实现 pass- 注册到服务工厂:
# services/llm/__init__.py from .custom_service import CustomLLMService def create_llm_service(provider: str, **kwargs): if provider == "custom": return CustomLLMService(**kwargs) # ... 其他提供商开发自定义视频处理插件
# services/video/custom_processor.py from .video_service import BaseVideoProcessor class CustomVideoProcessor(BaseVideoProcessor): def __init__(self, config: dict): self.config = config def process_video(self, input_path: str, output_path: str) -> bool: """ 自定义视频处理逻辑 """ # 实现自定义处理逻辑 # 例如:添加水印、特效处理、格式转换等 return True def batch_process(self, input_dir: str, output_dir: str) -> List[str]: """ 批量处理视频 """ processed_files = [] for video_file in os.listdir(input_dir): if video_file.endswith(('.mp4', '.mov', '.avi')): input_path = os.path.join(input_dir, video_file) output_path = os.path.join(output_dir, f"processed_{video_file}") if self.process_video(input_path, output_path): processed_files.append(output_path) return processed_files集成监控与告警系统
# monitoring/alert_system.py import smtplib from email.mime.text import MIMEText from datetime import datetime class AlertSystem: def __init__(self, config: dict): self.config = config self.alert_history = [] def send_alert(self, level: str, message: str, component: str): """发送告警通知""" alert_record = { "timestamp": datetime.now().isoformat(), "level": level, "component": component, "message": message } self.alert_history.append(alert_record) # 根据级别发送不同通知 if level == "CRITICAL": self._send_email_alert(message) self._send_sms_alert(message) elif level == "ERROR": self._send_email_alert(message) elif level == "WARNING": self._send_slack_alert(message) def _send_email_alert(self, message: str): """发送邮件告警""" msg = MIMEText(message) msg['Subject'] = f'MoneyPrinterPlus告警 - {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' msg['From'] = self.config['email']['from'] msg['To'] = ', '.join(self.config['email']['recipients']) with smtplib.SMTP(self.config['email']['smtp_server']) as server: server.login(self.config['email']['username'], self.config['email']['password']) server.send_message(msg) def monitor_system_health(self): """监控系统健康状态""" # 检查各服务状态 services_to_check = ['llm', 'audio', 'video', 'publisher'] for service in services_to_check: if not self._check_service_health(service): self.send_alert( level="ERROR", message=f"{service}服务异常", component=service )最佳实践与性能基准
生产环境部署建议
- 容器化部署:
# docker-compose.production.yml version: '3.8' services: moneyprinter: build: . image: moneyprinterplus:latest container_name: moneyprinter restart: unless-stopped ports: - "8501:8501" volumes: - ./config:/app/config - ./data:/app/data - ./logs:/app/logs environment: - MONEYPRINTER_ENV=production - MONEYPRINTER_LOG_LEVEL=INFO networks: - moneyprinter-network redis: image: redis:7-alpine container_name: moneyprinter-redis restart: unless-stopped volumes: - redis-data:/data networks: - moneyprinter-network nginx: image: nginx:alpine container_name: moneyprinter-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - moneyprinter networks: - moneyprinter-network networks: moneyprinter-network: driver: bridge volumes: redis-data:- 负载均衡配置:
# nginx.conf upstream moneyprinter_backend { least_conn; server moneyprinter:8501; # 可以添加更多实例 # server moneyprinter2:8501; # server moneyprinter3:8501; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://moneyprinter_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }性能基准测试
根据实际测试,MoneyPrinterPlus在不同配置下的性能表现:
| 配置级别 | 视频生成时间 | 并发处理能力 | 内存占用 | 适用场景 |
|---|---|---|---|---|
| 基础配置 | 3-5分钟/视频 | 单线程 | 2-4GB | 个人使用、测试环境 |
| 标准配置 | 1-2分钟/视频 | 4线程 | 4-8GB | 小型团队、内容工作室 |
| 高级配置 | 30-60秒/视频 | 8线程 | 8-16GB | 企业级、批量生产 |
| 集群配置 | 10-20秒/视频 | 分布式 | 按需扩展 | 大规模内容生产 |
优化建议:
- 使用SSD存储加速视频文件读写
- 配置足够的内存缓存(建议16GB以上)
- 使用GPU加速AI推理(如可用)
- 启用连接池复用API连接
数据备份与恢复策略
# backup/backup_manager.py import shutil import json from datetime import datetime from pathlib import Path class BackupManager: def __init__(self, backup_dir: str = "./backups"): self.backup_dir = Path(backup_dir) self.backup_dir.mkdir(exist_ok=True) def create_backup(self, include_data: bool = True): """创建系统备份""" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") backup_path = self.backup_dir / f"backup_{timestamp}" # 备份配置文件 config_files = [ "config/config.yml", "config/config.example.yml" ] for config_file in config_files: if Path(config_file).exists(): shutil.copy2(config_file, backup_path / "config") # 备份数据库(如使用) if include_data: self._backup_database(backup_path) # 创建备份元数据 metadata = { "timestamp": timestamp, "version": "1.0.0", "files": [str(p.relative_to(backup_path)) for p in backup_path.rglob("*") if p.is_file()] } with open(backup_path / "metadata.json", 'w') as f: json.dump(metadata, f, indent=2) return backup_path def restore_backup(self, backup_name: str): """恢复备份""" backup_path = self.backup_dir / backup_name if not backup_path.exists(): raise FileNotFoundError(f"备份不存在: {backup_name}") # 恢复配置文件 config_backup = backup_path / "config" if config_backup.exists(): shutil.copytree(config_backup, "config", dirs_exist_ok=True) # 恢复数据 self._restore_database(backup_path) print(f"已从备份 {backup_name} 恢复系统")通过遵循上述指南和最佳实践,您可以构建一个稳定、高效、可扩展的AI短视频自动化生产系统。MoneyPrinterPlus的模块化设计允许根据具体需求进行灵活定制,无论是个人创作者还是企业级应用,都能找到合适的部署和优化方案。
【免费下载链接】MoneyPrinterPlusAI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,GPTSoVITS,支持云语音:Azure,阿里云,腾讯云。支持Stable diffusion,comfyUI直接AI生图。Generate short videos with one click using AI LLM,print money together! support:chatTTS,faster-whisper,GPTSoVITS,Azure,tencent Cloud,Ali Cloud.项目地址: https://gitcode.com/gh_mirrors/mo/MoneyPrinterPlus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考