如何根据分辨率比例在ffmpeg中设置drawtext fontsize

时间:2016-10-26 12:28:05

标签: ffmpeg scaling drawtext

如何根据每个分辨率的宽度和高度,在视频上为drawtext设置fontsize到一定比例?

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时,当转换完成时,它的大小在其他分辨率上是不同的。

2 个答案:

答案 0 :(得分:2)

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

以下是详细信息:

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

kotlin代码在这里:

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

答案 1 :(得分: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