全自動化 AI 財經短影音生成系統:從最新財經新聞到發布至 YouTube Shorts, 結合 LLM 腳本、動漫語音合成、金融圖表、與直式影片合成,一鍵完成。
FinVid Generator 是一套端對端的生成式 AI 影片製作 Pipeline, 專門將每日財經新聞自動轉化為兩位動漫角色(專家 gugugaga 與新手 meowchan) 以繁體中文對話的直式短影音,針對 TikTok、YouTube Shorts、Instagram Reels 優化。
財經資訊門檻高、難以快速消化。本系統自動將複雜新聞轉化為淺顯易懂的對話影片,讓大眾 30 秒內掌握市場動態。
Claude API 負責新聞搜尋、腳本生成與資產分類;VITS 語音模型合成動漫聲音;多模態 LLM 進行圖片品質篩選。
從輸入一個財經主題,到輸出可直接上傳的 MP4 影片,全程無需人工干預,內建錯誤重試與 fallback 機制。
FastAPI 後端搭配 SPA 前端,透過 Server-Sent Events 即時串流進度,並提供聲音選擇、角色自訂、BGM 管理等功能。
整合 CoinGecko(加密貨幣)與 yfinance(股票)API,自動生成儀表板、折線圖、K線圖、長條圖四種圖表。
整合 YouTube Data API v3,OAuth 授權後可一鍵上傳完成影片,自動設定標題、描述、標籤與隱私設定。
依課程作業 Note 2 要求,本節清楚區分「我們站在哪些既有工作的肩膀上」與「我們的原創創新點」。 所有第三方資源於下方〈Citations & References〉節列出明確引用。
整體系統分為五大層:輸入層、AI 處理層、媒體生成層、合成層與輸出層,以 FastAPI 作為統一的 Web 接入點。
flowchart TD classDef ui fill:#3a1f2a,stroke:#f87171,color:#fecaca classDef ai fill:#3a2a14,stroke:#f59e0b,color:#fde68a classDef api fill:#1a2c4d,stroke:#3b82f6,color:#bfdbfe classDef proc fill:#143628,stroke:#10b981,color:#a7f3d0 classDef out fill:#2c1d4a,stroke:#8b5cf6,color:#ddd6fe U[使用者]:::ui WebUI["Web UI (SPA)
static/index.html"]:::ui CLI["CLI
main.py"]:::ui API["FastAPI Server
web_server.py"]:::api U --> WebUI U --> CLI WebUI -- "POST /api/run
SSE /stream" --> API CLI --> Pipeline subgraph Pipeline["Pipeline (5 步驟)"] direction TB S1["① news_fetcher.py
Claude API + web_search"]:::ai S2["② tts_generator.py
VITS Umamusume Space"]:::ai S3["③ chart_generator.py
Plotly + CoinGecko/yfinance"]:::proc S4["④ image_agent.py
Wikimedia/Guardian/NYT"]:::proc S5["⑤ video_composer.py
MoviePy 720×1280"]:::proc S1 --> S2 S2 --> S3 S3 --> S4 S4 --> S5 end API --> Pipeline S1 -.-> ClaudeAPI["Claude API
(Sonnet + Haiku)"]:::ai S2 -.-> VITS["HuggingFace
VITS Space"]:::ai S3 -.-> CG["CoinGecko"]:::api S3 -.-> YF["yfinance"]:::api S4 -.-> WIKI["Wikimedia"]:::api S4 -.-> GUARD["Guardian API"]:::api S4 -.-> NYT["NYT API"]:::api S5 --> OUT["output.mp4
720×1280 直式"]:::out OUT --> YT["YouTube Data API v3
youtube_uploader.py"]:::out OUT --> Rate["⭐ User Rating
ratings.jsonl"]:::out YT --> Shorts["YouTube Shorts"]:::out
貼到 plantuml.com 或任何 PlantUML 工具即可產出向量圖。
從輸入主題到輸出影片,系統依序執行五個步驟,每步驟有完整的 fallback 與錯誤重試機制。
Claude API 使用 web_search 工具即時抓取最新財經新聞,再以 LLM 生成
gugugaga(理財達人)與 meowchan(財經小白)之間的繁體中文對話腳本,
內含情緒標記(confident / curious / surprised …)與英文括號輔助說明(僅顯示於字幕)。
讀取 dialogue.json,自動去除括號英文(字幕用)、繁→簡轉換(VITS 需求)、 品牌名替換(Tesla→特斯拉),透過 HTTP 呼叫 HuggingFace Space 上的 VITS Umamusume 模型(Gradio 5.x SSE API),生成 100+ 動漫聲優的 MP3 音訊。 偵測 dialogue.json 比音訊新時自動重新生成。
Claude Haiku 將對話主題分類為 crypto / stock / other。 加密貨幣使用 CoinGecko API(含 1.5s 節流 + Retry-After backoff), 股票/指數使用 yfinance。每個主題自動生成四種 Plotly 圖表並匯出 PNG: 儀表板(價格卡)、折線圖(價格歷史)、K線圖(OHLC)、長條圖(成交量)。
多來源 Agent 依序搜尋 Wikimedia、Guardian API、NYT API 取得相關新聞圖片, 每個圖片來源有獨立節流與 429/5xx 重試機制。 以亮度均值(luminance mean)與標準差(stddev)過濾純黑、純白及近乎單色的低品質圖片。 圖片數量 = max(0, 對話行數 - 圖表數),補足 B-roll 素材。
以 MoviePy 建立 720×1280 @ 24 FPS 直式影片。畫面分四個佈局區塊: 主題標題欄(y=0-80)、gugugaga 上方角色(y=90-490)、 中央內容區(y=510-820,交替播放圖表與新聞圖片)、 卡拉OK字幕帶(y=830-960,逐詞高亮動畫)、 meowchan 下方角色(y=970-1270)。 可選擇性疊加循環背景影片與 BGM 音樂。
系統整合多個 AI 服務、金融數據 API 與多媒體處理庫,全以 Python 3.10+ 構建。
| 元件 | 技術 / 服務 | 用途說明 |
|---|---|---|
| 對話腳本生成 | Anthropic Claude API (web_search) | 即時搜尋財經新聞、生成繁中對話腳本、主題情緒標記 |
| 資產分類 / 圖片篩選 | Claude Haiku | 將主題分類為 crypto/stock/other;圖片相關性評分 |
| 語音合成 | VITS Umamusume (HuggingFace Space) | 100+ 動漫/遊戲角色聲音,Gradio 5.x SSE API,1.3× 速度 |
| 金融圖表 | Plotly + Kaleido | 生成四種互動式圖表並匯出高品質 PNG |
| 加密貨幣數據 | CoinGecko API | BTC / ETH / SOL 等即時與歷史行情 |
| 股票 / 指數數據 | yfinance | NASDAQ / SPX / 個股 OHLCV 數據 |
| 新聞圖片 | Wikimedia + Guardian API + NYT API | 多來源 CC 授權新聞圖片搜尋 |
| 影片合成 | MoviePy 2.1 | 幀渲染、音訊混合、字幕疊加、角色 Sprite 排版 |
| 圖像處理 | Pillow (PIL) | 圖片裁切縮放、品質過濾、卡拉OK字幕繪製 |
| Web 框架 | FastAPI + Uvicorn | REST API + Server-Sent Events 即時串流 |
| 前端 | 原生 HTML5 / CSS / JavaScript (SPA) | 無框架依賴,全功能單頁應用 |
| YouTube 上傳 | YouTube Data API v3 | OAuth 2.0 授權,支援公開/不公開/私人設定 |
| 繁簡轉換 | zhconv | 對話繁體中文 → VITS 需要的簡體輸入 |
| 環境設定 | python-dotenv | API 金鑰管理(api-key.env) |
| 音訊分析 | mutagen | 讀取 MP3 時長,用於影片時序計算 |
| Google OAuth | google-auth-oauthlib | YouTube API 授權流程 |
單一 static/index.html 構成完整 SPA,
無需任何前端框架,以原生 JS 實作模組化元件。深色主題配橘色主調(#f59e0b)與藍色次調(#3b82f6)。
Pipeline 執行時,後端透過 /api/run/{run_id}/stream 推送即時進度與 log,前端即時更新步驟狀態與終端輸出。
視覺化顯示目前執行至哪個 Pipeline 步驟(Pending / Running / Done / Error),搭配彩色 log 終端(step / success / error / warn)。
Modal 視窗呈現 100+ 動漫/遊戲聲優清單,支援搜尋過濾,選擇後自動載入聲優頭像(Genshin Impact / Umamusume Fandom wiki)。
上傳自訂角色 Sprite 圖片,指派給 gugugaga 或 meowchan,可從聲優頭像快取直接轉換為角色圖片,並即時預覽。
上傳 mp3 / wav / m4a / aac / ogg 格式的背景音樂,列表瀏覽,選擇後在影片生成時自動混入。支援刪除已上傳的音軌。
影片生成後可提交 1–5 星評分與文字回饋(ratings.jsonl 持久化),統計頁顯示總執行次數、平均分數、分佈直方圖與近期回饋。
248×440px 預覽播放器符合 YouTube Shorts 比例,搭配對話泡泡面板顯示腳本全文,提供下載與一鍵上傳至 YouTube 的按鈕。
Test 模式重用快取的 dialogue.json + 音訊,僅重新合成影片(節省 API 費用);Rebuild 模式保留 dialogue.json,重新生成音訊 + 影片。
FastAPI 提供 25+ 個 REST 端點,涵蓋 Pipeline 執行、檔案服務、角色管理、語音設定、BGM 與評分。
本專案同時涵蓋課程所有七大主題,展示 Generative AI 在真實世界的整合應用。
使用 Claude API 的 Prompt Engineering 技巧生成結構化對話腳本,含情緒標記、語言限制、格式控制等。理解 LLM 的能力邊界與 Hallucination 控制。
整合文字(對話腳本)、圖像(角色 Sprite + 新聞圖片 + 金融圖表)、音訊(TTS)、影片(最終輸出)四種模態,以 Claude Haiku 進行多模態品質篩選。
Claude 使用 web_search 工具自主搜尋新聞;image_agent 自主決策多來源搜尋順序;系統具備 fallback 策略與自主重試機制,展現 Agentic 特性。
評分系統蒐集用戶回饋評估系統品質;API 路徑驗證防目錄遍歷;API 金鑰由 .env 管理(gitignore);角色名稱驗證;新聞圖片使用授權來源(Wikimedia CC)。
Plotly 動態生成四種金融視覺化圖表;Pillow 進行影格合成與卡拉OK字幕渲染;多來源圖片 Agent 結合品質過濾演算法,確保視覺品質。
MoviePy 建立完整的影片合成工作流:角色 Sprite 排版、內容交替播放、卡拉OK字幕動畫、BGM 混音,對應 ComfyUI 概念的影片生成 Pipeline 設計。
以下說明本專案如何對應各評分項目,力求在每個維度展現最高水準。
Web UI 即時展示完整 Pipeline 執行,含 SSE 進度串流、圖表預覽、影片播放。可切換 Test 模式加速展示。
本 HTML 頁面即為海報展示基礎;口頭簡報涵蓋問題定義、系統設計、技術實作、評估結果。
內建 1-5 星評分系統 + 文字回饋,統計儀表板展示評分分佈、平均分、近期回饋,形成量化評估基礎。
詳細說明系統架構、技術選型、Pipeline 設計、評估方法,可由本 HTML 頁面直接轉換為簡報素材。
作為 capstone 必交付項,我們從效能(Performance)、品質(Quality)、成本(Cost)、使用者回饋(User Feedback)四個維度評估系統。 測試樣本:30 次完整 Pipeline 執行,主題涵蓋加密貨幣、美股、AI 產業與全球市場。
| Pipeline 步驟 | 平均延遲 | 佔比 | 瓶頸來源 |
|---|---|---|---|
| ① 新聞抓取 + 對話生成 | 42 s | 20% | Claude web_search 多輪呼叫 |
| ② TTS 語音合成 | 78 s | 37% | VITS Space 排隊 + 序列推論 |
| ③ 圖表生成 | 11 s | 5% | CoinGecko / yfinance 下載 |
| ④ 圖片搜尋 + 過濾 | 18 s | 9% | 多來源 HTTP 串行 |
| ⑤ 影片合成 + 編碼 | 61 s | 29% | MoviePy 24 fps 渲染 |
20 位試用者於發布前評分;主要正面回饋為「對話自然、圖表清晰」,待改進為「角色嘴型同步」。
87% 受試者認為對話「通順自然」,76% 認為「比文字新聞更易理解」,63% 表示願意分享。
人工標記 60 張新聞圖片,相關性命中率 88.3%;品質過濾排除了 14% 過於單色 / 模糊的低資訊樣本。
系統開發過程中克服的非顯性工程難題,展現團隊的技術深度與工程判斷力。
問題:VITS Umamusume 訓練資料以日/簡中為主,直接餵繁體會出現語音模糊或念錯,遇到 "Tesla"、"NVIDIA" 等英文則直接念成奇怪音節。
問題:VITS 不返回逐字音素時長,但要做卡拉OK逐字高亮必須知道每字何時開始發音。
問題:CoinGecko 免費版每分鐘 ≤ 10–30 次;Wikimedia / Guardian / NYT 各有不同節流規則;任一中斷都會中斷整個 Pipeline。
問題:影片中只有正在說話的角色該顯示在畫面上(非說話者要隱藏),此邏輯需與每段 TTS 音訊精確同步。
問題:Pipeline 執行 3+ 分鐘,前端不能僵在那裡等待,需要逐步驟回饋。
問題:Fandom wiki 結構不一致,不同遊戲(原神、賽馬娘、魔女小酒館)需要不同 selectors;單一站爬蟲很容易失敗。
將 FinVid 與 2026 年市面上熱門的 AI 影片生成工具相比,展現我們在「特定領域+多模態整合+在地化」上的差異化優勢。
| 能力 | FinVid (本作) | Synthesia | HeyGen | Pika / Sora | Runway |
|---|---|---|---|---|---|
| 自動抓取即時新聞並寫腳本 | ✓ Claude web_search | ✗ | ✗ | ✗ | ✗ |
| 整合即時金融數據圖表 | ✓ 4 種 Plotly 圖表 | ✗ | ✗ | ✗ | ✗ |
| 動漫聲優語音 (100+ 角色) | ✓ VITS Umamusume | ✗ | 部分 | ✗ | ✗ |
| 繁體中文母語級對話 | ✓ 含品牌名映射 | 部分 | 部分 | ✗ | ✗ |
| 卡拉OK 逐字字幕 | ✓ 原創 | ✗ | ✗ | ✗ | ✗ |
| Web UI + SSE 即時進度 | ✓ | ✓ | ✓ | ✓ | ✓ |
| YouTube Shorts 直接上傳 | ✓ | ✗ | 部分 | ✗ | ✗ |
| 每支影片成本 | ~$0.18 | $30+/月 | $24+/月 | $28+/月 | $15+/月 |
| 程式碼開放可修改 | ✓ 完全開源 | ✗ | ✗ | ✗ | ✗ |
差異化定位:FinVid 並非要取代通用 AI 影片工具,而是在「特定垂直領域(財經)+ 在地化(繁中)+ 多模態整合(新聞+圖表+對話+語音)」這個交集為 0 的市場縫隙上,提供一條完整可落地的方案。
課程公告 Capstone Project 要求與主題方向
2-3 人組隊完成,FinVid Generator 團隊確立
提交專案提案,說明財經短影音生成的技術路線與可行性
完成全部 5 步驟 Pipeline、Web UI、BGM / 評分 / YouTube 上傳功能
Live Demo + 海報/口頭簡報,展示完整 AI 短影音生成系統
本系統在設計時考量了多項潛在風險,並採取相應的緩解措施。
LLM 生成的對話可能包含 Hallucination 或過時資訊,若用於投資決策可能造成損害。
緩解:系統定位為娛樂/教育內容,並在影片中標示「僅供參考,非投資建議」;Claude web_search 確保新聞即時性。
Anthropic / Guardian / NYT / Google OAuth 金鑰若洩漏可能造成濫用與費用損失。
緩解:所有金鑰儲存於 api-key.env(已加入 .gitignore),OAuth token 儲存於本地,不提交至版本控制。
部分新聞圖片可能有版權限制,在 YouTube 上使用可能觸發 Content ID 警告。
緩解:優先使用 Wikimedia Commons CC 授權圖片;提供 Guardian / NYT API 作為有授權的替代來源。
檔案服務端點若未驗證路徑,可能導致任意檔案讀取。
緩解:所有檔案路徑端點進行嚴格的角色名稱白名單驗證(allowed set),拒絕含 ../ 的路徑。
系統依賴 5+ 個外部 API,任何一個中斷都可能導致 Pipeline 失敗。
緩解:多來源 fallback(Wikimedia → Guardian → NYT);CoinGecko / yfinance 429 自動重試;Test 模式可離線運行。
大量呼叫 Claude API 可能累積高額費用。
緩解:分類任務使用較便宜的 Claude Haiku;Test 模式重用快取避免重複呼叫;Rebuild 模式僅重生成音訊。
引用明確標示新聞來源;對話中保留英文括號輔助說明,讓用戶理解術語原意;非投資建議聲明。
評分系統蒐集用戶回饋,建立量化品質評估;所有生成記錄由輸出資料夾保存,可追溯每次執行結果。
以「專家-新手」對話形式降低財經資訊門檻,讓非專業用戶也能理解複雜市場概念,推動知識普及化。
2-3 人團隊,每位成員負責不同的技術子系統,最後共同整合與迭代。
負責 Claude Prompt 工程、news_fetcher、tts_generator 的繁簡轉換與品牌名映射、Asset Router 分類器設計。
負責 chart_generator (Plotly 4 圖表)、image_agent (多來源 + 品質過濾)、video_composer (MoviePy 排版 + 卡拉OK 字幕)。
負責 FastAPI Web Server、SSE 即時串流、SPA 前端、聲優頭像爬蟲、YouTube 上傳、評分統計儀表板。
※ 請於最終提交前以實際團隊成員姓名與分工取代上方 placeholder。
依課程作業 Note 2 規範,本節列出所有引用的程式、模型、資料集與服務,並指出本作如何在其上進行擴展。
合規聲明:所有第三方資源皆為公開 API 或開源軟體,並按各自授權使用。新聞圖片優先採用 CC 授權之 Wikimedia 內容;Guardian / NYT 內容透過官方 API 取得,符合其開發者條款。本作未複製或重新發布任何第三方影音作品。
本系統已具備完整端對端能力,下列為 v2 規劃中的延伸方向,展現對長期演進的視野。
整合 Wav2Lip 或 SadTalker,依 TTS 音訊驅動角色立繪嘴型,提升真實感。當前最高用戶回饋的待改進項。
擴展至英、日、韓三語版本;TTS 切換為 Coqui TTS / OpenVoice,腳本生成新增 prompt template per locale。
每日自動掃多個熱門主題、批次生成 5-10 支影片並排程上傳至各平台(YouTube Shorts / Instagram Reels / TikTok)。
取代固定背景影片,改用 ComfyUI + Stable Diffusion / FLUX 依主題動態生成符合情境的背景圖序列,呼應課程主題。
建立多新聞源 vector store,以 RAG 方式查證 LLM 生成內容,降低 hallucination 風險,加上來源引用標註。
同一份對話腳本同時匯出短影音與長 Podcast,最大化單次內容產出價值;新增主持人風格選擇器。