在制作视频时,字幕不仅帮助观众更好地理解内容,还能增强视频的可访问性。如果你有一个 SRT 字幕文件(即 SubRip 字幕文件),并希望将其嵌入到视频中,本文将介绍如何使用 FFmpeg 将 SRT 字幕嵌入到视频文件中。我们将讨论如何软字幕和硬字幕两种方式嵌入字幕。
1. 软字幕 vs 硬字幕
在开始之前,我们首先了解一下 软字幕 和 硬字幕 的区别:
软字幕:
这种字幕是可开关的,也就是说观众可以选择显示或隐藏它。软字幕通常嵌入到视频文件容器中,但不直接修改视频的像素。它们可以与视频分开存储,也可以通过播放器的选项打开或关闭。
硬字幕:
硬字幕是直接嵌入到视频画面中的,这意味着字幕永远会显示在视频上,观众无法关闭或隐藏它们。硬字幕会修改视频内容,因此它们无法移除。
2.使用 FFmpeg 嵌入 SRT 字幕到视频(软字幕)
如果你希望将 SRT 字幕嵌入视频,并让观众能够在播放时选择是否显示字幕,你可以使用 FFmpeg 工具。FFmpeg 是一个强大的开源视频处理工具,支持视频转换、编辑、合成等功能。
步骤 1:准备 SRT 字幕文件
确保你已经拥有一个 SRT 字幕文件。你可以使用基于 Whisper 的工具(如 fast-whisper、whisperx、whisper.cpp)来生成字幕可以参考我的之前的文章使用whisper.cpp 生成字幕。
步骤 2:安装 FFmpeg
FFmpeg 是支持多平台的,可以在 Linux、Mac 和 Windows 上安装。
- Ubuntu/Debian:
sudo apt-get install ffmpeg
- macOS:
brew install ffmpeg
- Windows: 可以从 ffmpeg官网 下载并安装
步骤 3:使用 FFmpeg 嵌入 SRT 字幕
一旦你安装了 FFmpeg,并准备好字幕文件,可以通过以下命令将 SRT 字幕嵌入到视频中: 这里根据视频格式和字幕文件格式,会遇到几种情况,一般常用的字幕文件格式是SRT,ASS ,视频格式有MP4,MKV等。我们分情况来说明
场景一:SRT 字幕 + MP4 视频
特点:最通用的组合,兼容性强,但字幕无样式(仅纯文本)。 常用命令:
软字幕(可开关,需播放器支持)
ffmpeg -i input.mp4 -i sub.srt \
-c:v copy -c:a copy \
-c:s mov_text \
output.mp4
命令参数解析:
- -i input.mp4:输入的视频文件。
- -i subtitles.srt:输入的 SRT 字幕文件。
- -c:v copy:复制视频流,而不进行重新编码,保持视频质量。
- -c:a copy:复制音频流,而不进行重新编码,保持音频质量。
- -c:s mov_text:将字幕编码为 mov_text 格式(适用于 .mp4 和 .mov 文件)。mov_text 字幕格式是 iOS、macOS 和部分播放器支持的字幕格式。
- output.mp4:输出的文件名。 注意事项: 只有 .mp4 和 .mov 格式支持 mov_text 软字幕。 若软字幕不显示,检查播放器是否支持 mov_text(QuickTime、VLC 等通常支持) 中文乱码时,用 -sub_charenc GBK 或转换 SRT 文件为 UTF-8 编码
硬字幕(永久嵌入,所有设备可见)
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='Fontsize=24'" \
-c:v libx264 -c:a aac output_hard.mp4
- -vf “subtitles=subtitles.srt”:使用 FFmpeg 的字幕过滤器,将字幕渲染到视频上。
- force_style=‘Fontsize=24,PrimaryColour=&HFFFFFF&’:设置字体大小和颜色。
- -c:a copy:音频编码不变,直接复制。
- output.mp4:输出的视频文件。
场景二:ASS 字幕 + MKV 视频
特点:支持复杂特效(字体 / 颜色 / 动画),适合动漫或双语字幕。 推荐命令:
ffmpeg -i input.mkv -i sub.ass \
-c:v copy -c:a copy -c:s copy \
-output.mkv
优势: 无需转码,直接封装(MKV 天然支持 ASS) 保留所有字幕样式(如阴影、位置、字体) 播放器要求:需支持 ASS 渲染(如 VLC、MPV、PotPlayer)
场景三:ASS 字幕 + MP4 视频
MP4 格式不原生支持 ASS 字幕,可能会导致字幕乱码或样式丢失。 命令:
# 尝试强制嵌入(部分播放器可能兼容)
ffmpeg -i input.mp4 -i sub.ass \
-c:v copy -c:a copy -c:s mov_text \
output.mp4
替代建议:
1.将 ASS 转换为 SRT(会丢失样式):
ffmpeg -i sub.ass sub.srt
2.生成硬字幕:
ffmpeg -i input.mp4 -vf "ass=sub.ass" -c:v libx264 -c:a aac output_hard.mp4
关注我获取更多资讯

