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

- 網址：https://blog.valenvan.uk/posts/smacke-ffsubsync.html
- 發布日期：2026-10-26
- 測試設備：Mac mini M4 Pro（12 核、64GB）
- 專案：smacke/ffsubsync（https://github.com/smacke/ffsubsync），MIT 授權
- 測試版本：ffsubsync 0.5.1
- 實測影片：https://www.youtube.com/shorts/N0FO9vVhvvs

## 重點摘要

- 字幕整份慢 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），檢查：

```bash
python --version
ffmpeg -version
```

若 Mac 只有 `python3`，後續把 `python` 換成 `python3`。Python 沒找到，可從 [Python 官網](https://www.python.org/downloads/) 安裝；FFmpeg 沒找到，依 [FFmpeg 官方下載頁](https://ffmpeg.org/download.html) 選系統版本，並讓終端機找得到 `ffmpeg`。Mac 已有 Homebrew 的讀者，專案 README 提供 `brew install ffmpeg`。安裝後重新開終端機再檢查。

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

```bash
python -m venv subtitle-env
```

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

```bash
python -m pip install ffsubsync
ffs --help
```

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

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

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

```bash
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 秒誤差。試著限制偏移搜尋範圍，另存不同檔名再比較：

```bash
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秒字幕的修正結果](https://blog.valenvan.uk/img/smacke-ffsubsync-article_1.png)

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

![限制偏移後，八句最大誤差0.05秒](https://blog.valenvan.uk/img/smacke-ffsubsync-article_2.png)

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

專案與安裝依據：[ffsubsync 官方 README](https://github.com/smacke/ffsubsync)。授權：MIT。
