ffmpeg-python烧录SRT字幕时指定Roboto字体失效回退到默认字体
解决方案
根因说明
日志中显示字体文件已被成功加载,但最终fallback到系统默认字体,原因是ffmpeg的subtitles滤镜使用fontconfig做字体匹配时,匹配依据是字体内部注册的家族名,而非字体文件名。Roboto-Regular是字体文件的文件名,这款字体的实际家族名为Roboto,Regular是字重属性,直接填入FontName字段无法被fontconfig识别,因此触发了默认字体 fallback。
修复方案
- 方案1:调整force_style的字体配置
将style参数拆分字体名和字重属性,不要将字重写到FontName字段中:
style = "FontName=Roboto,FontSize=8,Bold=0"
其中Bold=0对应Regular字重,可正常匹配到Roboto家族的常规字重字体。
- 方案2:直接指定字体文件路径(最稳定)
跳过fontconfig的匹配逻辑,直接指定要使用的字体文件路径,不会出现匹配错误:
caption_file = "captions.srt" style = "FontSize=8" # 填Roboto-Regular.ttf的绝对/相对路径 font_file = "fonts-main/apache/Roboto-Regular.ttf" ( ffmpeg .concat(video.filter("subtitles", caption_file, fontfile=font_file, force_style=style), audio, v=1, a=1) .output("my_video_w_subs.mp4") .run() )
- 方案3:查询系统内正确的字体家族名
如果需要继续使用fontconfig匹配,可在终端执行以下命令查询当前系统内Roboto字体对应的正确家族名,替换到FontName字段即可:fc-list | grep "Roboto"
内容的提问来源于stack exchange,提问作者Sefi_k
相关产品推荐
相关产品推荐

