如何在FFmpeg视频过滤器中添加字幕字号

25
我正在使用这个命令来裁剪、缩放,然后添加字幕作为叠加层。
ffmpeg -i input.avi  -vf "[in]crop=in_w:in_h-20:0:0 [crop]; [crop]scale=320:240 [scale];[scale]subtitles=srt.srt" -aspect 16:9 -vcodec libx264  -crf 23 oq.mp4

我们该如何设置字幕的字号和颜色?

3个回答

57

使用字幕有两种方法:硬字幕和软字幕。

硬字幕

可以使用subtitles视频过滤器来进行硬字幕或者焊接字幕,这需要重新编码,将字幕变为视频的一部分。

force_style选项

如果要自定义字幕,您可以在 subtitles 过滤器中使用 force_style 选项。例如,使用字幕文件 subs.srt ,将字体大小设置为24,红色字体颜色。

ffmpeg -i video.mp4 -vf "subtitles=subs.srt:force_style='Fontsize=24,PrimaryColour=&H0000ff&'" -c:a copy output.mp4
  • force_style 使用 SubStation Alpha (ASS) 格式的样式字段

  • PrimaryColour 以蓝绿红的顺序用十六进制表示。请注意,这与HTML颜色代码的顺序相反。颜色代码必须始终以&H开始和以&结束。

Aegisub

或者,您可以使用Aegisub创建并美化字幕。将其保存为SubStation Alpha (ASS) 格式,因为它支持字体大小、字体颜色、阴影、轮廓、缩放、角度等等。


软字幕

软字幕是文件内的附加流。播放器仅在播放时呈现它们。相比硬字幕,软字幕更灵活,因为:

  • 您无需重新编码视频。
  • 您可以有多个字幕(各种语言)并在其中切换。
  • 您可以在播放过程中切换它们的开/关。
  • 您可以使用任何值得使用的播放器调整其大小。

当然,如果设备或播放器无法使用软字幕,有时需要硬字幕。

要使用流复制模式将字幕混合到视频文件中:

ffmpeg -i input.mkv -i subtitles.ass -codec copy -map 0 -map 1 output.mkv

没有进行重新编码,因此整个过程将非常快速,并且质量和格式将被保留。

使用SubStation Alpha(ASS)字幕将允许您按照自己的喜好格式化字幕。这些可以使用Aegisub创建/转换。


另外请参见


3
如何更改字体大小的问题尚未得到回答,请提供语法正确的示例。 - Roland Seuhs
2
@RolandSeuhs 这个答案说明使用SRT是不可能的(据我所知)。至于ASS,实际的ASS文件决定了字体大小;就像你在示例文件中看到的那样。 - llogan
这个可以运行,但请确保您已经创建了FC_CONFIG_DIR、FONTCONFIG_FILE和FONTCONFIG_PATH环境变量,并且文件fonts.conf存在,否则它将无法工作。 - LEM

12

从文档中,您可以使用srt字幕文件,并通过放置ASS样式格式KEY=VALUE对以,分隔来更改字体大小。 因此,

ffmpeg -i input.mp4 -vf subtitles=sub.srt:force_style='FontName=DejaVu Serif,FontSize=24' -vcodec libx264 -acodec copy -q:v 0 -q:a 0 output.mp4

将使用DejaVu字体和字号24添加字幕,同时保持视频质量。 我已经尝试过,它有效。


1
这个命令有效,谢谢。但是只有当我用双引号将“-vf”的参数括起来时才有效。 - Gabriel Devillers
这个硬编码子命令可以工作,但像@GabrielDevillers所说的那样,只有在-vf参数周围加上双引号才有效。 - Tony M

-1

FFmpeg有时候很好用,但有些视频会变得模糊。我建议与VLC播放器进行比较。

媒体>转换/保存

我发现默认设置的iPad HD/iPhone/PSP视频档案非常好用。或者我可以将比特率从700kb/s降低到350kb/s以减小文件大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接