デジタルガーデン
MoneyPrinterTurbo スキャン記:十三万星の灯台とゼロ Key の出片流水線
十三万星の灯台が照らすのは、「一つのテーマを入力して、一本のショートビデオを出す」という赛道である。この日、harry0703/MoneyPrinterTurbo が完全にスキャンされた——MIT プロトコル、約十三点一万 Star / 二点零七万 Fork、最後のコミットは当日、現行バージョン v1.3.8、非常に活発の中文明星プロジェクト。
一、四つの入口、一本の流水線
WebUI(Streamlit、Main.py 約八千四百行)、REST API(FastAPI)、CLI(単一ファイル六十九 KB)、AI Agent(自带 Skill)——四つの入口が同じ一つの任務流水線を共有し、ロジックは app/services/task.py:1510 の _run_pipeline に収斂し、段階的に推進してブレークポイント续走を持つ(stop_at は audio / subtitle / materials などの中間産物で停止可能)。七段流程:LLM が脚本を生成 → LLM が素材検索語を提炼 → TTS が旁白を生成 → faster-whisper がローカルで転写して字幕 → 多源からビデオクリップを取得 → moviepy 2.x + ffmpeg が拼接・裁剪・BGM 追加 → 独立スレッドプールで TikTok / Instagram / YouTube Shorts に自動アップロード(生成の並行を占用しない)。
二、集成面:このプロジェクト最も際立った特徴
LLM 側(app/models/llm_provider.py レジストリ + litellm):Kimi、OpenAI、Claude、Gemini、DeepSeek、通义、Azure、方舟、Grok、MiniMax、MiMo、ならびに OpenRouter / OneAPI / Ollama などのゲートウェイ。素材源:Pexels / Pixabay / Coverr / ローカルアップロード、外加文生ビデオ(火山 Seedance、WaveSpeed、OFox、秘塔 MiniMax、MuAPI、OpenAI 互換文生图)と LoomLoom SkillBot 脚本候補。TTS(voice.py 三千八百行、最も重いモジュール):Edge TTS(無料デフォルト)、Azure、SiliconFlow、Gemini、MiMo、MiniMax、ElevenLabs、Chatterbox、Kokoro、Fish Audio、VoxCPM。配乐:ローカル随机 / Sonilo / ElevenLabs Music。工程品質のハイライトも稀有に扎实——約百七十のテストファイル四万六千行、CI が分支カバレッジ七十パーセント以上を強制(pyproject.toml);重要な設計決策には中英二言語の注釈があり「なぜ」を解释する(接続テストの短いタイムアウト、不変検証、Windows プロセス生存判定など);ffmpeg エンコーダの探査とフォールバック、原子ファイル落盤(mkstemp + os.replace)、ログの脱敏(API key の正規表現マスキング)、TLS 検証スイッチ、API 鉴权(x-api-key)、Redis 任意のマルチプロセス状態同期、CPU/GPU 二套の Dockerfile。注意すべき点も記録——二つの巨大単一ファイル:webui/Main.py(八千四百行)と cli.py(六十九 KB)は明らかな保守負担、新機能はすべてそこに積まれる;商業色が濃い——README に大量のスポンサー推广リンク(Kimi、火山、APIMart など)があり、プロジェクトの本質は「AI ショートビデオ赚钱ツール」で、集成された新モデルの多くはスポンサーチャンネル由来;ビデオ理解——TwelveLabs は任意の extra で、uv で必要なときにインストール。
三、あの关键的な問い:API 必須か
ユーザーの疑問はコードで环节ごとに検証され、答えは——いいや。このソフトウェア本身はゼロ API Key で全流程を走り通せる。脚本环节ではカスタム脚本を直接粘贴できる(コード内 video_script が非空なら LLM をスキップ);配音には無配音モード、自分でアップロードした音声、そして Edge TTS(マイクロソフトの無料サービス、ネットがあればよく Key 不要);素材はローカル画像 / ビデオをアップロード;字幕は faster-whisper のローカル転写で、初回モデルダウンロード後は完全オフライン;配乐はローカル随机音楽ファイル;合成は moviepy + ffmpeg の全ローカル。だからキーポイントは二つ——それはローカル優先架构である——ビデオ編集、合成、転写はすべてあなたの機械の中で完了し、素材をクラウドにアップロードして処理するのではない。API は二類のことだけに使われる:コンテンツの生成(脚本、AI ビデオ、一部の音色)と素材の取得(图库検索)。最小可用構成=ゼロコスト:カスタム脚本 + ローカル素材 + Edge TTS 配音 + ローカル字幕 + ローカル BGM、一本の Key も埋めずに出片できる。「テーマを入力して全自動」を体験したい場合にのみ LLM API が必要で、この一歩も Ollama でローカルモデルを走らせて完全オフラインにできる。言い換えれば、API が決めるのは自動化と素材品質の上限であって、使えるかどうかではない。本当に回避できない外部依存は二つだけ——Edge TTS はネット接続が必要(ただし無料で Key 不要)、そして whisper は初回実行時にモデルファイルをダウンロードする必要がある。
四、ビデオはどう生成されるか:四歩の正身
合成コードを読んだ後、まず二つの概念を区切る必要がある——このソフトウェアでは「ビデオ生成」には二層の意味がある。第一層:素材ビデオはどこから来るか——即ち上一条で言った、ローカル / 图库 / AI 文生ビデオ、これは任意。第二層:成片はどう合成されるか——これがソフトウェアの本体で、全部ローカルで moviepy + ffmpeg を使って完成し、任何の API も不要。流程は combine_videos(video.py:965)と generate_video(video.py:1558)の二関数の中にあり、四つのステップに分かれる——
第 1 ステップ:旁白の时长に従って切片——まず配音音声の総时长を読み、目標成片时长=音声时长 + 0.5 秒の安全余裕。そして各素材ビデオを max_clip_duration(デフォルト五秒)× 再生速度から源时长を逆算して小段に切る。切片戦略は二種——sequential モードは各ビデオの开头一段だけを取り、random モードは順序をかき混ぜ、かつ _prioritize_unique_source_clips ロジックがあり異なる来源のクリップを優先して選び、連続数秒が同じビデオになるのを避ける。クリップが長さ不足なら循环复用して総时长が达标するまで。
第 2 ステップ:単一クリップ処理(スレッドプール並行)——各クリップを個別に処理:截取、clip_speed で变速、転場追加(フェードインアウト / スライド)、裁剪で画幅に適合(cover モードは黒縁を裁き取り、ぼかし背景充填モードもある)。画像素材はここで Ken Burns ズームアニメーションビデオにレンダリングされる(render_image_zoom_video、video.py:1883)、だから静止图をアップロードしても動的効果が出る。処理完のクリップは各自一時 mp4 ファイルに書かれる。
第 3 ステップ:ffmpeg で一度に拼接——ffmpeg の concat demuxer ですべてのクリップを連結エンコードする(video.py:625)。ここには明確な工學的な取舍がある:注釈に「MoviePy が段ごとに合併する際の繰り返し再エンコードを避け、画質劣化を減らす」と書かれている。またハードウェアエンコーダを探査し、失敗時は自動で libx264 にフォールバックし、最後に -t で目標时长に精密に截断する。出力は一時ファイル + os.replace の原子公開を通り、途中失敗しても半分のファイルは残らない。
第 4 ステップ:音トラック挂着、字幕焼き込み、BGM ミックス——旁白音声はまず音量パラメータで調整;字幕はローカル whisper が生成した SRT に駆動され、MoviePy の SubtitlesClip が每条字幕ごとに TextClip を生成する——PIL がフォントレンダリング、自動改行、ストロークと背景框(丸角背景を含む)を担当し、位置パラメータ(底部 / 顶部 / 三分二 / カスタム百分比)に従って CompositeVideoClip で画面に重ねる、任意で「弹簧弹跳」入場アニメーション。BGM は随机 / ローカル / AI 生成の三源をサポートし、読み込み後音量スケーリング、全长埋める循环、结尾三秒のフェードアウトを行い、旁白とミックスする。最后に write_videofile で最終 mp4 を出力。画幅は 9:16(1080×1920)、16:9(1920×1080)、1:1(1080×1080)の三种をサポート。
だから全链路は——AI / 图库は「原材料」を提供するだけ、本当の編集合成はローカル従来型ビデオ処理。これがなぜそれがゼロ API でも出片できるか——合成这一环はもともとクラウドに依存しない。
真実の座標
- プロジェクト:harry0703/MoneyPrinterTurbo、約十三点一万スター / 二点零七万フォーク、v1.3.8、MIT、当日もコミットのある非常に活発な中文明星プロジェクト
- 四入口:WebUI(Streamlit Main.py 8400 行)/ REST API(FastAPI)/ CLI(69KB 単一ファイル)/ AI Agent(docs/skill/);流水線のオーケストレーション核心は task.py:1510 _run_pipeline、stop_at で audio/subtitle/materials に停止可能なブレークポイント续走
- 集成面:LLM は Kimi/OpenAI/Claude/Gemini/DeepSeek/通义/Azure/方舟/Grok/MiniMax/MiMo + OpenRouter/OneAPI/Ollama;素材は Pexels/Pixabay/Coverr/ローカル + 文生ビデオ(火山 Seedance、WaveSpeed、OFox、秘塔 MiniMax、MuAPI)+ LoomLoom SkillBot;TTS は Edge TTS(無料デフォルト)/Azure/SiliconFlow/Gemini/ElevenLabs/Chatterbox/Kokoro/Fish Audio/VoxCPM;配乐はローカル/Sonilo/ElevenLabs Music
- 工程品質:約百七十テストファイル四万六千行、CI が分支カバレッジ七十パーセント以上を強制;中英二言語注釈が「なぜ」を解释;ffmpeg エンコーダ探査とフォールバック、mkstemp+os.replace 原子落盤、ログ脱敏、x-api-key 鉴权、Redis 任意のマルチプロセス同期、CPU/GPU 二套 Dockerfile
- 合成四ステップ:旁白时长で切片(max_clip_duration 5 秒×速度、sequential/random、_prioritize_unique_source_clips)→ スレッドプールで単一クリップ処理(画像は Ken Burns ズームアニメに、render_image_zoom_video video.py:1883)→ ffmpeg concat demuxer で一度に拼接(再エンコード劣化を避け、HW エンコーダ探査、libx264 フォールバック、-t 精密截断、原子公開)→ 音トラック挂着+字幕焼き込み(SRT 駆動の TextClip、PIL がフォント/改行/ストローク/丸角背景を担当、弹簧弹跳アニメ)+BGM(三源、音量スケーリング、循环、三秒フェードアウト)
- 画幅:9:16 / 16:9 / 1:1 三種;最小可用構成=カスタム脚本+ローカル素材+Edge TTS+ローカル字幕+ローカル BGM、ゼロ Key で出片
コメント