CGJU
查工具网
2026年5月22日 · 阅读时长 4 分钟

字幕格式介绍

字幕文件有多种格式,每种格式有不同的特点和应用场景。在使用 FFmpeg 处理字幕之前,先了解一下常见的字幕格式。

SRT 格式

SRT(SubRip Text)是最流行、最简单的字幕格式,几乎所有播放器都支持。它是纯文本格式,包含序号、时间轴和字幕内容。

1
00:00:01,000 --> 00:00:04,000
这是第一句字幕

2
00:00:05,000 --> 00:00:08,000
这是第二句字幕

优点:格式简单、兼容性好、易于编辑。缺点:不支持样式设置。

ASS 格式

ASS(Advanced SubStation Alpha)是功能最强大的字幕格式,支持丰富的样式设置,包括字体、颜色、位置、动画效果等。

[Script Info]
Title: 示例字幕
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour
Style: Default, Arial, 24, &H00FFFFFF

[Events]
Format: Layer, Start, End, Style, Text
Dialogue: 0, 0:00:01.00, 0:00:04.00, Default, 这是第一句字幕

优点:样式丰富、支持特效、可定制程度高。缺点:格式复杂,部分设备不支持。

VTT 格式

VTT(WebVTT)是专为网页设计的字幕格式,HTML5 的 video 标签原生支持。格式与 SRT 类似,但有一些扩展功能。

WEBVTT

00:00:01.000 --> 00:00:04.000
这是第一句字幕

00:00:05.000 --> 00:00:08.000
这是第二句字幕

优点:网页原生支持、轻量。缺点:浏览器支持有差异,样式功能有限。

其他格式

  • SSA:ASS 的前身,功能类似
  • IDX/SUB:图形字幕,常用于 DVD
  • PGS:蓝光图形字幕
  • SCC:隐藏式字幕格式

硬字幕添加方法

硬字幕(Hardsub)是将字幕直接渲染到视频画面中,字幕成为视频的一部分,无法关闭。优点是兼容性好,任何播放器都能显示;缺点是无法移除,且需要重新编码。

添加 SRT 字幕

使用 subtitles 滤镜添加 SRT 字幕:

ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4

如果字幕文件名包含特殊字符或路径,需要进行转义:

ffmpeg -i input.mp4 -vf "subtitles='sub\ title.srt'" output.mp4

添加 ASS 字幕

ASS 字幕可以保留样式信息,使用 ass 滤镜:

ffmpeg -i input.mp4 -vf ass=subtitle.ass output.mp4

设置字幕样式

对于 SRT 字幕,可以通过 force_style 参数设置字幕样式:

ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&H00FFFFFF&,OutlineColour=&H00000000&,Outline=2'" output.mp4

常用样式参数

  • FontName:字体名称
  • FontSize:字体大小
  • PrimaryColour:主颜色(文字颜色)
  • OutlineColour:描边颜色
  • BackColour:背景颜色
  • Outline:描边宽度
  • Shadow:阴影深度
  • Bold:粗体(-1=开启,0=关闭)
  • Italic:斜体

注意:颜色格式为 &HAABBGGRR(Alpha、Blue、Green、Red),与常见的 RGB 顺序相反。

调整字幕位置

可以通过 Alignment 参数调整字幕位置:

ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='Alignment=6,MarginV=50'" output.mp4

Alignment 取值 1-9,对应数字小键盘的位置(6=右中,2=底部居中,8=顶部居中)。

软字幕添加方法

软字幕(Softsub)是将字幕作为独立的轨道嵌入视频文件中,播放时可以开关和切换。优点是灵活、不影响画质;缺点是需要播放器支持。

添加 SRT 软字幕到 MP4

ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4

添加软字幕到 MKV

MKV 对软字幕的支持最好,可以直接复制:

ffmpeg -i input.mkv -i subtitle.srt -c copy output.mkv

添加多语言字幕

ffmpeg -i input.mp4 -i zh.srt -i en.srt -i jp.srt \
    -c copy -c:s mov_text \
    -metadata:s:s:0 language=chi -metadata:s:s:0 title="中文" \
    -metadata:s:s:1 language=eng -metadata:s:s:1 title="English" \
    -metadata:s:s:2 language=jpn -metadata:s:s:2 title="日本語" \
    output.mp4

设置默认字幕轨道

ffmpeg -i input.mp4 -i zh.srt -i en.srt \
    -c copy -c:s mov_text \
    -disposition:s:0 default \
    -disposition:s:1 none \
    output.mp4

字幕提取

有时候需要从视频文件中提取字幕,以便编辑或转换格式。FFmpeg 可以轻松完成这个任务。

从 MKV 提取 SRT 字幕

首先查看视频中的字幕轨道信息:

ffmpeg -i input.mkv

找到字幕轨道的编号(通常是 0:s:0、0:s:1 等),然后提取:

ffmpeg -i input.mkv -map 0:s:0 output.srt

从 MKV 提取 ASS 字幕

如果字幕本身是 ASS 格式,直接提取:

ffmpeg -i input.mkv -map 0:s:0 -c copy output.ass

提取所有字幕轨道

ffmpeg -i input.mkv -map 0:s -c copy output_%d.srt

从 MP4 提取字幕

MP4 中的字幕通常是 mov_text 格式,需要转换为 SRT:

ffmpeg -i input.mp4 -map 0:s:0 output.srt

字幕格式转换

不同的应用场景需要不同的字幕格式,FFmpeg 可以在各种字幕格式之间转换。

SRT 转 ASS

ffmpeg -i input.srt output.ass

SRT 转 VTT

ffmpeg -i input.srt output.vtt

ASS 转 SRT

将 ASS 字幕转换为 SRT 会丢失样式信息:

ffmpeg -i input.ass output.srt

VTT 转 SRT

ffmpeg -i input.vtt output.srt

字体样式设置详解

使用 FFmpeg 添加硬字幕时,样式设置非常重要。下面详细介绍常用的样式参数。

颜色值格式

FFmpeg 字幕滤镜使用的颜色格式是 &HAABBGGRR,其中:

  • AA:Alpha 透明度(00=完全透明,FF=完全不透明)
  • BB:蓝色分量
  • GG:绿色分量
  • RR:红色分量

注意顺序是蓝绿红(BGR),不是常见的红绿蓝(RGB)。

常用颜色示例

颜色 颜色值 说明
白色 &H00FFFFFF& 默认文字颜色
黑色 &H00000000& 描边/阴影颜色
红色 &H000000FF& 强调文字
黄色 &H0000FFFF& 经典字幕色
半透明黑底 &H80000000& 50%透明度黑色背景

完整的样式示例

ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='
    FontName=Microsoft YaHei,
    FontSize=24,
    PrimaryColour=&H00FFFFFF&,
    OutlineColour=&H00000000&,
    BackColour=&H80000000&,
    Bold=-1,
    Italic=0,
    Outline=2,
    Shadow=1,
    Alignment=2,
    MarginV=40
'" output.mp4

常用 FFmpeg 字幕命令汇总

硬字幕相关

  • 添加 SRT 硬字幕:ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4
  • 添加 ASS 硬字幕:ffmpeg -i input.mp4 -vf ass=sub.ass output.mp4
  • 指定字体:ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontName=SimHei'" output.mp4
  • 调整字幕大小:ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontSize=30'" output.mp4

软字幕相关

  • 添加 SRT 软字幕(MKV):ffmpeg -i input.mkv -i sub.srt -c copy output.mkv
  • 添加 SRT 软字幕(MP4):ffmpeg -i input.mp4 -i sub.srt -c copy -c:s mov_text output.mp4
  • 提取字幕:ffmpeg -i input.mkv -map 0:s:0 output.srt
  • 提取所有字幕:ffmpeg -i input.mkv -map 0:s -c copy sub_%d.srt

格式转换相关

  • SRT 转 ASS:ffmpeg -i input.srt output.ass
  • SRT 转 VTT:ffmpeg -i input.srt output.vtt
  • ASS 转 SRT:ffmpeg -i input.ass output.srt

常见问题与解决

1. 字幕显示乱码

通常是字幕文件编码问题。确保字幕文件是 UTF-8 编码,或者指定字符集:

ffmpeg -i input.mp4 -vf "subtitles=sub.srt:charenc=GBK" output.mp4

2. 找不到字体

确保系统中安装了指定的字体。Linux 系统可以将字体文件放在 ~/.fonts 目录下,或设置字体路径:

FFLIBFREETYPE_FONTPATH=/path/to/fonts ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4

3. 字幕和声音不同步

可以使用 itsoffset 参数调整字幕的时间偏移:

ffmpeg -i input.mp4 -itsoffset 0.5 -i sub.srt -c:v copy -c:a copy -c:s mov_text output.mp4

总结

FFmpeg 提供了强大的字幕处理功能,无论是添加硬字幕、软字幕,还是提取、转换字幕格式,都能轻松完成。掌握这些命令可以大大提高视频处理的效率。

对于不熟悉命令行的用户,也可以使用各种图形界面的字幕处理工具。但 FFmpeg 的灵活性和强大功能仍然是专业用户的首选。

相关推荐

更多精彩文章和实用工具

需要转换视频格式?

使用我们的免费在线视频转换工具,支持多种格式互转,无需下载安装

立即体验 ➡