汽車粵語書面語單行字幕
執行邊界
- 語音辨識與媒體處理在本機完成,不上傳音視訊到辨識 API。準備時可下載公開模型和依賴;離線處理時不自動下載或改用雲端。
- 由當前助手進行文字校準。助手使用線上模型時,轉寫文字會交給線上模型,不得描述為全鏈路離線。若使用者要求文字也離線,則使用本地文字模型,缺少時說明實際限制。
- 最終交付 UTF-8
.srt,每條恰好一行文字,帶對應原媒體的時間軸,不以純文字稿代替。 - 預設無句讀標點,保留數值、單位及正式名稱必需符號,例如
1.8米、30%、-5℃、0—100km/h、CX-5。不能把「無標點」理解為刪除所有非漢字字元。 - 輸入、原始辨識結果、校準記錄和最終字幕分別儲存,不覆蓋原檔案。
環境與任務反饋
- 先展示清單,再執行。 使用 references/task-progress.md 的狀態約定,每步驗證通過後打勾;進入步驟、完成、失敗或等待使用者時立即更新。長任務在有執行機會時約每60秒報告當前步驟、耗時和最近進展,不編造百分比,不承諾軟體不支援的背景推送。
- 統一腳本準備與自檢。 首次準備或環境故障先按 references/runtime-setup.md 執行
scripts/setup_runtime.py,不要臨場拼裝安裝命令或隨意改依賴版本。腳本先唯讀檢查本機記錄、已知環境和使用者指定直譯器,通過則復用,否則分步建立專用環境;安裝日誌和進度落盤。音訊解碼、模型載入、短樣本推理分別驗證。依賴故障的進一步處理見 references/environment-recovery.md。不修改系統Python,不硬編碼開發者電腦路徑。 - 國內網路先檢查下載來源。 確需安裝依賴時,優先檢查國內可信HTTPS鏡像的可達性及所需版本,再為本次命令臨時指定;不修改全域pip設定。提醒應顯示實際套件名稱、來源及可獲得的下載進度,不能只說「PyTorch較大,請等待」,也不能把全部依賴的體積算成PyTorch大小。詳見環境恢復說明。
- 先有證據,再修故障。 保留完整錯誤和退出碼,區分網路、建構/版本、權限及已證實的安全攔截。僅憑pip失敗、臨時目錄或刪除檔案字樣不能判定安全攔截;不預設要求關閉防護、放行未知檔案或重新啟動。需使用者操作時說明具體依據、目標操作、影響及恢復方式。
- 失敗可續接。 基礎工具、Whisper、Qwen分步準備並儲存日誌。針對同一錯誤,有依據修復後最多自動重試一次;仍失敗則停止該步驟,報告中斷點,繼續不依賴它的工作。使用者說「繼續」時先核對記錄及執行中任務,從仍有效的中斷點恢復,不重複啟動安裝或下載。
工作流程
- 確定成片畫幅。 視訊用
scripts/subtitle_profile.py探測顯示尺寸,考慮旋轉和畫素寬高比,忽略MP3封面等附圖。最終剪輯尺寸優先於來源視訊,使用者指定豎屏時不能按橫屏來源檔案套橫屏預設。音訊沒有畫幅:使用使用者已給的成片設定;未知時詢問橫屏或豎屏,也可在使用者需要時各出一套,不把猜測稱為自動辨識。詳見 references/subtitle-layout.md。 - 本地辨識與交叉檢查。 檢查模型完整性,使用 Whisper large-v3 與 Qwen3-ASR-1.7B,保留原文和時間資料。Qwen預設輸出文字用於交叉校準,時間定位參考Whisper及原音訊;只有需要額外對齊且驗證通過時才載入可選ForcedAligner,不把對齊模型作為基礎執行的必需下載。相同素材、相同背景詞做比較。短樣本依次執行;超過180秒使用
scripts/transcribe_long.py管理重疊視窗、唯一檔名、時間偏移和已完成結果復用,不臨時寫shell迴圈。腳本只保守去除時間和文字均匹配的重複片段,其餘接縫進入待審;須結合雙模型和原音訊完成語義去重,不直接拼接視窗正文當成終稿。執行說明見 references/local-testing.md。首次對比以無提示詞結果為基線。漏段、重複、可疑額外內容須用原音訊短片複測,不能只憑一個模型認定正確。 - 先校準、後斷句。 當前助手對照兩模型原文、相鄰語境和本地術語資料,依據 references/editorial-rules.md 修正專名及同音候選,並生成保留標點的簡體書面語工作稿。保留條件、否定、數字、推測和立場。語言推斷只生成候選,不等於聽音或外部核驗。
- 按畫幅拆成單行語義單元。 不再要求一整句獨佔一條字幕。允許將長句改寫為連續、自然的語義短句,每條能表達一個清楚的小意思。不能按固定字數硬切,不能拆開品牌車型、姓名、固定術語、數字與單位,不能產生孤立連線詞或半截主謂/動賓結構。盡量落入畫幅建議長度,短回答不為湊字補內容。不要為了縮短而丟條件、數字或改觀點。超過長度上限時重新改寫或分句,不折行、不截斷。
- 多人發言分別處理。 不將不同人的問答拼成一句或同一行,不再用兩行對話同屏規避短字幕。短回應使用實際語音區間,可在靜音間隙適當延長顯示,但不越過下一位發言。無說話人分離時不憑文字編造人物身份,輪次不清或重疊人聲進入待審,不保證已經解決串人。
- 逐語義單元匹配時間。 使用對應原始詞/片段的起止點,保留來源映射及媒體偏移。拆出新的短句必須重新定位聲音,不把舊長句的時間按字數均分。只能用原始粵語轉寫做強制對齊,不能用改寫後的普通話文字對齊粵語發音。對齊失敗時復聽/重對齊,不偽造精確時間。
- 最後清標點並匯出。 斷句和時間確定後,匯出器清理句讀、合併多餘空格並轉換簡體,保護必要符號;清理後再驗單行、寬度、速度、重疊和越界。字幕 JSON 包含
media_duration、subtitle_profile、cues,可選protected_terms,schema與呼叫見畫幅說明。scripts/export_srt.py遇換行、超寬或明顯粵語殘留會拒絕匯出,須修正語義/時間後重試,不繞過檢查。 - 預覽與驗收。 配置成片字型、字型大小、安全區時優先測量字型寬度;只用漢字寬度估計時明確其局限。SRT不可靠攜帶畫幅或樣式,剪輯軟體仍可能自動換行,必須匹配同一字幕預設並在最終畫幅預覽。有實際回聽/播放才報告已驗證同步;只有結構檢查不能視為準確或聲畫同步合格。
交付
<素材名>_橫屏.srt/<素材名>_豎屏.srt;未決專名、內容、輪次或時間疑點則用.review.srt標識待審稿。- 疑點清單獨立記錄時間位置、原辨識、候選、依據和未決原因,不把說明塞進發布字幕正文。
- 同步記錄成片預設來源:實際探測、使用者指定或僅畫幅選項,不能把原視訊尺寸等同於最終成片尺寸。
- 測試保留各模型原始結果及綜合校準記錄,區分辨識、改寫、分句和時間軸問題。不把綜合校準稿當作單一模型獨立準確率,不給沒有人工參考稿支援的準確率。