ffmpeg - 移动overlay / text命令如何工作?

时间:2012-06-15 21:32:13

标签: video ffmpeg

在Ffmpeg中,您可以创建移动文本:

ffmpeg -y -t 10 -s qcif -f rawvideo -pix_fmt rgb24 -s 1280x720 -i /dev/zero -g 1 -r 24 -vf drawtext="fontfile=~/fonts/Trebuchet_MS.ttf:text='thing crawls':fontsize=155:fontcolor=red:y=h-20*t" wow.mpg

所以这会给我一个黑框,“东西爬行”慢慢从下往上......

如果我知道视频的长度(20秒)并且想要,例如创建在时间0从屏幕顶部开始的“物体掉落”并且到达屏幕的底部直到00:00: 20,我该怎么做?

我也可以创建文本从上到下开始但在屏幕中间停止的情况吗?

1 个答案:

答案 0 :(得分:5)

The FFmpeg docs给出了使用drawtext过滤器时必须使用的变量的完整列表,但对于移动文本,有一些特别感兴趣:

  

“N”
  输入帧的数量,从0开始

     

“T”
  时间戳以秒表示,NAN表示输入时间戳未知

使用这些,您可以设置与已经看到的帧数相关的文本位置。这就是您的示例中的y=h-20*t表达式正在执行的操作。随着t的增加,当h-20*t减少时,文字会更接近视频的顶部。

为了让你的例子“落后”,你需要一个像20*t这样的术语。由于y位置从视频顶部的0开始,随着t的增加,它将向下移动。

对于在屏幕中间停留的文本,您可能会做一些奇特的数学运算,或者只使用FFmpeg的rich set of logical functions。类似y=t*20*lte(t*20,h/2) + h/2*gt(t*20,h/2)的{​​{1}}会移动文字而t*20小于高度的一半,然后y位置h/2一旦t*20大于一半{{1}}高度。