1

Поэтому в моем проекте мне нужно захватить видеопоток, декодировать видео, запустить отдельные кадры с помощью алгоритма обнаружения объекта и затем воспроизвести вывод в виде видео.

Вся эта операция выполняется на сервере Linux с парой Tesla V100, 40-ядерным процессором (точная модель пока не может вспомнить) и смехотворным объемом оперативной памяти. Он должен воспроизводить видео с разрешением 720x576i со скоростью 25 кадр / с (прогрессивное), поэтому деинтерлейсинг также должен происходить на лету.

Само собой разумеется, что обнаружение объекта является самой медленной операцией, происходящей здесь, но в настоящее время я смотрю, как лучше подходить к транскодированию.

Теперь, поскольку у меня есть доступ к такому мощному графическому процессору, я подумал, что было бы разумно использовать его, но я также читал в нескольких местах, что транскодирование на GPU отстой.

В любом случае у меня установлена cuda 9.0, поэтому я собрал ffmpeg со следующими включенными параметрами:

--enable-libavcodec  --enable-libx264 --enable-gpl --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp

(Я на 95% уверен, что это все, но если это действительно важно, проверьте, как только у меня будет доступ к серверу, который должен быть через пару дней)

Какой лучший способ продолжить отсюда? Я не очень знаком с ffmpeg и тем более, когда дело касается всех опций, связанных с gpu.

Я попытался деинтерлейсинг с -vf: yadif_cuda , но это не удалось, сказав, что этот фильтр недоступен. Я думал, что это будет доступно, если я включил CUDA в опциях сборки.

Я понятия не имею, какие параметры использовать при декодировании (например, -hwaccel ???, -c:v libx264 или h264_cuvid и т.д.), А также я не уверен, как следует отображать кадры, когда алгоритм обнаружения их выплевывает из. Я просто «играю» их? Перекодировать ли я, и если да, то как?

Любая помощь очень ценится, и, если понадобится дополнительная информация, я с радостью предоставлю то, что могу.

Я сделал диаграмму, чтобы уточнить, как все это должно закончиться:

Python используется для алгоритма, возможно, со сквидо для захвата и воспроизведения. Я мог бы также просто использовать ffmpeg напрямую (с командой bash, выполняемой из скрипта python), хотя при необходимости.

Все, что находится между Capture и Play, должно происходить вживую, то есть во время передачи видео конечному пользователю.

0