▶成品範例
這支影片就是用 AUTOMOVIE 產生的:原始素材是一段第一人稱行車紀錄影片加上 FIT 檔, 影片裡的旁白配音、動態字幕、節奏背景音全部由程式自動生成, 內容根據截圖畫面與騎乘數據撰寫,再經人工逐句校對修改。
在 YouTube 上觀看:https://youtu.be/SApBGdFJeu8
i這是什麼/不是什麼
- 單機工具,影片、FIT 檔留在你電腦上原本的位置,程式只記路徑、不複製
- 旁白內容根據真實截圖畫面與 FIT 數據寫成,不是憑空生成
- AI 部分是「帶你自己的」——你自己裝好 Claude Code / Antigravity CLI 等 指令列工具,程式呼叫它,額度算你自己的
- 不需要 AI 也能用:退回數據規則生成(只播數字,沒有畫面劇情)
- 支援同一趟騎乘的多段影片自動接成一支(相機分段錄影也沒問題)
- 可疊加儀表盤(速度/功率/心率/迴轉數/高度/坡度/時間), 位置大小顏色都可自訂並存成配置,跟旁白字幕一次轉檔完成
- 可設定多個 AI 工具依序備援,一個額度用完自動換下一個
- 不是雲端服務,沒有帳號、沒有訂閱
- 不會把你的影片上傳到任何地方(TTS 配音例外,需連微軟的語音服務)
- 不保證 AI 寫的每一句都 100% 正確——程式有自動查核機制會標出可疑句子, 但最終還是要你人工確認
1系統需求
| 項目 | 需求 |
|---|---|
| 作業系統 | Windows 11(Windows 10 未測試) |
| Python | 已內建可攜式版本,免另外安裝 |
| ffmpeg | 已內建(含 GPU 編碼版本),免另外安裝 |
| 網路 | 語音合成(edge-tts)需要連線;若有設定 AI CLI,AI 那部分也需要網路 |
| GPU(選用) | NVIDIA 顯卡若驅動支援 NVENC 會自動使用,加速轉檔;沒有就自動退回 CPU |
| AI CLI(選用) | Claude Code 或 Antigravity CLI 擇一,用來做「截圖場景辨識」與「旁白撰寫」;不裝也能用,但旁白會比較平淡 |
2快速開始
整體流程只有五步,畫面上由上到下依序編號:
- 選擇素材 — 貼上影片路徑與 FIT 路徑(或用「選擇…」跳出檔案總管挑選), 同一趟騎乘有多段影片可以「+ 新增影片片段」逐段加入,按「建立專案」
- 對時 — 讓程式知道「影片的第幾秒」對應「FIT 檔裡的哪個真實時間」, 原始相機檔可以一鍵用檔案本身的錄影時間對時,不用看畫面
- 分析截圖 — 抽取畫面、用 AI 描述每張截圖的騎乘情境; 可以手動設定間隔,也可以交給 FIT 數據自動找出高光時段
- 旁白 / 字幕 — 按「重新產生旁白」讓 AI 根據截圖說明+數據寫腳本, 逐句檢查修改
- 生成影片 — 選解析度、要不要節奏背景音與儀表盤配置, 按「生成影片」,完成後直接在頁面上播放
3Step 1:選擇素材
在「1 選擇素材」區塊貼上影片和 FIT 的絕對路徑,或直接按旁邊的 「選擇…」跳出 Windows 原生選檔視窗(這個視窗是在你自己電腦上開的,不會有任何檔案被傳出去)。
多影片組合(同一趟騎乘的多段錄影)
行車紀錄器有時會自動分段錄影,或某段路你分開錄了好幾支—— 按「+ 新增影片片段」可以依序加入多支影片,它們會依照你加入的順序 自動接在同一條 FIT 時間軸上,最後一次轉檔輸出成一支完整影片, 不需要先用其他軟體剪接、也不會二次轉檔。
參考附件(選填)
按「+ 新增附件」可以加入三種類型的參考資料,內容會被整理成文字, 在後面「產生旁白」時提供給 AI 參考(例如排行榜截圖裡的名次、對手名字):
| 類型 | 用途 | 限制 |
|---|---|---|
| 圖檔 | 排行榜截圖、路線圖等;AI 會讀圖描述內容 | 需要先設定好 AI CLI |
| 網頁連結 | 公開的活動介紹頁、部落格文章 | 需要登入才看得到的頁面(例如 Strava 活動頁)抓不到, 會被自動偵測並擋下,請改用截圖 |
| 文件檔 | .txt / .md / .csv 直接讀;.docx 也支援 | — |
每一筆附件旁邊都有「測試讀取」按鈕,加進去當下就能確認抓不抓得到內容,不用等到跑到一半才發現。
4設定 AI(選填,但強烈建議)
這是整個工具「有沒有靈魂」的關鍵設定。AI CLI 負責兩件事:看截圖描述畫面內容、 根據截圖說明與數據寫旁白。不設定也能用,但旁白會退回純數據播報(沒有畫面劇情)。
AI 指令鏈:一個掛了自動換下一個
可以設定多個 AI 工具,由上而下依序嘗試。第一個連不上、額度用完、 或發生任何錯誤,會自動換下一個,全部失敗才報錯(錯誤訊息會列出每個工具各自的原因)。 成功的那個會被記住,之後直接從它開始,不會每次都重試掛掉的那個—— 這點很重要,一次連拍分析可能呼叫數十次,每次都先等一個壞掉的工具逾時會多花好幾分鐘。
目前程式認得並且已經實測驗證過能正常運作的工具:
| 工具 | 安裝方式 | 備註 |
|---|---|---|
| Claude Code | npm install -g @anthropic-ai/claude-code |
用你目前登入的 Claude 額度,不用另外申請 |
| Codex CLI | npm install -g @openai/codex |
最快:圖片用 -i 直接附加給模型,不是叫它自己開檔。
實測 6 張連拍 10.2 秒,Claude Code 同樣 6 張要 22.6 秒 |
| Antigravity CLI | winget install Google.AntigravityCLI |
Google 出的終端 AI 代理工具, 完整安裝與認證步驟看這裡 → |
| Gemini CLI | 自行安裝並登入 | 指令範本尚未實測驗證,填入後請按「測試」確認 |
{prompt}
執行時會被換成程式要問的問題,{image} 會被換成一張截圖的實際路徑。
例如填 claude -p "{prompt} 圖片路徑: {image}" --allowedTools Read,
實際執行時就會變成
claude -p "描述這張圖...圖片路徑: C:\...\f_001.jpg" --allowedTools Read。
金鑰、登入額度都是你自己的 CLI 在管,本程式不會儲存任何金鑰,只存這串指令文字本身。
| 變數 | 作用 |
|---|---|
{prompt} | 程式要問的問題文字 |
{image} |
截圖路徑。單獨當成一個參數時會展開成多個檔案,
給 -i a.jpg b.jpg 這種多圖參數用;
純文字呼叫(寫旁白)時會連同前面的旗標一起移除,不會留下沒有值的 -i |
{out} |
暫存檔路徑。填了就從該檔讀答案而不是讀螢幕輸出—— 適合會在畫面印出工作階段訊息、token 統計的工具(例如 Codex) |
5Step 2:對時
程式需要知道「影片第幾秒」對應「FIT 檔裡的哪個真實時間戳記」, 才能把心率、功率、速度這些數據跟畫面對上。只需要抓一個對應點, 剩下的時間軸就會自動算出來。三種方式由簡到繁:
- ⏱ 用檔案時間對時(推薦・免 AI):沒經過剪輯軟體轉檔的相機原始檔, 本身就帶有錄影開始的時間(容器 metadata、部分機型連檔名都有), 按這顆按鈕一鍵讀取、自動比對 FIT 的騎乘時段,通常一秒內就對好, 連 AI CLI 都不用設定
- 🤖 AI 判讀畫面時鐘:如果影片畫面角落有燒錄時鐘浮水印 (例如已經過 DJI Studio 等軟體處理過的影片),設定好 AI CLI 後 按這顆按鈕,AI 會直接讀圖上的時間文字自動對時
- 手動輸入:前兩種都不行時的保底方案,看畫面裡的時鐘,
照「時:分:秒」格式輸入即可(例如
08:57:11)
6Step 3:分析截圖
這一步做兩件事:抽取畫面(純本機運算,不花 AI 額度)跟 AI 場景辨識(每張截圖真的會呼叫一次 AI,會花額度跟時間)。
兩種找截圖時機的方式
- 手動間隔:自己填「每 N 秒截一張」,整支影片平均取樣, 涵蓋最完整,但平淡路段也會截圖、花比較多 AI 額度
- 透過 FIT 自動分析場景:勾選後「截圖間隔」欄位反灰不用填, 改由程式分析功率/心率/迴轉數/速度的波動大小自動找出全程最精彩的 幾個時段,只在那些時段截圖分析——平淡路段完全不截圖、不花 AI 額度, 同樣的預算能把更多次數花在真正有故事的地方
每批連拍張數(兩種模式都能用)
設 1 是傳統的「單張看圖說故事」模式;設大於 1(例如 5)時, 連續的幾張截圖會整批一次送給 AI,改問「這幾秒發生了什麼變化」—— 誰從哪一側超車、跟前車距離拉近或拉開、隊形怎麼變化, 這種跨張比較單張截圖天生看不出來,連拍多張後描述會明顯更生動、更連貫。 自動分析場景模式下,每個高光時段就是連拍「每批連拍張數」張、每秒一張。
7提示詞範本庫
如果你發現旁白的風格、用詞、規則想要調整(例如想要更活潑、想要固定的收尾格式、
想要主角用特定名字稱呼),這裡就是動手的地方。範本存在本機的 SQLite 資料庫
(app/data.db),每個專案可以各自選用不同範本。
| 範本 | 作用 |
|---|---|
| 截圖說明範本 | 決定 AI 怎麼描述每一張截圖的畫面內容 |
| 旁白生成範本 | 決定 AI 怎麼把「截圖說明+騎乘數據+附件+補充背景」
寫成最終的旁白台詞,可用變數如 {"{"}duration{"}"}
{"{"}table{"}"} {"{"}scenes{"}"}
{"{"}context{"}"} 等 |
8Step 4:旁白 / 字幕編輯
- 旁白聲音:共 14 個中文聲音(台灣 3、大陸 8、香港 3), 其中「大陸・男聲・體育賽事風格」語速快而有力,很適合熱血轉播。 每句旁白左邊有一顆 ▶,按下去約兩秒就能立刻試聽這個聲音唸出來的效果, 不必等整支轉檔
- 旁白最大空白(秒):一句唸完之後最多隔幾秒要有下一句,避免影片出現太長的無聲空白。 設小=密集熱鬧,設大=留白多
- ✨ 重新產生旁白:根據目前的截圖說明(含你手動修正過的)+數據+附件+ 補充背景,重寫整份旁白稿——這一步不會重跑截圖辨識,很快
- 畫面查無標示:如果某句旁白提到的細節(左右方向、機車、超車等) 在該時間點附近的截圖說明裡找不到根據,那一句會被標橘色提醒你複查—— 這是輔助檢查,不是絕對正確的判定
AI 生成旁白…(旁白範本:正式版),看那一行就知道實際用了哪一份。
9Step 5:生成影片
| 選項 | 說明 |
|---|---|
| 解析度 | 原始(依來源)/1080p/720p |
| 編碼 | 自動(偵測到可用 GPU 就用 GPU)/強制 GPU/強制 CPU |
| 旁白聲音 | 14 個中文聲音(edge-tts,全部免費),與 Step 4 的選擇連動 |
| 節奏背景音 | 心率+功率驅動的節奏底層音效,音量可調 |
| 片尾停留(秒) | 最後一個畫面多停幾秒,讓收尾的旁白唸得完 |
| 旁白提前(秒) | 整份旁白與字幕一起往前挪,預設 0.5。因為講話需要時間, 在該秒才開口的話,關鍵字唸出來時畫面往往已經過去了; 提前一點可以讓描述正好落在那個畫面上。字幕與語音永遠一起移動, 不會互相錯開 |
生成過程中有真實的進度條(不是假動畫,是解析 ffmpeg 實際回報的編碼進度算出來的), 右側有「⏹ 中止」按鈕,按下去約 1 秒內就會真的停止轉檔行程並清掉半成品檔案。
📟 儀表盤(從 FIT 數據疊加到畫面)
勾選「儀表盤」後,主流程只需要選一個配置並填標題文字即可。 要調整每個數值的位置、大小、顏色,按「🎛 開啟編輯器」會在新分頁打開專用編輯器。
- 直接拖曳:預覽圖上的方塊可以直接拖到想要的位置,放開就寫回右邊的數值。 沒人在腦中換算百分比,所以位置這件事就在畫面上直接指
- 真的即時:預覽不是每次都重跑 ffmpeg(那要好幾秒),而是抓一張乾淨畫格當底、 用網頁元素把儀表盤疊上去,錨點與字級換算跟實際輸出用同一套規則。 實測拖曳一次約 0.15 秒
- 🎬 實際渲染確認:旁邊這顆會跑真正的 ffmpeg 出一張圖, 字體描邊之類的細節以它為準
- 存成配置:調好的版面可以命名存起來跨專案重複使用(存在
data.db), 之後回主流程選它即可 - 時間可加日期:時鐘格式可選「只有時間/日期+時間(兩行)/只有日期」
?常見問題
影片會被複製或上傳嗎?
不會。程式只記錄你貼的路徑,讀取都是直接對原始檔案操作。 唯一會離開這台電腦的資料是:語音合成(連微軟的 edge-tts 服務)、 以及你自己設定的 AI CLI 呼叫(連你自己 CLI 對應的服務)。
沒有 AI CLI 可以用嗎?
可以。分析截圖那步把「使用 AI 辨識畫面內容」取消勾選, 旁白生成就會退回純數據規則生成(照時速/心率/功率的變化播報), 不會有畫面劇情內容,但功能完全能跑。
轉檔跑到一半可以中止嗎?半成品會留在硬碟上嗎?
可以中止,每個工作階段(分析截圖/產生旁白/生成影片)進度條旁邊都有中止鍵。 中止轉檔時,半成品的 mp4(打不開的壞檔)會被自動刪除,不會留下垃圾檔案。
旁白內容不準確、憑空編造細節怎麼辦?
三層防護:①提示詞明定「不可編造,時間點誤差不超過 2 秒、方向細節要照抄」; ②程式會自動把單張截圖無法判斷的「超車/被超車」描述先過濾掉, 不讓這種本來就不可靠的資訊進到旁白生成的素材裡; ③旁白編輯區會把「畫面查無根據」的句子標橘色提醒你複查。 即使如此,AI 仍可能出錯,最終請以人工複查為準。
網頁連結附件抓不到內容?
常見原因是那個網址需要登入才看得到內容(例如 Strava 活動詳細頁)。 程式會偵測登入頁的特徵字樣並主動擋下,避免把「請登入」這種無意義文字 誤當成真實資料餵給 AI。遇到這種情況請改用截圖,存成圖檔附件。
換了截圖間隔要重新辨識嗎?
不用。截圖說明用時間點存快取,跟間隔脫鉤——不管你怎麼調整間隔, 已經辨識過的時間點永遠不會重花一次 AI 額度。
多段影片一定要解析度、幀率都一樣嗎?
是的,這是 ffmpeg 直接串接畫面流所必須的限制。 同一台相機同一次設定拍出來的通常沒問題;不一致的話建立專案時就會被擋下, 並告訴你哪一段的規格對不上,不會等轉檔轉到一半才失敗。
「透過 FIT 自動分析場景」會不會漏掉重要畫面?
它只看得到功率/心率/迴轉數/速度的數據波動, 抓不到「純視覺事件」——例如漂亮的風景、路牌地標、單純停等紅燈 (這些時候數據通常很平穩,不會被判定為高光)。 如果這些畫面對你很重要,建議改用手動間隔模式,或間隔調小一點。
轉檔跑到一半網頁斷線/不小心關掉了怎麼辦?
工作是在背景跑的,跟網頁分開。短暫斷線時進度條會顯示「連線中斷,自動重試中」 並持續嘗試最多五分鐘,恢復後自己接回去;重新整理或重開網頁、再載入同一個專案, 也會自動接回還在執行的工作,完成時照樣往下開下一個步驟。
旁白把「心率」唸成「心帥」?
「率」有兩個讀音,語音引擎在「心率」會挑錯。程式會在送去合成之前 把它換成同音的寫法,字幕仍然顯示正確的「心率」——看到的跟聽到的都對。 語音快取是以「實際唸出的文字」為鍵,所以修正後舊的錯誤發音不會被沿用。
GPU 沒有被使用?
程式啟動時會實際測試一次 NVENC 能不能用(不是只看驅動版本號), 設定頁最上方會顯示目前偵測到的 ffmpeg 路徑跟 GPU 狀態。 若你的顯卡驅動版本跟 ffmpeg 要求的 NVENC API 版本不匹配, 會自動退回 CPU 編碼,仍然能正常轉檔,只是速度較慢。