跳至主要內容
SubtitleMatrix

字幕依音訊重新對時

媒體輸入依音訊重新對時

首次執行會下載影片引擎 —— 約 31 MB,由本站提供,之後瀏覽器會快取。它只用來讀取音軌;字幕是直接與聲音本身比對的,不用語音模型,也不上傳任何內容。

選項

字幕可能偏離正確位置多遠,兩個方向都算。這是成本與風險的設定,不是精確度設定:範圍越寬能找到越大的漂移,但搜尋也有更多機會停在一個碰巧分數很高的巧合上。超過大約一分鐘的偏移通常不是片頭裁切或台標造成的 —— 那麼大的偏差往往意味著影片是另一個剪輯版,或者影格率不符,這些這一頁另有辦法處理。選能涵蓋你猜測的最小範圍。

這一頁修的是順序沒錯、時間不對的字幕。你給它兩樣東西——字幕檔,以及它所屬的影片或音訊——它算出文字漂了多遠,然後把每條字幕移動之後重新寫出一份檔案。幾秒的漂移通常來自片頭裁剪或台標;隨時間越拉越大的漂移則來自影格率不匹配,例如 23.976 fps 的母版配上了按 25 fps 計時的字幕,誤差到第一個小時結束時已經累積一分半。

測量來自音訊本身。頁面抽出一條單聲道音軌,把它折成二十毫秒一格的響度,標出哪些格裡有語音。然後反覆問同一個問題:在這個偏移和這個速度變化下,字幕文字有多少落在語音上,而不是落在靜音上?答案按字幕條打分再平均,勝出的那一組參數會被套用。全程不做語音辨識,所以它幾秒就能跑完,也能在字幕語言與音訊語言不同、沒有對應模型時工作。

因為分數是測量而不是保證,頁面被設計成在測量很弱時什麼都不做。五條字幕或更少、音軌裡偵測不到語音、最佳分數仍然把大部分字幕時間放在靜音上,或者兩組差異很大的對齊得分差不多——每一種情況都會以一份報告結束,而不寫出新的字幕檔。安靜的失敗遠好過自信的失敗:被推偏五秒的字幕只是難看,被一個聲稱成功的工具推偏五秒的字幕,則很難發現、也很難解釋。

對齊結果良好時會得到兩份檔案,因為它們回答不同的問題。修正後的字幕保持原來的格式,命名為 film.synced.srt 或對應的副檔名,可以直接播放。報告是一份小型文字檔(film.sync.txt),寫明偏移的毫秒數、實際套用的比例、分數、信心值,以及一行說明檔案到底有沒有被更動。兩份來自同一次執行,所以批次處理一整季影集時,每一集都會得到配對的一組產物。

工作在本機完成。音訊由編譯成 WebAssembly 的 ffmpeg 解碼,引擎從本站下載一次後快取;字幕在分頁裡解析。關於你的影片和字幕,沒有任何內容被傳送出去——沒有需要跳過的上傳步驟,這對不允許離開本機的素材很重要。

常見問題

字幕按音訊對時量出的偏移,和我自己填進平移頁的數字有什麼不同?

平移頁套用的是你已經知道的數字,所以無論音訊同不同意,結果都照做。這一頁從相反的一端開始:它假定你不知道這個數字,從音訊裡讀出語音活動,再把偏移和速度變化一起解出來。這也是它能修影格率問題的原因——任何單一偏移都表達不了那種錯位:25 與 23.976 之間,片頭誤差為零、越到後面越大,修好開頭的平移會把結尾弄得更糟。

為什麼字幕按音訊對時有時乾脆不寫新的字幕檔?

因為錯誤的修正比缺失的修正更難察覺。搜尋會報告四件事:有多少條字幕可用、音軌裡有沒有語音、字幕時間有多大比例落在語音上、勝出的方案比另一個真正不同的方案好多少。其中任何一項太弱,這次執行就只產出報告,狀態行寫著 not-found 與原因。你不會損失什麼——原始檔案沒被動過——而且先拿到一個數字,再決定要不要手動處理。

報告裡的比例對 23.976 與 25 fps 的錯配意味著什麼?

字幕時間先乘以比例,再按偏移平移,所以比例 1.0427 表示字幕是按更快的影格基準計時的,每條都要往後拉。頁面會同時試每一組常見影格率比的兩個方向,因為朝哪邊讀取決於你手裡是哪一份檔案:1.0427 與 0.9590 是同一個錯配的兩端。如果報告的比例是 1.000000、偏移不到一格,說明檔案本來就對得上,不會被更動。

修正後的檔案會保留我的樣式,還是只留時間軸?

只改時間,其餘不動。字幕被解析進本站所有頁面共用的那套內部表示,每條字幕的起止被重寫,再序列化回它進來的格式。ASS 的樣式、定位與行內標籤都會保留;檔案自身的結構也會保留,所以 .ass 進、.ass 出,而不會壓平成 .srt。唯一可見的例外是被大比例壓到不足一毫秒的字幕條,它會被保持在 1 毫秒,並計入有損清單。

字幕語言和音訊語言不一致時,對時還能工作嗎?

能,這正是量響度而不是辨識詞的意義。語音活動是一種形狀——一句話是一段能量爆發加一段間隙——無論說的是德語還是西班牙語,這個形狀都一樣。德語配音配西班牙語字幕,和一對同語言檔案對齊得一樣好。它做不到的是分辨配音與原聲,所以如果配音裡插入了額外對白,整體對齊仍然找得到,但插入段落裡的個別字幕可能落在錯誤的行上。

相關工具