FFmpeg drawtext和带有sendcmd / zmq的实时坐标

时间:2019-05-09 11:57:01

标签: ffmpeg zeromq

我想在具有外部实时数据的实时视频源上使用标记来设置x,y坐标。 sendcmd可以读取文本文件,但不会更新它,因此以后的更新将不会执行。只能使用zmq吗?如果是这样,我可以将zmq用作单个过滤器(带有drawtext),而不用于复杂的过滤器吗?

我有一个以适当格式将实时坐标导出到cmd.txt文件的python。我使用unix时间作为坐标,我还从实时环回设备复制输入时间戳,因此它们几乎具有相同的时间。延迟很小,所以我用+ 1.5s补偿了导出的时间戳。这意味着标记将在这个额外的时间段内移动(而cmd.txt中的时间戳比实时源要早一些),但不会再更新了。我认为FFmpeg会读取此cmd.txt,并且不会再对其进行更新,但是我的python正在不断编写它。

cmd.txt的示例行:

1557402120.3119707 drawtext reinit 'x=752:y=480';

这是实际的ffmpeg管道:

ffmpeg -fflags nobuffer -vaapi_device /dev/dri/renderD128 -f v4l2 -i /dev/video0 -vf "sendcmd=f=cmd.txt,drawtext=fontfile=font.ttf:fontsize=30:fontcolor=white:r=25:text='o',format=nv12,hwupload" -copyts -c:v h264_vaapi -qp 24 -y 0.mp4

Source是使用unix时间作为输入时间戳的环回设备。

1 个答案:

答案 0 :(得分:1)

您可以在简单的过滤器链中使用zmq代替sendcmd。

还有另一种方法,目前尚未公开。发送击键

Cdrawtext 1557402120.3119707 reinit 'x=752:y=480'<enter>

到ffmpeg的标准输入。

最初的cC用于命令,紧随其后(无空格)的是过滤器类/实例。您可以使用all向所有可以接收一个过滤器的命令发送命令。您可以发送\n来通知<enter>