如何使用 FFmpeg 嵌入 SRT 字幕到视频 | 软字幕/硬字幕完整指南

学习如何使用 FFmpeg 将 SRT 字幕嵌入视频,包括软字幕和硬字幕的实现方法。通过详细的命令示例,你将能够将字幕文件添加到 MP4 和 MKV 格式的视频中,并了解如何使用 FFmpeg 设置字幕样式和字体。本文适合需要视频字幕处理的内容创作者、视频编辑师以及技术爱好者,帮助你提升视频可访问性和观众体验。

阅读时长: 4 分钟
共 1511字
作者: eimoon.com

在制作视频时,字幕不仅帮助观众更好地理解内容,还能增强视频的可访问性。如果你有一个 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

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计