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

par*_*rsa 5 scaling ffmpeg 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
Run Code Online (Sandbox Code Playgroud)

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

and*_*bak 8

从 ffmpeg 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"
Run Code Online (Sandbox Code Playgroud)

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

另请参阅ffmpeg 文档中有关如何使用过滤器的更多示例drawtext


小智 5

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

这是详细信息:

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

科特林代码在这里:

(Math.sqrt((videoWidth*videoWidth + videoHeight*videoHeight).toDouble()) / 2203 * textsize).toInt()
Run Code Online (Sandbox Code Playgroud)

  • 这段代码中的2203是你从哪里找到的?@兔子 (3认同)