FFmpeg Drawtext Filter - возможно ли использовать переменные с живыми данными для координат x, y? - PullRequest
1 голос
/ 27 апреля 2019

Я хотел бы использовать переменные для координат X, Y фильтра DrawFext фильтра FFmpeg, чтобы я мог снабжать их данными в реальном времени.Приведенное ниже решение с sendcmd работает, но я должен добавить относительные временные коды в начале, чтобы FFmpeg мог связывать координаты с временными позициями.Можно ли это сделать без временных кодов только с фактическими координатами и сообщить FFmpeg, что он должен обновлять эти координаты каждые 100 мс?

В моем случае это выглядело бы так:

cmd.txt

drawtext reinit 'x = 960: y = 540';(координаты меняются, когда из живого источника появляется новая позиция, и FFmpeg регулярно обновляет их с помощью sendcmd).

Спасибо!

1 Ответ

0 голосов
/ 03 мая 2019

Используя 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';
...