字幕與隱藏式字幕
大多數社群影片在靜音狀態下觀看。字幕是編輯的一部分,而非額外添加。
1. 語音轉寫
# openai-whisper (pip install openai-whisper)
whisper audio.mp3 --model small --language en --output_format srt --output_dir captions/
# faster-whisper (pip install faster-whisper):更快、記憶體更低、具單字時間戳
python - <<'PY'
from faster_whisper import WhisperModel
model = WhisperModel("small", compute_type="int8")
segments, info = model.transcribe("audio.mp3", word_timestamps=True, vad_filter=True)
for s in segments:
for w in s.words:
print(f"{w.start:.2f}\t{w.end:.2f}\t{w.word}")
PY
先萃取乾淨的音訊,可獲得更好的轉寫結果:
ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav
模型大小取決於準確度與速度的權衡:base < small < medium < large。英文建議使用 small 或 medium,口音重或非英語則用 large。
如果已有腳本(您是根據它生成旁白的),請不要信任轉寫的文字。請使用腳本內容,並只透過 Whisper 取得時間對齊(強制對齊)。這樣能確保人名和數字完全正確。
2. 修正文字
校對專有名詞、產品名稱和數字。Whisper 常常聽錯這些。當主題涉及專業領域時,請向使用者索取術語表。
3. 撰寫字幕檔
SRT:
1
00:00:00,000 --> 00:00:02,400
大部分建置在星期五失敗。
2
00:00:02,400 --> 00:00:05,100
以下是原因。
可讀性規則:
- 最多 2 行,每行約 42 個字元(直向影片約 20 個)。
- 閱讀速度低於每秒 17 個字元;最短提示長度為 1 秒。
- 在短語處斷句,不要斷在短語中間。切勿將人名跨提示分割。
- 提示不可重疊。保留 2 幀間隙或無間隙。
4. 嵌入字幕
# 透過 force_style 軟設定樣式(SRT)
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Alignment=2,MarginV=60'" -c:a copy out/captioned.mp4
# ASS 提供完全控制(卡拉 OK 單字高亮、位置、動畫)
ffmpeg -i in.mp4 -vf "ass=captions.ass" -c:a copy out/captioned.mp4
Windows 路徑陷阱:在濾鏡中,請跳脫磁碟機代號的冒號並使用正斜線(subtitles='C\:/work/captions.srt'),或者從包含檔案的資料夾執行 FFmpeg 並使用相對路徑。
5. 短影音的單字高亮樣式
產生一個 ASS 檔案,每個詞組(2 到 4 個單字)一個事件,並使用 \k 卡拉 OK 標籤或逐字顏色覆蓋,使正在播放的單字變色。典型外觀:粗體無襯線字體、白色文字、3 到 4 像素黑色邊框、品牌強調色用於正在播放的單字,放置在下中三分之一處,不要放在最底部(平台 UI 會遮蓋)。
可作為起點的簡短 ASS 標頭:
[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920
[V4+ Styles]
Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,Encoding
Style: Default,Arial,72,&H00FFFFFF,&H0000D7FF,&H00000000,&H64000000,-1,0,0,0,100,100,0,0,1,4,0,2,60,60,520,1
[Events]
Format: Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text
Dialogue: 0,0:00:00.00,0:00:01.20,Default,,0,0,0,,{\k30}Most {\k40}builds {\k30}fail
ASS 中的顏色格式為 &HAABBGGRR(藍-綠-紅順序,alpha 在前)。
6. 交付
- 為社群平台提供已嵌入的版本。
- 提供獨立的
.srt或.vtt檔案用於 YouTube、LinkedIn 和網頁播放器(觀眾可切換及翻譯)。 - MP4 中的軟字幕軌:
-i captions.srt -c copy -c:s mov_text。
翻譯
翻譯提示文字,而非時間。根據語言調整行數限制(德語和芬蘭語較長,因此需重新換行)。影片公開後,請讓母語人士檢查。