
MoneyPrinterTurbo 功能特性与实现解析从参数模型到流水线源码的一键 AI 视频生成全解【免费下载链接】MoneyPrinterTurbo利用 AI 大模型和自动化工作流根据主题或关键词一键生成高清短视频。Generate HD short videos from a topic or keyword with an automated AI workflow.项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTurbo本文围绕 MoneyPrinterTurbo 的功能特性文档展开逐项讲解文案生成、多模型接入、视频尺寸与批量生成、语音合成、字幕渲染、背景音乐与素材来源等核心功能在仓库中的真实实现位置与参数默认值帮助读者既掌握完整的功能清单又能从源码级理解每个参数如何影响最终的成片效果。一、功能特性总览功能特性文档features.md以清单形式列出了项目的全部已实现特性。结合仓库源码每一项特性都可以对应到具体的实现模块特性文档描述主要实现位置MVC 架构代码结构清晰同时支持API和Web界面app/router.py、main.py、webui/Main.py文案 AI 自动生成 / 自定义video_script留空则走 LLM 生成否则直接使用app/services/task.py#L16-L33多种高清视频尺寸竖屏 9:161080x1920、横屏 16:91920x1080app/models/schema.py#L30-L42批量视频生成video_count 1时一次产出多个成片供挑选app/services/task.py#L159-L207视频片段时长设置video_clip_duration控制素材切换频率app/services/video.py#L49-L182中文和英文文案video_language参数留空自动识别app/services/llm.py#L262-L333多种语音合成Edge-TTS 内置 Azure 神经声音列表app/services/voice.py、docs/voice-list.txt字幕生成可调整字体、位置、颜色、大小与描边app/services/video.py#L243-L360背景音乐随机或指定音乐文件可设置音量app/services/video.py#L33-L46高清无版权素材Pexels / Pixabay 双素材源config.example.toml、app/services/material.py多 LLM 模型接入OpenAI、moonshot、Azure、gpt4free、one-api、通义千问、Gemini、Ollama 等app/services/llm.py#L16-L101二、MVC 架构API 与 Web 界面双入口从源码结构看项目按标准 MVC 分层组织app/controllers负责请求入口app/services封装业务逻辑llm、material、subtitle、task、video、voiceapp/models定义数据模型与参数 schemaapp/config负责配置加载。API 入口集中在 app/router.py 中它将 v1 版本的video与llm两个控制器路由挂载到根路由上root_api_router APIRouter() # v1 root_api_router.include_router(video.router) root_api_router.include_router(llm.router)API 服务执行python main.py后监听 8080 端口可通过/docs或/redoc在线调试接口任务类接口返回task_id再通过查询接口获取state、progress、videos、combined_videos等结果字段见 app/models/schema.py#L196-L249 中TaskResponse与TaskQueryResponse的示例结构。Web 界面执行 webui.sh / webui.bat 启动 Streamlit 界面默认 8501 端口界面功能见文首两张截图。两种入口共用同一套VideoParams参数模型与任务流水线配置行为完全一致。三、视频文案AI 自动生成与自定义文案是整个流水线的起点实现在 app/services/task.py 的start()主流程L210-L329中video_script params.video_script.strip() if not video_script: video_script llm.generate_script( video_subjectparams.video_subject, languageparams.video_language, paragraph_numberparams.paragraph_number, )即video_script留空时由 LLM 基于video_subject主题自动生成显式传入则跳过生成直接采用自定义文案。生成文案的 prompt 在 app/services/llm.py#L262-L284 中定义约束模型按指定段数输出纯文本、不加 Markdown 格式、不用“旁白”“欢迎观看”等前缀并可用language字段指定文案语言留空时要求模型跟随主题语言自动响应从而支持中文与英文文案。源码中还有一套健壮性设计generate_script内部最多重试 5 次_max_retries 5并对返回结果做清洗去除*、#、Markdown 链接残留start()中若脚本内容为空或包含Error: 前缀任务会被标记为失败状态。此外用于素材搜索的关键词video_terms同样支持自定义字符串按中英文逗号拆分或列表形式传入留空时由 LLM 生成 5 个英文搜索词app/services/llm.py#L336-L397因为素材站检索必须使用英文关键词。四、多 LLM 模型接入llm_provider是 config.example.toml 中最关键的配置项。文档列出的接入能力在 app/services/llm.py#L21-L88 中以分支方式逐一实现各提供商对应的配置文件项如下llm_provider需要配置的配置项config.toml 的 [app] 段默认 base_url / 模型openaiopenai_api_key、openai_model_name、可选openai_base_url代理https://api.openai.com/v1、gpt-4-turbomoonshot月之暗面moonshot_api_keyhttps://api.moonshot.cn/v1、moonshot-v1-8kazureazure_api_key、azure_base_url、azure_model_name部署名、azure_api_version版本默认2024-02-15-previewoneapioneapi_api_key、oneapi_base_url、oneapi_model_name无默认必须显式配置g4fgpt4freeg4f_model_name默认gpt-3.5-turbo-16k-0613无需 API Keyqwen通义千问qwen_api_key、qwen_model_nameqwen-max走 DashScope SDKgeminigemini_api_key、gemini_model_namegemini-1.0-pro走 REST 传输ollamaollama_model_name、可选ollama_base_urlhttp://localhost:11434/v1本地部署除文档列出的提供商外从源码分支看当前版本还支持deepseek、ernie文心一言需ernie_api_keyernie_secret_key换取 access_token与cloudflare等接入方式。所有走 OpenAI 兼容协议的提供商openai / moonshot / oneapi / azure / deepseek / ollama 等最终都收敛到同一个chat.completions.create调用缺少api_key、model_name或base_url任意一项时代码会抛出带提供商名称的ValueError便于定位配置缺失。国内网络环境下 README 建议使用 DeepSeek 或 Moonshot 作为提供商国内可直接访问无 API Key 时可用g4f或本地 Ollama 替代。五、视频尺寸16:9、9:16 与 1:1文档提到竖屏 9:161080x1920与横屏 16:91920x1080两种高清尺寸源码中由VideoAspect枚举统一映射分辨率app/models/schema.py#L30-L42class VideoAspect(str, Enum): landscape 16:9 portrait 9:16 square 1:1 def to_resolution(self): if self VideoAspect.landscape.value: return 1920, 1080 elif self VideoAspect.portrait.value: return 1080, 1920 elif self VideoAspect.square.value: return 1080, 1080 return 1080, 1920可以看到当前源码实际上比文档清单多支持一个1:11080x1080方形尺寸video_aspect参数默认值为竖屏9:16。所有后续步骤素材缩放、字幕定位都以这个分辨率为准例如 app/services/video.py#L106-L134 中会按目标宽高比对每个片段做等比缩放比例不一致时用黑色背景填充居中letterbox保证任意比例的素材都能适配目标画幅。六、批量生成与片段时长批量生成由video_count默认 1驱动。generate_final_videosapp/services/task.py#L159-L207对每个序号执行“素材拼接 成片渲染”两轮产出combined-N.mp4无字幕无配音的拼接版与final-N.mp4最终成片进度按50 / video_count / 2增量上报方便前端展示。一个细节值得注意当video_count 1时拼接模式会被强制切换为random保证每条批量视频采用不同的素材顺序提高“抽卡”命中率。片段时长由video_clip_duration默认 5 秒控制。在combine_videosapp/services/video.py#L49-L182中每段下载素材会被按该值切分成多个短片段然后按video_concat_mode处理random默认所有短片段全局洗牌循环取用直到总时长覆盖配音时长sequential每段素材只取第一个切出的片段按原始顺序拼接。最终视频帧率固定为 30 fps多片段通过concatenate_videoclips顺序连接配音不足时长时最后一个片段会被精确裁剪到剩余时长保证音画严格对齐。调节video_clip_duration即等于调节“画面切换频率”数值越小切换越快适合快节奏内容。七、语音合成与中英文支持语音模块位于 app/services/voice.py基于 Edge-TTS 的SubMaker完成文案朗读同时把逐词时间戳落盘为字幕所需的中间数据。完整的声音清单见 docs/voice-list.txt其中内置了一份覆盖数十种语言的 Azure 神经声音列表如zh-CN-XiaoxiaoNeural、zh-CN-YunxiNeural、en-US-JennyNeural等README 说明 v1.1.2 起新增的 Azure 声音需要配置 azure 段的speech_key与speech_region音质更真实。与语音相关的可配置参数均为VideoParams字段默认值来自 app/models/schema.py#L87-L92参数默认值作用voice_name声音名留空使用默认声音需与文案语种匹配voice_volume1.0配音音量倍率在渲染阶段以MultiplyVolume生效voice_rate1.0语速倍率video_language默认空字符串用于声明文案语种留空时按“自动识别”处理任务主流程中配音失败时日志会提示检查“声音语言与文案语言是否匹配”以及网络app/services/task.py#L83-L90。八、字幕生成识别与渲染两个阶段字幕分为“识别”与“渲染”两步。识别由 config.example.toml 中的subtitle_provider决定取值edge或whisper留空则不生成字幕。在 app/services/task.py#L96-L123 中edge模式速度快、无硬件要求直接利用 TTS 阶段产出的时间戳生成 SRT若生成后文件缺失会自动降级fallback到 whisperwhisper模式基于faster-whisper模型大小由 whisper 段的model_size默认large-v3、device默认 CPU、compute_type默认 int8控制识别后还会调用subtitle.correct用原文案校正错字subtitle_enabled默认True为false时直接跳过整个识别环节。渲染在generate_videoapp/services/video.py#L243-L360中逐条 SRT 生成TextClip文档提到的字体、位置、颜色、大小、描边均对应VideoParams字段参数默认值说明font_nameSTHeitiMedium.ttc字体文件名从resource/fonts目录加载可自行放置字体font_size60字号text_fore_color#FFFFFF前景色text_background_colorTrue背景色可设为transparentstroke_color/stroke_width#000000/1.5字幕描边颜色与宽度subtitle_positionbottomtop/bottom/center/customcustom_position70.0custom 模式下的垂直位置百分比代码会将其约束在安全边距内另外wrap_textapp/services/video.py#L185-L240会把超出画面 90% 宽度的字幕按词失败则按字符自动换行避免长句出屏bottom位置固定在画面高度 95% 处top在 5% 处。九、背景音乐随机或指定文件背景音乐选择逻辑在get_bgm_fileapp/services/video.py#L33-L46if bgm_file and os.path.exists(bgm_file): return bgm_file if bgm_type random: files glob.glob(os.path.join(song_dir, *.mp3)) return random.choice(files)即bgm_file指向存在的文件时优先使用指定音乐否则在bgm_type random时从resource/songs目录随机挑选一首 mp3。音乐库默认曲目见 README 说明位于resource/songs可自行增删。在渲染阶段BGM 会套用AudioLoop循环铺满全片、AudioFadeOut(3)结尾 3 秒淡出效果后与配音合成CompositeAudioClip。VideoParams中定义了bgm_volume默认0.2字段用于表达背景音量从当前源码结构看generate_video中实际作用于 BGM 音轨的倍率取的是params.voice_volume调整音量时建议以该实现为准并实测效果。API 侧还提供了 BGM 文件列表检索与上传接口响应结构见 app/models/schema.py#L276-L302。十、视频素材来源网络素材与本地素材素材下载源由video_source字段控制config.example.toml 支持pexels与pixabay两种分别配置pexels_api_keys/pixabay_api_keys支持多个 Key 用英文逗号分隔、双引号包裹以规避限流app/services/task.py#L126-L156 中按搜索词、画幅、总时长配音时长 ×video_count与单片上限video_clip_duration下载素材material_directory配置素材缓存目录留空写入默认./storage/cache_videos跨任务复用设为task则每个任务独立存放、不复用缓存。本地素材能力在文档“后期计划”中列出而当前源码已实现video_source local时走preprocess_videoapp/services/video.py#L363-L408对video_materialsMaterialInfo列表含provider/url/duration逐条处理视频低于 480px 会被警告并跳过图片素材会被渲染为带缓慢放大动效Ken Burns的 30 fps 视频片段时长取video_clip_duration。API 对外暴露的下载地址由endpoint配置控制默认使用服务自身地址与端口可设为反向代理域名素材 API 访问还可在 proxy 段配置http/https代理。十一、VideoParams 参数速查表VideoParamsapp/models/schema.py#L56-L105是 API 与 Web 界面共用的完整参数模型汇总默认值如下分组参数默认值内容video_subject/video_script/video_terms/paragraph_number必填 // 自动生成 /1画面video_aspect9:16画面video_concat_moderandom画面video_transition_mode无另见下文转场枚举画面video_clip_duration/video_count5秒 /1个素材video_source/video_materialspexels/ 本地素材列表语音voice_name/voice_volume/voice_rate/1.0/1.0音乐bgm_type/bgm_file/bgm_volumerandom//0.2字幕subtitle_enabled/subtitle_position/custom_positionTrue/bottom/70.0字幕font_name/font_sizeSTHeitiMedium.ttc/60字幕text_fore_color/text_background_color#FFFFFF/True字幕stroke_color/stroke_width#000000/1.5性能n_threads2配置加载入口在 app/config/config.py首次启动若不存在config.toml会自动从config.example.toml复制ffmpeg_path、imagemagick_path若指向有效文件会分别写入IMAGEIO_FFMPEG_EXE、IMAGEMAGICK_BINARY环境变量供 moviepy 自动检测。任务并发上限由max_concurrent_tasks默认 5控制多实例部署时可开启enable_redis使用 Redis 做任务状态共享。十二、后期计划与当前实现对照文档末尾的“后期计划”清单中部分条目在仓库当前版本已有对应实现阅读时需结合源码状态计划项当前仓库状态增加视频转场效果已有雏形VideoTransitionMode枚举定义了Shuffle/FadeIn/FadeOut/SlideIn/SlideOutapp/models/schema.py#L21-L27combine_videos对每个片段随机或指定应用 1 秒转场可以使用自己的素材已实现video_source localvideo_materials图片支持放大动效朗读声音和背景音乐实时试听README 已将“可实时试听效果”列入功能特性Web 界面能力GPT-SoVITS 配音支持源码未见相关实现仍为计划更多素材来源config.example.toml 目前仅pexels与pixabay两档视频长度选项短/中/长VideoParams尚无对应字段时长由paragraph_number、文案长度间接决定免费网络代理proxy 段仅提供素材 API 的代理配置无内置免费代理更多语音服务商如 OpenAI TTS当前为 Edge-TTS Azure 两套README 亦将其列为计划自动上传 YouTube源码未见上传逻辑仍为计划小结MoneyPrinterTurbo 的功能特性可以用一条数据流概括主题/关键词 → LLM 生成文案与搜索词 → 素材下载Pexels/Pixabay 或本地→ Edge-TTS/Azure 配音 → 字幕识别与渲染 → 片段切分拼接 转场 → 配音、BGM、字幕合成出片。文档中的每一项特性都能在 app/models/schema.py 的参数模型与 app/services/task.py 的主流程中找到对应实现以VideoParams为入口调整参数、以 config.example.toml 配置模型与素材源即可在 API 与 Web 两种界面下复现同一套行为这也是理解该项目“配置驱动 参数驱动”设计的最快路径。【免费下载链接】MoneyPrinterTurbo利用 AI 大模型和自动化工作流根据主题或关键词一键生成高清短视频。Generate HD short videos from a topic or keyword with an automated AI workflow.项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTurbo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考