【问题标题】:How can I set drawtext fontsize in ffmpeg according to resolutions ratio如何根据分辨率比率在ffmpeg中设置drawtext字体大小
【发布时间】:2017-03-08 19:44:15
【问题描述】:

如何根据每个分辨率的宽度和高度设置视频上drawtext的字体大小,达到一定的比例?

ffmpeg -i Input.mp4 -vf drawtext="fontfile=OpenSans-Regular.ttf: \
text='New Music Video': fontcolor=white: fontsize=?: r=25: box=1: boxcolor=black@0.3: \ boxborderw=3: x=(20)/2: y=(h-text_h-20) " Output.mp4

我问这个问题是因为当我将它设置为 24 fontsize=24 时,当转换完成时,它的大小在其他分辨率下是不同的。

【问题讨论】:

  • fontsize 还不支持表达式,只支持整数值。除非您想修补它,否则请确定所需的大小并将其传递给ffmpeg 命令。
  • hack 方法是在透明的 BG 上绘制文本,然后使用 scale2ref 调整文本大小,然后覆盖它。
  • @Mulvya 你能给我一个示例代码或任何例子吗?如何在透明的 BG 上绘制文本?
  • @Mulvya 它似乎不能像你提到的那样起作用,因为当你改变背景的大小时,文本大小不会改变。并且文本的一些字符淡出,因为只是BG框尺寸减小了。
  • 我现在正忙于工作,所以可以稍后提供命令,但基本流程是 1)创建透明 BG 2)在 BG 上绘制文本 3)使用 scale2ref 调整带文本的 BG 大小。

标签: ffmpeg scaling drawtext


【解决方案1】:

我也遇到过这个问题,这是我的解决方案:使用各种分辨率的对角线速率,缩放你的文本大小

详情如下:

  1. 在您最常用的分辨率中找到合适的文本大小。例如 textsize=65 分辨率=1920*1080
  2. 使用目标视频分辨率的对角线除以1920*1080的对角线,然后乘以适合的文本大小(65),结果就是你想要的

kotlin 代码在这里:

(Math.sqrt((videoWidth*videoWidth + videoHeight*videoHeight).toDouble()) / 2203 * textsize).toInt()

【讨论】:

  • 在此代码 2203 中是从哪里找到的? @兔子
  • 是对角线尺寸。
【解决方案2】:

Since ffmpeg version 3.4,视频过滤器drawtext 在其fontsize 参数中支持算术表达式。例如,高度除以 30:

-vf drawtext="fontsize=(h/30): x=(w-text_w)/2: y=(h-text_h*2): text='Hello, World!': fontcolor=white: box=1: boxcolor=black@0.5: boxborderw=5"

这将在 720p 视频上使用 24 号字体,在 1080p 视频上使用 36 号字体。

另见more examples on how to use filter drawtext in ffmpeg documentation

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多