如何在 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上一直不行