FFmpeg drawtext过滤器-是否可以将带有实时数据的变量用于x,y坐标?

时间:2019-04-27 06:13:49

标签: ffmpeg drawtext

我想为FFmpeg的drawtext过滤器的x,y坐标使用变量,以便为它们提供实时数据。以下使用sendcmd的解决方案有效,但我必须在开头添加相对时间码,以便FFmpeg可以将坐标链接到时间位置。是否可以在没有时间码的情况下仅使用实际坐标来完成,并告诉FFmpeg应该每100ms更新一次这些坐标?

在我的情况下看起来像这样:

cmd.txt

drawtext重新初始化'x = 960:y = 540'; (当实时来源有新职位时,坐标会发生变化,FFmpeg会通过sendcmd定期更新这些职位。)

谢谢!

1 个答案:

答案 0 :(得分:0)

使用sendcmd可以达到目的,这就是使用它的方式(以下示例使用vaapi hw加速和回送设备作为输入):

ffmpeg -vaapi_device /dev/dri/renderD128 -f v4l2 -i /dev/video0 -vf "sendcmd=f=cmd.txt,drawtext=fontfile=abc.ttf:fontsize=60:fontcolor=white@0.8:bordercolor=black@0.1:borderw=1:r=25:text='O',format=nv12,hwupload" -c:v h264_vaapi out.mp4

cmd.txt的格式:

0   drawtext     reinit  'x=800:y=440';
0.1 drawtext     reinit  'x=900:y=580';
0.2 drawtext     reinit  'x=560:y=740';
0.3 drawtext     reinit  'x=580:y=640';
0.4 drawtext     reinit  'x=960:y=540';
0.5 drawtext     reinit  'x=800:y=440';
0.6 drawtext     reinit  'x=900:y=580';
0.7 drawtext     reinit  'x=560:y=740';
0.8 drawtext     reinit  'x=580:y=640';
0.9 drawtext     reinit  'x=960:y=540';
1   drawtext     reinit  'x=800:y=440';