懶惰之最|GitHub 實測

電影台詞講完字幕才跳?ffsubsync 從安裝到載入新字幕教學

2026-10-26|專案:smacke/ffsubsync|Markdown 版

重點摘要

  • 字幕整份慢 4.2 秒,用 ffs 一行指令約 0.3 秒修完,8 句最大誤差降到 0.05 秒(44 秒合成語音短片)。
  • 字幕速度與影片不同(拉伸 1.0427 倍)時,預設指令仍殘留最大 0.82 秒誤差。
  • 加上 --max-offset-seconds 10 後,同一支短片的最大誤差降到 0.05 秒,原因未深究。
  • 只測了 44 秒的合成語音短片,未測真實電影、長片、內嵌字幕或其他語言。
  • 結論: 44秒合成片的慢字幕修正有效;速度不同時限制搜尋範圍在本片有效,真實電影仍需播放確認。
  • 適合: 已有對應外掛SRT字幕、想省去逐句對時的人,文章提供從安裝到載入新字幕的步驟
  • 不適合: 沒有字幕而需要自動聽寫、字幕內容或剪輯版本不符且只想靠平移解決的人;這些用途未驗證
實測項目 結果
安裝時間 pip install . 約 11.7 秒
字幕慢 4.2 秒:修正前/後最大誤差 4.20 秒 / 0.05 秒
單次執行時間(44 秒短片) 約 0.3 秒
速度不同步:預設指令修正後最大誤差 0.82 秒(修正前 1.58 秒)
速度不同步:加 --max-offset-seconds 10 0.05 秒

角色已經講完一句話,字幕才出現,只好一直暫停往回拉。ffsubsync 用影片裡「有人說話的時間」對照字幕的時間,嘗試自動對齊,不必逐句拖曳。它調整的是字幕時間,不會翻譯台詞,也不會替沒有字幕的影片生出字幕。

先準備什麼

準備影片與對應的外掛 .srt 字幕,複製到同一個資料夾;保留原檔。下面用 movie.mp4、late.srt 作例子,實際操作請換成自己的檔名。這份教學走本次實測的指令列方式;網頁版不在實測範圍。

需要 Python、FFmpeg 與 ffsubsync。先開啟「終端機」(Windows 可開 PowerShell),檢查:

python --version
ffmpeg -version

若 Mac 只有 python3,後續把 python 換成 python3。Python 沒找到,可從 Python 官網 安裝;FFmpeg 沒找到,依 FFmpeg 官方下載頁 選系統版本,並讓終端機找得到 ffmpeg。Mac 已有 Homebrew 的讀者,專案 README 提供 brew install ffmpeg。安裝後重新開終端機再檢查。

為避免改到系統 Python,先在任選的工具資料夾建立專用環境:

python -m venv subtitle-env

Mac 終端機執行 source subtitle-env/bin/activate;Windows「命令提示字元」執行 subtitle-env\Scripts\activate.bat(若原先開 PowerShell,可改開命令提示字元操作)。每次重新開終端機,都要回到這個資料夾啟用環境。然後安裝字幕工具,確認指令可用:

python -m pip install ffsubsync
ffs --help

安裝說明依官方 README;本次既有實測是安裝來源副本的 0.5.1,沒有另外重跑 Mac/Windows 安裝。若安裝失敗,先確認 Python 與 FFmpeg 的檢查都成功,再查看安裝錯誤;不要強制覆寫系統 Python。

一、進入影片資料夾,產生新字幕

輸入 cd,接著填入資料夾完整路徑,路徑含空白要加雙引號。例如把路徑換成自己的位置:

cd "/完整路徑/影片資料夾"
ffs "movie.mp4" -i "late.srt" -o "fixed.srt"

movie.mp4 是聲音的參考來源,-i 後面是要修的字幕,-o 是另存的新字幕。這就是本次錄影使用的指令格式。若找不到 ffs,先確認安裝成功、重新開啟終端機;使用虛擬環境時,須先啟用該環境。ffs、subsync、ffsubsync 是官方列出的同義指令。

等它完成,在資料夾確認有 fixed.srt。不要把輸出設成原字幕檔名,方便比較與還原。

二、播放器要選到新字幕

用播放器開影片,從字幕選單載入 fixed.srt,關閉舊字幕。若播放器原先有手動延遲設定,先歸零,以免再挪一次。抽看開頭、中段、結尾的對話;三處都吻合才算修好,不能只看指令成功。沒有字幕時先確認是否選到新檔;中文字亂碼則檢查字幕編碼,對時工具不是編碼修復工具。

三、越看越歪時,別只修開頭

字幕速度和影片不一致,可能開頭合、中後段卻逐漸偏離。本次把字幕時間拉長 1.0427 倍,預設修完仍有最大 0.82 秒誤差。試著限制偏移搜尋範圍,另存不同檔名再比較:

ffs "movie.mp4" -i "late.srt" -o "fixed_10s.srt" --max-offset-seconds 10

這不是「延後十秒」,而是限制搜尋的偏移範圍。只適合偏移預期在十秒內時嘗試;超過就不適用。本次短片誤差降到 0.05 秒,但預設漏抓的原因沒有查明,不能保證套到每部片有效。仍對不上,先確認字幕是否對應同一剪輯版本;有刪剪、不同片頭或不同內容,單靠挪動時間未必能解決。

實際測到什麼

測試設備:Mac mini M4 Pro(12 核、64GB)。受測 ffsubsync 0.5.1;44 秒合成中文語音短片,共八句,基準時間已知。

測試 修正前最大誤差 修正後最大誤差
字幕整份慢 4.2 秒 4.20 秒 0.05 秒
時間拉長 1.0427 倍,預設指令 1.58 秒 0.82 秒
同一拉長字幕,限制偏移十秒 1.58 秒 0.05 秒

八句慢4.2秒字幕的修正結果

慢字幕處理約 0.30 秒,三次為 0.30–0.31 秒;這是短片處理時間,不含安裝。速度不合的兩種設定各重跑兩次,結果一致。

限制偏移後,八句最大誤差0.05秒

只測合成語音,沒有測真實電影、長片、內嵌字幕、其他語言或網頁介面。適合已有外掛字幕、想省掉逐句調整的人;工具成功結束後,仍要實際播放確認。

專案與安裝依據:ffsubsync 官方 README。授權:MIT。

測試設備:Mac mini M4 Pro(12 核、64GB)。內容依實際執行結果撰寫,數據為撰寫當時的實測值。

← 所有實測