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

Stp*_*tpn 1 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
Run Code Online (Sandbox Code Playgroud)

所以这会给我一个黑色的框架,"东西爬行"慢慢地从下往上.

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

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

bla*_*lah 5

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

'n'
输入帧的数量,从0开始

't'
时间戳以秒表示,如果输入时间戳未知则为NAN

使用这些,您可以设置与已经看到的帧数相关的文本位置.这就是y=h-20*t你的例子中的表达式正在做的事情.随着t增加,文本移动越接近视频的顶部作为h-20*t减少.

为了使你的例子"落事",你需要一个像这样的术语20*t.因为y位置从视频顶部的0开始,随着t增加,它将向下移动到屏幕上.

对于在屏幕中间停止的文本,您可能会做一些奇特的数学运算,或者只使用FFmpeg 丰富的逻辑函数集.像y=t*20*lte(t*20,h/2) + h/2*gt(t*20,h/2)其移动文本,同时t*20小于身高的一半,那么保持y位置h/2一度t*20是超过一半的高度.