字幕与隐藏式字幕
大多数社交视频在静音状态下被观看。字幕是剪辑的一部分,而非额外内容。
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}大多数 {\k40}构建 {\k30}失败
ASS中的颜色格式为&HAABBGGRR(蓝-绿-红顺序,alpha在前)。
6. 交付
- 为社交媒体平台提供烧录版本。
- 为YouTube、LinkedIn和网页播放器提供独立的
.srt或.vtt文件(观众可切换和翻译)。 - MP4中的软字幕轨道:
-i captions.srt -c copy -c:s mov_text。
翻译
翻译字幕文本,而非时间码。根据每种语言保持行长度限制(德语和芬兰语文本较长,需重新换行)。视频公开时,请让母语者检查翻译。