【问题标题】:How to load external or custom fonts in subtitle file如何在字幕文件中加载外部或自定义字体
【发布时间】:2020-11-18 18:20:46
【问题描述】:

如何从外部文件路径/自定义路径加载 .ass 字幕文件中的字体?假设我在一个文件夹中有一个字体,我需要将该字体加载到字幕文件(.ass)文件中。如何加载它?有没有可能? FFmpeg 命令是

ffmpeg -i sample.mp4 -map 0 -vf "subtitles=test.ass:fontsdir=Dancing_Script.ttf" -c:a copy output.mp4

上面是我的 .ass 文件

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None

[Aegisub Project Garbage]

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,8,10,10,10,1


[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,first{\fnDancing Script\b0}

问题是视频仍在加载 Arial 字体,即使我使用 {\fnDancing Script\b0}

加载

【问题讨论】:

    标签: ffmpeg subtitle


    【解决方案1】:

    软潜艇

    为 ASS 文件中的特定字体命名。字体名称在Style 行中。在此示例中,字体名称为 Liberation Sans

    Style: Default,Liberation Sans,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,8,10,10,10,1
    

    ffmpeg附上字幕和字体文件:

    ffmpeg -i input.mkv -i subtitles.ass -attach LiberationSans-Regular.ttf -map 0 -map 1 -metadata:s:t mimetype=application/x-truetype-font -c copy output.mkv
    

    硬分叉

    subtitles filterfontsdirforce_style 选项一起使用。

    ffmpeg -i input.mp4 -map 0 -vf "subtitles=/path/to/your/subtitles.ass:fontsdir=/path/to/your/font/directory:force_style='Fontname=Liberation Sans'" -c:a copy output.mp4
    
    • 建议将字体文件单独放在指定的fontsdir中。否则ffmpeg 将需要很长时间加载指定fontsdir 中的所有 文件。
    • 这适用于基于文本的字幕格式,例如 ASS、SRT 和 VTT。
    • 您可以直接编辑 ASS 文件中的Fontname,而不是使用force_style,如上所示。

    多种字体样式

    使用\fn override tag 使特定单词或句子使用不同的字体。

    Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,This is {\fnDancing Script}one font style{\fn} and this is {\fnArial}another font style{\fn}
    

    【讨论】:

    • 如何使用以下 cmd ffmpeg -i input.mkv -vf "subtitles=subs.ass" -c:a copy output.mkv 附加 ttf
    • @KonduriSaiAditya 查看更新的答案。不清楚你想要软潜艇还是硬潜艇,所以我最初不得不猜测。
    • 谢谢,如果我想为不同的文本加载单独的字体怎么办,如何格式化 .ass 文件和 ffmpeg 命令
    • @KonduriSaiAditya 查看 ASS 文件的 \fn override tag,如果它也是系统“外部”的,请确保字体文件位于指定的 fontsdir 中。
    • @KonduriSaiAditya 查看更新的答案。原始问题中并不清楚您是否需要多种字体样式。
    【解决方案2】:

    这个东西很常见,但一开始我有点失望,因为尝试查找时与之相关的搜索结果很少。

    llogan 的回答可能是正确的,但我对其进行了一些更改以使其对我有用,在这里我将分享它,以便可能有人觉得它有用。

    这不是一个完整的示例,因为我猜您已经在视频中添加了 .ass 字体文件。正如lllogan所说,你可以像这样指定字体目录。

    ass=./subt/113.ass:fontsdir=./fonts/
    

    然后,您可以使用直接放置在 .ass 文件文件夹中的任何“.ttf”字体文件。像这样。

    [V4+ Styles]
    Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
    Style: Default,FONT-NAME,40,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,0,0,2,40,40,10,1
    
    [Events]
    Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
    Dialogue: 0,0:00:00.00,0:00:03.55,Default,,0,0,0,,{\fnFONT-NAME\fs28}This is an example text.
    

    在上面的示例中,我假设 FONT-NAME 是一种放在./fonts/ 文件夹中的字体。我使用 FONT-NAME 这是字体名称,(不是带有 .ttf 扩展名的文件名。)

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 2015-06-06
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2019-02-27
      • 2021-04-03
      • 2017-03-25
      • 2015-10-23
      相关资源
      最近更新 更多