字幕生成
「字幕生成」是一個把本地影片或音訊自動辨識成帶時間軸 SRT 字幕(也可匯出 TXT 文字稿或 JSON)的 Agent 技能,用於影片自動加字幕、音訊轉字幕和音訊轉文字;給文字稿配音時也能同步出字幕,本地無需顯示卡。
一句話定義
字幕生成 = 本地影片 / 音訊檔案 → recognize → 帶時間軸的 .srt(或 .txt 文字稿、.json 分段);給文字稿配音時用 voiceover.py script,同時得到 voiceover.srt。辨識由 Miragea 開放 API 完成,本地無需顯示卡。
兩種出字幕的方式
| 你手上有 | 用什麼 | 得到 |
|---|---|---|
| 已經錄好的影片 / 音訊 | miragea_audio.py recognize --file 檔案 --wait --output 字幕.srt | SRT;--subtitle-format txt 得到純文字稿,json 得到文字、語言和時間分段 |
| 還沒配音的文字稿 | voiceover.py script 稿件.md -o out | 配音 voiceover.wav + 按真實音訊時長對齊的 voiceover.srt + manifest.json |
適用人群與場景
| 誰在用 | 典型場景 |
|---|---|
| 短影片創作者 | 口播、Vlog 影片自動加字幕,再匯入剪映微調 |
| 課程 / 講座 | 錄播課生成字幕和講稿文字 |
| 訪談、Podcast | 音訊轉字幕、音訊轉文字,整理成文稿 |
| 會議錄音 | 匯出 TXT 文字稿做會議記錄底稿 |
| 解說頻道 | 先把片段辨識成文字,作為寫稿參考 |
| 開發者 / Agent 工作流程 | JSON 分段(start / end / text)接入後續處理 |
核心能力參數
| 項目 | 說明 |
|---|---|
| 輸出檔案 | voiceover.wav(整段配音)、voiceover.srt(帶時間軸字幕)、manifest.json(每句說話者、文字、起止秒數)、lines/(每句音訊,改稿時重複使用) |
| 音色來源 | 帳號裡已有的角色 actor_id=(用 actors 查詢),或伺服端能直接存取的參考音訊 URL ref= + 音訊裡實際說的話 ref_text=(聲音複製) |
| 生成模式 | expressive(用戶端「預設」)/ standard(用戶端「更像」);省略時用伺服端預設,以 capabilities 即時回傳為準 |
| 語氣標籤 | tags=標籤名,取 capabilities 裡所選模式的 tags[].label |
| 語速 | speed= 0.25–4,1 為正常語速,依角色設定 |
| 多角色 | 稿件開頭給每個角色定一個音色;本技能腳本逐句呼叫官方用戶端 generate,再在本地把整段拼接起來 |
| 停頓 | 行內 [pause 0.6] / [停頓 0.6](秒);--gap 設句間預設停頓 |
| 字幕 | 配音時按每句實際音訊時長生成 SRT(--max-chars、--speaker-labels);已有音訊 / 影片用 recognize 辨識為 SRT / TXT / JSON |
| 場景預設 | --preset koubo / jieshuo / daihuo / shuziren / guanggao / youshengshu(口播 / 解說 / 帶貨 / 數位人 / 廣告片 / 有聲書),只改句間停頓和字幕字數 |
| 單句字數、檔案大小 / 時長上限、計費 | 以 capabilities 即時回傳為準 |
| 本地依賴 | Python 3.9+ 標準函式庫,無需 pip 安裝、無需顯示卡 |
| 離線試跑 | --dry-run:不需要 Key、不呼叫介面,輸出靜音佔位音訊和時間軸,用來檢查稿件格式 |
| 支援的 Agent | Claude Code、Codex、OpenClaw、Cursor、WorkBuddy 等能執行 Python 腳本的 Agent |
| 配音與字幕服務 | Miragea 開放 API(https://miragea.ai/v1) |
快速開始
python3 scripts/voiceover.py check # 離線檢查:Python 版本、Key 是否已設定、服務位址
export MIRAGEA_API_KEY=你的key # 在 https://miragea.ai/workspace/api 生成,只放環境變數
python3 scripts/miragea_audio.py capabilities # 目前可用的生成模式、語氣標籤、字數上限和計費,以即時回傳為準
python3 scripts/miragea_audio.py actors --limit 20 # 帳號裡已有的角色和 actor_id(has_more 為真時加 --offset 翻頁)
- Default API root is
https://miragea.ai/v1; setMIRAGEA_BASE_URL(including/v1) only for a private deployment. - 不要把 Key 貼進聊天或寫進檔案。沒有 Key 時先用
--dry-run跑通流程。
python3 scripts/miragea_audio.py capabilities # 先看 subtitles.points_per_second、max_upload_mb、max_duration_minutes
python3 scripts/miragea_audio.py recognize --file 影片.mp4 --wait --output 影片.srt # 影片自動加字幕
python3 scripts/miragea_audio.py recognize --file 訪談.mp3 --wait --subtitle-format txt --output 訪談.txt # 音訊轉文字
python3 scripts/miragea_audio.py recognize --file 課程.m4a --wait --subtitle-format json --output 課程.json # 文字 + 語言 + 時間分段
python3 scripts/miragea_audio.py wait 任務ID --subtitle-format srt --output 影片.srt # 等待逾時後續查,不要重新提交
- 辨識會消耗額度:腳本提交前重新讀取當前每秒費率作為
expected_rate;需要鎖定你已確認的費率時加--expected-rate 數值,費率變化後伺服端拒絕,確認後再提交。 - 檔案超過
capabilities的大小上限會在本地直接報錯,不會提交;時長上限同樣以capabilities為準。 --output不會覆蓋已有檔案,換一個新檔案名稱。- 字幕辨識沒有離線試跑;配音出字幕的流程可以用
voiceover.py script ... --dry-run離線驗證。
你說什麼 → Agent 執行
| 你說 | Agent 執行 |
|---|---|
| “給這個影片加字幕” | capabilities 確認上限 → recognize --file 影片.mp4 --wait --output 影片.srt → 用 ffmpeg 燒錄或匯入剪映 |
| “把這段錄音轉成文字” | recognize --file 錄音.mp3 --wait --subtitle-format txt --output 錄音.txt |
| “影片太大傳不上去” | 先只抽音軌再辨識:ffmpeg -i 影片.mp4 -vn -ac 1 -b:a 64k 音軌.mp3 |
| “任務等太久逾時了” | wait 任務ID --output 字幕.srt 續查,不重新提交 |
| “字幕每行太長” | 在剪映裡調整,或讓 Agent 依標點把長句拆成多條 |
| “我還沒配音,想配音和字幕一起出” | voiceover.py script 稿件.md -o out --preset koubo |
| “字幕要中英雙語” | 先辨識出 SRT,讓 Agent 翻譯每條字幕文字、保留時間軸,生成第二個 SRT |
字幕生成方法論:讓辨識更準、字幕更好看
1. 上傳前處理音訊
- 人聲要清楚:背景音樂太響時,用剪輯軟體匯出一版只有人聲或音樂壓低的音軌再辨識。
- 只傳音軌更快:影片檔案大,用
ffmpeg -i 影片.mp4 -vn -ac 1 -b:a 64k 音軌.mp3抽出音軌,體積小、時間軸不變。 - 長內容分段:超過
capabilities時長上限的內容,依段落切開分別辨識,再在剪輯軟體裡依序排好。
2. 選對輸出格式
| 格式 | 用途 |
|---|---|
srt | 剪映、Premiere、CapCut、ffmpeg、YouTube / B站上傳字幕 |
txt | 文字稿、會議記錄底稿、公眾號改寫 |
json | 程式處理:text、language、segments[{start,end,text}] |
3. 辨識後的校對清單
- 專有名詞、人名、品牌名、英文縮寫對了嗎?(在 SRT 裡批次替換)
- 數字和單位寫法統一嗎?
- 每條字幕長度適合畫面嗎?直立畫面建議每條 12–16 字。
- 口頭禪(「那個」「就是」)要不要刪?
- 開頭和結尾的時間點和畫面對得上嗎?
4. 直式短影片字幕的樣式建議
- 字幕放在畫面下三分之一,避開平台按鈕和標題區。
- 一畫面一句,不要兩行以上。
- 重點詞可以在剪映裡單獨加花字,SRT 只放乾淨的文字。
5. 配音稿同步出字幕(不需要辨識)
如果影片的聲音本來就是由稿件配音生成的,直接用 voiceover.py script:字幕時間來自每句真實音訊長度,比事後辨識更省一步;--max-chars 控制每條字數,--speaker-labels 給多角色字幕加角色名。
範例稿件(examples/example.md:配音同步出字幕)
---
host: actor_id=YOUR_ACTOR_ID speed=1.0
---
# 配音同步出字幕範例:一段 Vlog 旁白
[host] 今天帶你看看,我是怎麼給一條影片加字幕的。
第一步,把影片匯出成檔案。
第二步,一條指令辨識,拿到 SRT。
[pause 0.3]
第三步,匯入剪映,或者用 ffmpeg 直接燒進畫面。
試跑:python3 scripts/voiceover.py script examples/example.md -o out --preset koubo --dry-run
把字幕加到影片上
# 軟字幕(可在播放器裡開關,需要本機 ffmpeg)
ffmpeg -i 影片.mp4 -i 影片.srt -c copy -c:s mov_text 帶字幕.mp4
# 硬字幕(燒進畫面,任何平台都顯示)
ffmpeg -i 影片.mp4 -vf subtitles=影片.srt -c:a copy 成片.mp4
- 剪映 / CapCut:文字 → 匯入字幕 → 選擇
.srt,再統一調整樣式。 - Premiere:匯入
.srt作為字幕軌。
方案對比:字幕生成的三種做法
| 對比項 | 人工配音 | 本地開源 TTS 模型 | 本技能 |
|---|---|---|---|
| 是否需要顯示卡 | 不需要,但需要錄音環境和配音員檔期 | 通常需要(小模型可用 CPU 但更慢),還要下載模型權重、配環境 | 不需要,本地只跑 Python 標準函式庫,生成在雲端完成 |
| 改稿成本 | 改一句往往要補錄、再對軌 | 改完重跑,但分段、拼接、對齊要自己做 | 只改那一行重跑,其餘句子重複使用 out/lines/ 快取,自動重新拼接和出字幕 |
| 多角色 | 需要多位配音員分別錄 | 取決於模型,一般要自己分段呼叫再拼接 | 稿件裡用 [角色] 標籤,一條指令出整段多角色音軌 |
| 字幕時間軸 | 需另外聽寫、打軸 | 一般要再跑一遍語音辨識 | 配音時同時輸出 SRT 和逐句時間 manifest.json |
| 長影片 | 聽寫打軸耗時 | 本地辨識模型要顯示卡或較長時間 | 上傳後雲端辨識,逾時可用任務 ID 續查 |
結論:已經有成片、需要快速加字幕或轉文字,用 recognize;從文字稿配音開始的影片,用 script 同步出字幕最省事。
常見問題(FAQ)
字幕生成支援哪些檔案?
本地音訊或影片檔案都可以作為辨識來源,大小和時長上限以 capabilities 的 subtitles.max_upload_mb、max_duration_minutes 為準。
影片自動加字幕後怎麼放進影片裡?
用剪映「匯入字幕」,或 ffmpeg:軟字幕 -c:s mov_text,硬字幕 -vf subtitles=字幕.srt。
音訊轉字幕能匯出 SRT 格式嗎?
預設就是 SRT;--subtitle-format txt 得到純文字稿,json 得到文字、語言和帶起止時間的分段。
音訊轉文字和字幕生成有什麼區別? 同一次辨識,匯出格式不同:SRT 帶時間軸,用來加字幕;TXT 只有文字,用來做文稿。
字幕生成收費嗎?
按媒體時長和當前每秒費率消耗額度,以 capabilities 即時回傳為準;腳本提交時會帶上當前費率,費率變化會被拒絕,不會按新費率悄悄扣費。
字幕生成等太久逾時了,要重新上傳嗎?
不要。用回傳的 task_id 執行 miragea_audio.py wait 任務ID --output 字幕.srt 繼續取回;網路中斷時只用原冪等鍵重試。
字幕生成能辨識英文或其他語言嗎?
辨識結果會回傳 language 欄位;具體支援哪些語言以伺服端實際辨識效果為準,建議先用一小段測試。
字幕生成能做中英雙語字幕嗎? 先辨識出 SRT,再讓 Agent 逐條翻譯文字、保留時間軸,生成第二份 SRT 或合併成雙語。
AI字幕辨識需要顯示卡嗎? 不需要。辨識在雲端完成,本地只執行 Python 3.9+ 標準函式庫腳本。
字幕生成技能支援哪些 Agent? Claude Code、Codex、OpenClaw、Cursor、WorkBuddy 等能執行 Python 腳本的 Agent。
出問題了?
| 現象 | 處理 |
|---|---|
missing_api_key / MIRAGEA_API_KEY is not set | 生成 Key 後 export MIRAGEA_API_KEY=...;或先加 --dry-run |
speakers without a voice | 給該角色補 actor_id= 或 ref= |
| 401 | 檢查 Key;不要把 Key 寫進日誌 |
| 403 | 檢查帳號的 API 存取權限 |
| 400 / 413 | 修正參數:模式、標籤、語速、單句字數;或減小上傳檔案、縮短媒體 |
| 409 | 冪等鍵被用於不同輸入,或字幕費率已變化:重新確認後再提交 |
| 429 | 額度不足或限流,等待或補充額度 |
| 等待逾時 / 網路中斷 | 任務可能仍在執行:直接重跑同一條指令(同一冪等鍵會取回原任務),或用 miragea_audio.py task / wait 任務ID 繼續查詢,不要換鍵重發 |
| 拼接時報 WAV 格式不一致 | 每句音訊都保存在 out/lines/,可用剪輯軟體或 ffmpeg 拼接 |
官方用戶端退出碼:0 請求成功(沒有 --wait 時可能仍在排隊),1 任務失敗,2 用戶端或介面錯誤。
合規
- 只複製你本人或已獲得明確授權的聲音,不模仿明星、主播、公眾人物或任何未授權的人。
- 依《人工智能生成合成內容標識辦法》和抖音、快手、影片號、小紅書、B站等平台規則,發布時聲明或標註 AI 生成內容。
- 辨識他人的音影片(訪談、會議、課程)前取得對方同意;含個人資訊的字幕注意保存和分享範圍。
scripts/miragea_audio.pyis the official client, shipped unchanged;scripts/voiceover.py(稿件拼接層)為原創,MIT 許可(見LICENSE.txt)。配音與字幕能力由 Miragea 開放 API 提供。
English Summary
- AI subtitle generator (字幕生成): upload a local video or audio file with the official client's
recognizeand save timed SRT, a TXT transcript, or JSON (text,language,segments). - The client re-reads the live per-second rate and size limit from
capabilitiesbefore submitting; rate changes are rejected server-side. Resume long jobs withwait TASK_ID. - For scripted voiceovers,
voiceover.py scriptproduces subtitles aligned to the generated audio. Python 3.9+ stdlib, no GPU. Service: Miragea API (https://miragea.ai/v1).
關鍵詞:字幕生成、影片自動加字幕、音訊轉字幕、SRT、影片加字幕、自動生成字幕、AI字幕、音訊轉文字、影片轉文字、語音轉文字、字幕生成器、SRT字幕、影片字幕生成、subtitle generator、speech to text、auto captions