Я пытаюсь добавить сетку в прямую трансляцию видео, и мне нужно, чтобы сетка могла двигаться на основе внешних данных.
Я могу нарисовать прямоугольник на видео с помощью ffmpeg:
ffmpeg -i input.mpg -vf drawbox=x=100:y=100:w=20:h=20:c=red output.mpg
(Обратите внимание, что сейчас я просто тестирую видеофайлы, так как это упрощает некоторые его части.)
Однако, как представляется, не существует способа для внешней настройки значений x
и y
после запуска команды. Это было бы идеально, если бы был способ легко прочитать их, например, из stdin или /dev/shm/reticle-pos.txt
, но я не могу найти способ сделать это.
Другой вариант, который я пробовал, - нарисовать сетку снаружи с помощью imagemagick, а затем наложить ее на ffmpeg:
while true; do
for x in {100..500..1}; do
convert -size 1080x720 xc:none -fill none -stroke red -strokewidth 2 \
-draw "ellipse $x,100 10,10 0,360" -scale 1080x720 /dev/shm/newreticle.png
cp /dev/shm/newreticle.png /dev/shm/reticle.png
sleep 0.001
done
done &
ffmpeg -i input.mpg -i /dev/shm/reticle.png -filter_complex overlay output.mpg
Однако это не работает, так как кажется, что ffmpeg читает файл изображения только один раз, а не в каждом кадре.
Как нарисовать сетку поверх видео таким образом, чтобы я мог контролировать положение сетки?