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

Posted

技术标签:

【中文标题】如何在 ffmpeg 视频过滤器的字幕中添加字体大小【英文标题】:How to Add Font size in subtitles in ffmpeg video filter 【发布时间】:2014-02-17 06:10:11 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

media>Convert/Save

我发现 Profile Video for iPad HD/iPhone/PSP 的默认设置非常好。或者我可以将 Biterates 从 700kb/s 减少到 350kb/s 以使其更小。

【讨论】:

【参考方案2】:

有两种使用字幕的方法:hardsubs 和 softsubs。

硬分叉

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) style fields。

PrimaryColour 是十六进制的蓝绿红顺序。请注意,这是 html 颜色代码的相反顺序。颜色代码必须始终以&H 开头并以& 结尾。

神盾局

或者,您可以使用Aegisub 来创建和风格化您的字幕。另存为SubStation Alpha(ASS)格式,支持字体大小、字体颜色、阴影、轮廓、缩放、角度等。


软潜艇

这些是文件中的附加流。播放器只是在播放时渲染它们。比硬包更灵活,因为:

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

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

使用stream copy 模式将字幕复用到视频文件中:

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

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

使用 SubStation Alpha (ASS) 字幕可以让您随意设置字幕格式。这些可以使用 Aegisub 创建/转换。


另见

subtitles video filter documentation How to burn subtitles into the video How to convert subtitle from SRT to ASS format

【讨论】:

如何更改字体大小的问题没有得到解答,请提供语法正确的示例 @RolandSeuhs 答案表明使用 SRT 是不可能的(据我所知)。至于 ASS,实际的 ASS 文件决定了字体大小;正如您在示例文件中看到的那样。 这个可以,但是要确保你已经创建了FC_CONFIG_DIR、FONTCONFIG_FILE和FONTCONFIG_PATH环境变量并且文件fonts.conf存在,否则它不会工作。【参考方案3】:

从文档中,您可以使用 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 中。 这个硬编码子命令有效,但就像@GabrielDevillers 所说,只有在 -vf 参数周围加上双引号。

以上是关于如何在 ffmpeg 视频过滤器的字幕中添加字体大小的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 给视频添加字幕,在视频的某个时间段加入声音特效和动画

android 中使用ffmpeg,将视频加入字幕,用ass文件,在PC上可以,但在Android上一直不行

在docker容器里,ffmpeg给视频文件内嵌字幕文件,不生效,如何解决?

使用ffmpeg压制硬字幕与logo

使用FFMPEG,我们如何在黑条区域或视频下方添加字幕?

ffmpeg 恢复为默认字幕字体