把外挂字幕(SRT / VTT / ASS)永久嵌入视频画面,做成"硬字幕"——也就是观众不能关掉的那种字幕。本指南覆盖 3 种主流方法:FFmpeg 命令行、剪映手动操作、在线工具一键完成。
视频里的字幕分两种:
| 类型 | 说明 | 能否关闭 |
|---|---|---|
| 软字幕 (Soft Subtitle) | 外挂字幕轨(如 SRT 文件),视频播放器可单独控制 | ✅ 可以关 |
| 硬字幕 (Hard Subtitle) | 字幕已经渲染到视频每一帧里 | ❌ 关不掉 |
需要硬字幕的场景:
FFmpeg 是开源免费的视频处理工具,支持几乎所有格式,Windows / macOS / Linux 都能跑。
macOS(Homebrew):
brew install ffmpeg
Windows:去 ffmpeg.org 下载,解压后把 bin 目录加到 PATH。
Linux:
sudo apt install ffmpeg
ffmpeg -i input.mp4 -vf subtitles=sub.srt -c:a copy output.mp4
参数说明:
-i input.mp4:输入视频-vf subtitles=sub.srt:使用 SRT 字幕文件(subtitles filter)-c:a copy:音频直接复制(不重新编码,速度快)output.mp4:输出视频如果想改字体大小、颜色、位置:
ffmpeg -i input.mp4 \
-vf "subtitles=sub.srt:force_style='FontName=PingFang SC,FontSize=24,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,Alignment=2,MarginV=40'" \
-c:a copy output.mp4
force_style 参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
| FontName | 字体名 | PingFang SC(macOS)/ 微软雅黑(Windows) |
| FontSize | 字号 | 24(标准) / 36(大字幕) |
| PrimaryColour | 主色 | &H00FFFFFF = 白色 |
| OutlineColour | 描边色 | &H00000000 = 黑色 |
| Outline | 描边粗细 | 2(标准) / 4(粗) |
| Alignment | 对齐位置 | 2 = 底部居中 |
| MarginV | 垂直边距 | 40(离底部 40 像素) |
如果 SRT 是 GBK 编码,FFmpeg 默认 UTF-8 会乱码:
ffmpeg -i input.mp4 \
-vf "subtitles=sub.srt:sub_charenc=GBK" \
-c:a copy output.mp4
建议:先把 SRT 改成 UTF-8 编码(VS Code 右下角"编码" → "通过 UTF-8 保存"),再用标准命令。
# ASS 字幕(更精确的样式控制)
ffmpeg -i input.mp4 -vf "ass=sub.ass" -c:a copy output.mp4
# WebVTT 字幕
ffmpeg -i input.mp4 -vf "subtitles=sub.vtt" -c:a copy output.mp4
如果你已经有剪映草稿,剪映可以一键导出带字幕的视频(字幕已经渲染进画面)。
优点:
缺点:
不想装 FFmpeg 也不想开剪映?用在线工具最省事。
| 工具 | 特点 | 费用 |
|---|---|---|
| VEED.io | 功能强大,自动生成字幕 + 烧录 | 免费版有水印 |
| Kapwing | 操作简单,支持 SRT / VTT | 免费版有水印 |
| 简盒字幕工具 | 纯浏览器本地处理,文件不上传 | 完全免费 |
优点:
局限:浏览器处理能力有限,4K / 1 小时以上视频可能慢。
无论用哪种方法,字幕样式参数大同小异:
| 平台 | 推荐字体 |
|---|---|
| macOS | PingFang SC(苹方)、Heiti SC(黑体) |
| Windows | 微软雅黑、思源黑体 |
| 跨平台 | Noto Sans CJK SC、Arial Unicode MS |
经验值:
ASS 颜色用 BGR 顺序的十六进制:
&H00FFFFFF = 不透明白色
&H00000000 = 不透明黑色
&H80000000 = 半透明黑色(80 = alpha 50%)
&H0000FF00 = 不透明蓝(绿+红=黄,但 ASS 用 BGR)
| 数字 | 位置 |
|---|---|
| 1 | 左下 |
| 2 | 底部居中(最常用) |
| 3 | 右下 |
| 5 | 左上 |
| 6 | 顶部居中 |
| 8 | 右上 |
A:检查 MarginV 参数,增大数值字幕下移。或者用 Alignment=8(顶部)测试。
A:FFmpeg 默认带的字体不支持中文,需要指定 FontName 为系统中文字体,或下载思源黑体放到 FFmpeg 字体目录。
A:可以,用 shell 脚本循环:
#!/bin/bash
for srt in *.srt; do
mp4="${srt%.srt}.mp4"
ffmpeg -i "$mp4" -vf "subtitles=$srt" -c:a copy "burned_${mp4}"
done
A:默认会重新编码视频,加 -c:v libx264 -crf 18 用高质量编码(crf 越小质量越高,18 接近无损)。
A:可以,准备双语 SRT 文件(一行中文一行英文),FFmpeg 用 -filter_complex 叠加两个字幕层。详细步骤参考 FCPXML 字幕转换教程。