在视频制作与分享中,字幕不仅能帮助观众更好地理解内容,还能提升视频的专业度。如果你手头已经有了独立的字幕文件(如 .srt 或 .ass 格式),想要把它完美地“装”进视频里,FFmpeg 绝对是最强大且免费的解决方案。
将字幕嵌入视频主要分为两种方式:硬字幕和软字幕。下面简鹿办公就结合 FFmpeg,手把手教你如何实现这两种效果。
在动手敲命令之前,我们需要先搞清楚这两种嵌入方式的区别:
硬字幕:也叫“烧录字幕”。它相当于把字幕当成图像的一部分,直接“画”在视频画面上。优点是兼容性极强,在任何设备、任何播放器上都能看到;缺点是无法关闭或修改,且因为视频需要重新编码,处理速度较慢,画质可能会有轻微损失。
软字幕:也叫“内封字幕”。它把字幕文件封装进视频容器(如 MP4 或 MKV)里,作为一个独立的字幕轨道存在。优点是观众可以自由开关、切换字幕,且处理速度极快(无需重新编码视频);缺点是兼容性稍弱,部分老旧播放器或网页可能无法识别。
如果你想确保观众在任何情况下都能看到字幕(比如发布到短视频平台),硬字幕是最佳选择。我们将使用 FFmpeg 的滤镜(-vf)来实现。
基础命令:
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" -c:a copy output_hard.mp4
参数详解:
-i input.mp4:输入你的原始视频文件。
-vf "subtitles=subtitle.srt":调用视频滤镜,将 subtitle.srt 字幕文件烧录到画面中。
-c:a copy:音频流直接复制,不进行重新编码,既能保持音质又能加快处理速度。
output_hard.mp4:输出的视频文件名。
如果你觉得默认字幕的字体太小或颜色不醒目,可以在命令中通过 force_style 进行调整(注意:Windows 系统下需将单引号改为双引号,内部双引号需转义):
# 将字幕设为红色、字号24、底部居中
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontsize=24,PrimaryColour=&H0000FF&,Alignment=2'" -c:a copy output_styled.mp4
如果你制作的是教学视频或影视剧,希望观众能自由切换中英文字幕,软字幕是最佳选择。这种方式不需要重新编码视频,处理速度非常快。
封装到 MP4 容器(最通用)
MP4 容器对软字幕的编码格式有特定要求,必须将字幕转换为 mov_text 格式。
封装字幕命令:
ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text output_soft.mp4
-c:v copy 和 -c:a copy:视频和音频流直接复制,无损且极速。
-c:s mov_text:将字幕流编码为 MP4 容器支持的 mov_text 格式。
封装到 MKV 容器(最专业)
MKV 容器对各种字幕格式(SRT, ASS 等)的支持最为友好,且能保留 ASS 字幕的复杂特效(如字体、颜色、动画)。
封装字幕命令:
ffmpeg -i input.mp4 -i subtitle.srt -c copy output_soft.mkv
-c copy:直接将视频、音频、字幕流原封不动地封装进 MKV 容器中。
你可以同时把中文和英文字幕封装进一个视频,并指定默认显示哪一条:
ffmpeg -i input.mp4 -i sub_chi.srt -i sub_eng.srt -map 0:v -map 0:a -map 1 -map 2 -c copy -disposition:s:0 default output_multi.mkv
-map 参数用于精确指定要保留的视频、音频和两条字幕轨道。
-disposition:s:0 default:将第一条字幕(即中文字幕)设为默认开启。
中文乱码怎么办?
如果你的 SRT 字幕在视频中显示为乱码,通常是因为字幕文件的编码不是 UTF-8。建议先用记事本打开 SRT 文件,选择“另存为”,将编码格式改为 UTF-8 后再进行嵌入。
MP4 里的软字幕不显示?
部分播放器(如 Windows 自带的电影和电视)对 MP4 的软字幕支持不佳。建议使用功能强大的第三方播放器,如 VLC、PotPlayer 或 IINA (Mac)。
字幕时间轴对不上?
如果字幕比画面快或慢了几秒,可以在命令中加入 -itsoffset 参数进行微调。例如 -itsoffset 2 表示将字幕整体延迟 2 秒。
掌握以上这些 FFmpeg 命令,你就可以轻松搞定各种字幕嵌入需求。快去打开终端,给你的视频加上完美的字幕吧!