如何在ffmpeg视频过滤器的字幕中添加字体大小

khi*_*ari 9 ffmpeg video-processing

我正在使用此命令进行裁剪,缩放,然后将字幕添加为叠加层

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
Run Code Online (Sandbox Code Playgroud)

我们如何设置字幕的字体大小/颜色?

llo*_*gan 28

有两种方法可以使用字幕:hardsubs和softsubs.

Hardsubs

subtitles视频滤波器可以用来hardsub,或烧机,字幕.这需要重新编码,字幕成为视频本身的一部分.

force_style 选项

要自定义字幕,您可以使用过滤器中的force_style选项subtitles.使用字幕文件subs.srt并使用红色字体颜色制作24字体大小的示例.

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

  • PrimaryColour蓝绿红色顺序为十六进制.请注意,这与HTML颜色代码的顺序相反.颜色代码必须始终以... &H结尾&.

Aegisub

或者,您可以使用Aegisub创建和设计您的字幕.保存为SubStation Alpha(ASS)格式,因为它可以支持字体大小,字体颜色,阴影,轮廓,缩放,角度等.


Softsubs

这些是文件中的其他流.播放器只需在播放时呈现它们.比hardsubbing更灵活,因为:

  • 您无需重新编码视频.
  • 您可以拥有多个字幕(各种语言)并在它们之间切换.
  • 您可以在播放期间打开/关闭它们.
  • 任何值得使用的玩家都可以调整它们的大小.

当然,如果设备或播放器无法使用softsubs,有时需要使用hardsubs.

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

ffmpeg -i input.mkv -i subtitles.ass -codec copy -map 0 -map 1 output.mkv
Run Code Online (Sandbox Code Playgroud)

没有任何东西可以重新编码,因此整个过程将很快,质量和格式将得到保留.

使用SubStation Alpha(ASS)字幕将允许您根据需要设置字幕格式.这些可以使用Aegisub创建/转换.


另见

  • 如何更改字体大小的问题没有得到解答,请提供语法上正确的示例 (2认同)
  • @RolandSeuhs答案说SRT是不可能的(据我所知).对于ASS,实际的ASS文件决定了字体大小; 正如您在示例文件中看到的那样. (2认同)

小智 6

从文档中,您可以使用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的字幕,同时保持视频的质量.我已经尝试过自己,但它确实奏效了.

  • 谢谢,这个命令有效,但前提是我用双引号将参数括在“-vf”中。 (2认同)