鏈接:https://reccloud.cn/start?position=tab1
docs:AI creates videos
MoneyPrinterTurbo 是一個自動化短視頻創作流程的開源項目。
它通過輸入主題或關鍵詞,利用人工智能(大語言模型)生成腳本和搜索條件,接著合成語音、查找相關視頻素材、創建字幕,最終將所有組件組裝成完整的視頻文件。
通過網頁界面,我們可以配置設置并啟動生成流程。
架構流程圖
章節導航
- 網頁用戶界面(UI)
- 應用配置
- 任務編排
- 任務狀態管理
- 數據模型與架構
- 大語言模型服務
- 語音合成服務
- 字幕服務
- 視頻素材服務
- 視頻生成服務
第一章:網頁用戶界面(UI)
歡迎來到MoneyPrinterTurbo的第一章!
-
我們將從項目中最直觀可見的組成部分開始探索——網頁用戶界面(簡稱Web UI)。
-
我們可以把Web UI想象成MoneyPrinterTurbo的控制中樞。
-
就像通過
汽車儀表盤
控制行駛方向、調整收音機或查看車速一樣,Web UI讓我們能夠告訴MoneyPrinterTurbo想要制作的視頻類型、自定義創作方式、啟動生成流程并查看最終成果。
MoneyPrinterTurbo的核心目標是幫助我們輕松實現自動化短視頻創作,而Web UI正是實現這一目標的友好界面,它將背后所有復雜步驟都隱藏在簡潔的操作面板之下
。
什么是Web UI?
Web UI是MoneyPrinterTurbo應用程序中通過網頁瀏覽器(如Chrome、Firefox、Edge等)訪問的可視化界面。
它基于名為Streamlit的創新工具構建,這個工具讓我們能夠用Python代碼輕松創建交互式網頁應用。
通過Web UI,我們可以實現:
- 告知系統視頻創作主題
- 定制視頻、音頻和字幕的各類參數
- 啟動視頻生成流程
- 監控進度并查看異常狀態
- 下載成品視頻文件
讓我們通過實際案例了解它的操作流程。
首個視頻創作:快速體驗
假設我們要創作關于"閱讀的益處"的短視頻,典型操作流程如下:
- 啟動系統:在計算機上運行MoneyPrinterTurbo應用程序
- 訪問界面:在瀏覽器中打開UI運行地址(通常為
http://localhost:8501
) - 輸入主題:定位到"視頻腳本設置"區域,在"視頻主題"輸入框鍵入"閱讀的益處"
- 參數調整(可選):瀏覽"視頻設置"、“音頻設置"和"字幕設置"區域,初次可保留默認參數,但可以探索"視頻寬高比”(豎屏適用于TikTok/短視頻,橫屏適用于YouTube)或"背景音樂"等選項
- 生成啟動:定位到醒目的"生成視頻"按鈕(通常位于底部區域)并點擊
- 過程追蹤:界面將顯示實時日志消息,展示系統正在執行的步驟
- 成果獲取:完成后,界面將顯示視頻下載鏈接
這就是基本操作流程~
Web UI在此過程中承擔著全程控制中心的角色。
AI生成視頻初體驗
界面功能模塊
Web UI通過模塊化設計實現信息輸入與參數調整,代碼片段顯示主要包含以下功能區域:
-
視頻腳本設置:提供核心創意(
視頻主題
)或完整腳本(視頻腳本
)的輸入區域,支持自動生成關鍵詞(視頻關鍵詞
)st.text_input(tr("視頻主題"), # 來自語言文件的標簽value=st.session_state["video_subject"],key="video_subject_input", ) st.text_area(tr("視頻腳本"), # 來自語言文件的標簽value=st.session_state["video_script"],height=280 ) # 其他腳本相關輸入...
此簡化示例展示Streamlit如何創建主題與腳本的輸入組件
-
視頻設置:控制素材來源(
視頻源
)、剪輯模式(視頻拼接模式
、轉場效果
)、畫面比例(視頻寬高比
)和片段時長(片段持續時間
)等視覺參數st.selectbox(tr("視頻源"), # 來自語言文件的標簽options=range(len(video_sources)),format_func=lambda x: video_sources[x][0],index=saved_video_source_index, ) st.selectbox(tr("視頻寬高比"), # 來自語言文件的標簽options=range(len(video_aspect_ratios)),format_func=lambda x: video_aspect_ratios[x][0], ) # 其他視頻設置...
Streamlit通過
selectbox
創建視頻源與寬高比等下拉菜單 -
音頻設置:管理語音合成(
語音合成
、TTS服務商
、語音區域
、語音密鑰
)、語音屬性(語音音量
、語速
)和背景音樂(背景音樂
、背景音樂音量
)等音頻參數st.selectbox(tr("TTS服務商"), # 來自語言文件的標簽options=range(len(tts_servers)),format_func=lambda x: tts_servers[x][1],index=saved_tts_server_index, ) st.selectbox(tr("語音音量"), # 來自語言文件的標簽options=[0.6, 0.8, 1.0, 1.2, 1.5, 2.0, 3.0, 4.0, 5.0],index=2, ) # 其他音頻設置...
使用
selectbox
實現TTS服務商選擇與音量調節 -
字幕設置:配置字幕顯示(
啟用字幕
)及其視覺樣式(字體
、位置
、字號
、字體顏色
、描邊顏色
、描邊寬度
)st.checkbox(tr("啟用字幕"), value=True) # 來自語言文件的標簽 st.selectbox(tr("字體"), font_names, index=saved_font_name_index) # 來自語言文件的標簽 st.color_picker(tr("字體顏色"), saved_text_fore_color) # 來自語言文件的標簽 # 其他字幕設置...
通過
checkbox
、selectbox
和color_picker
實現字幕定制 -
基礎設置:可折疊區域(默認可能隱藏)包含關鍵配置項,包括界面語言、大語言模型與視頻素材源(Pexels、Pixabay)的API密鑰,以及TTS服務商(Azure、SiliconFlow)配置
with st.expander(tr("基礎設置"), expanded=False):# API密鑰輸入及其他基礎配置...st.text_input(tr("Pexels API密鑰"), # 來自語言文件的標簽value=pexels_api_key,type="password" # 隱藏輸入)# 其他API密鑰與語言設置...
st.expander
創建折疊區域保持界面整潔,type="password"
保護敏感信息 -
日志區域:點擊"生成視頻"后顯示進度信息與錯誤提示,對問題診斷至關重要
log_container = st.empty() # 日志顯示容器 # 后續代碼... with log_container:st.code("\n".join(log_records)) # 代碼格式顯示日志
通過占位符
st.empty
實現動態日志更新 -
下載鏈接:視頻生成成功后顯示最終文件下載入口
這些界面組件本質上將我們的操作選擇轉化為MoneyPrinterTurbo系統可識別的指令集合。
點擊"生成視頻
"后的系統響應
當我們完成表單填寫并點擊生成按鈕時,界面不僅呈現視覺反饋,更重要的是啟動復雜的視頻生成流程。以下是簡化的系統交互示意圖:
界面本身并不直接生成視頻,其核心職責是收集需求并通知系統的任務管理器啟動新任務。
任務管理器繼而協調各子系統(如大語言模型生成腳本、語音合成服務、視頻素材檢索等)完成視頻創作,界面則持續展示任務管理器反饋的進度信息直至視頻生成完成。
關于任務編排與服務協同的深入解析,我們將在后續章節詳細探討!
總結
網頁用戶界面是我們與MoneyPrinterTurbo交互的核心工具,它通過可視化表單接收視頻內容需求,并提供腳本、視頻片段、音頻(語音與背景音樂)及字幕的各類參數定制功能。
-
當點擊"生成視頻"時,界面將指令傳遞至后端系統,監控執行進度,最終呈現創作成果的下載入口。
-
在掌握
控制面板
的基本操作后,我們需要進行必要的系統配置
(如API密鑰設置)才能充分發揮系統功能。
下一章我們將深入解析應用配置,了解MoneyPrinterTurbo的核心參數存儲機制與管理方法。
下一章:應用配置
第二章:應用配置
在第一章中,我們探索了網頁用戶界面(UI)——這是MoneyPrinterTurbo的友好控制面板。
我們學習了如何通過按鈕和輸入框告知系統所需的視頻類型。
但系統如何確定使用具體哪個AI模型?如何定位請求的視頻素材?OpenAI或Pexels等服務的API密鑰又該存放在何處?
這正是應用配置的核心作用。我們可以將配置理解為整個MoneyPrinterTurbo項目的記憶中樞與參數控制臺。它承載著系統運行所需的關鍵信息,承擔著全局參數存儲庫的角色。
為何需要配置?
試想若要在未知食材存放位置、不明調料品牌的情況下烹飪復雜料理,我們必定手足無措!
MoneyPrinterTurbo正如這道復雜料理,它需要明確的"食材"與操作指南:
- 食材:AI服務的API密鑰(用于生成腳本與語音)、視頻素材源的API密鑰(用于檢索片段)、外部工具路徑(如視頻剪輯工具FFmpeg)
- 操作指南:通用行為參數(如臨時文件存儲路徑、日志記錄級別、并發任務上限)
配置系統為這些信息提供了標準化存儲與管理機制。缺乏配置時,系統既無法連接外部服務,也無法根據用戶需求調整自身行為。
核心組件:config.toml
文件
MoneyPrinterTurbo的配置核心是一個名為config.toml
的文件:
- TOML格式:TOML(Tom’s Obvious, Minimal Language)是一種人類易讀、機器易解析的配置文件格式,通過
key = "value"
鍵值對與[section]
區塊頭組織參數 - 文件位置:該文件位于項目根目錄,與
app
、webui
等文件夾同級。初次部署時通常存在config.example.toml
模板文件,需手動復制或重命名為config.toml
后進行編輯
以下是一個簡化的config.example.toml
片段示例:
# --- config.example.toml(簡化版)---
[app]
video_source = "pexels"# Pexels API密鑰
pexels_api_keys = [] # 支持多密鑰列表形式[openai]
# OpenAI API密鑰
openai_api_key = ""
openai_model_name = "gpt-4o-mini"
此片段展示:
[app]
區塊包含video_source
等通用參數[openai]
區塊包含openai_api_key
等專屬參數- 列表型參數(如
pexels_api_keys
)支持多值存儲 - 字符串型參數(如
openai_api_key
)需填入單值
首次配置任務通常包括:
- 將
config.example.toml
重命名為config.toml
- 填入已獲取的API密鑰(如OpenAI、Azure、Pexels等)
例如添加OpenAI密鑰的修改過程:
# 修改前:
openai_api_key = ""# 修改后:
openai_api_key = "sk-YOUR_ACTUAL_OPENAI_KEY_HERE" # 替換為真實密鑰
注:部分基礎參數修改后需重啟系統生效。
在gmini-cli第一章,我們也有過相同的配置操作~
系統如何運用配置?
配置并非靜態文件,而是動態參與系統運行:
-
啟動加載:系統啟動時,核心代碼首先讀取
config.toml
文件,將TOML格式解析為Python變量# 摘自app/config/config.py的簡化代碼 import toml import os import shutil from loguru import loggerroot_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) config_file = f"{root_dir}/config.toml"def load_config():if not os.path.isfile(config_file):example_file = f"{root_dir}/config.example.toml"if os.path.isfile(example_file):shutil.copyfile(example_file, config_file)logger.info("已從模板創建配置文件")logger.info(f"加載配置文件: {config_file}")return toml.load(config_file)_cfg = load_config() app = _cfg.get("app", {}) openai = _cfg.get("openai", {})
該代碼實現:
- 自動創建配置文件(若缺失)
- 加載配置至內存字典
- 按區塊劃分配置參數
-
參數調用:各功能模塊通過導入配置模塊獲取參數
# 功能模塊調用示例 from app.config import configdef generate_script(subject: str):llm_provider = config.app.get("llm_provider", "openai")openai_key = config.openai.get("openai_api_key")if llm_provider == "openai" and openai_key:return llm_service.generate(subject, api_key=openai_key)else:return "錯誤:缺失有效配置"
此例展示腳本生成功能如何根據配置選擇AI服務商。
-
界面保存:如第一章所述,網頁界面的"基礎設置"支持直接修改參數并保存至配置文件
# 網頁界面保存功能代碼示例 import streamlit as st from app.config import config, save_configdef render_basic_settings():with st.expander("基礎設置"):pexels_key = st.text_input("Pexels API密鑰",value=config.app.get("pexels_api_keys", [""])[0],type="password")if st.button("保存配置"):config._cfg["app"]["pexels_api_keys"] = [pexels_key]save_config()
該代碼實現:
- 從內存配置讀取初始值
- 將界面修改寫入內存配置
- 調用保存函數持久化至文件
配置交互流程示意圖:
核心配置區塊解析
config.toml
包含多個功能區塊,關鍵部分如下:
區塊名稱 | 功能描述 | 典型參數示例 |
---|---|---|
[app] | 應用通用設置 | video_source , ffmpeg_path |
[openai] | OpenAI服務參數 | openai_api_key , openai_model_name |
[azure] | Azure語音合成參數 | azure_api_key , azure_region |
[siliconflow] | SiliconFlow服務參數 | api_key |
[proxy] | 代理服務器配置 | http , https |
[whisper] | 字幕生成參數 | model_size , compute_type |
[ui] | 界面顯示參數 | hide_log , theme |
這些參數的具體應用場景將在后續章節詳解,例如:
- 第六章:大語言模型服務解析
[openai]
配置 - 第七章:語音合成服務展示
[azure]
配置用法
總結
應用配置作為MoneyPrinterTurbo的核心機制,通過config.toml
文件集中管理API密鑰、服務參數、工具路徑等關鍵信息。
系統啟動時加載配置
至內存,各功能模塊按需調用。網頁界面提供可視化配置
修改能力,實現參數動態更新
。
掌握配置管理使我們能夠:
- 靈活切換AI服務供應商
- 定制化系統運行環境
- 快速部署多環境實例
在理解系統配置機制后,我們將進一步探索任務編排機制——了解系統如何協調腳本生成、語音合成、視頻剪輯等子任務。
下一章:任務編排