Как передать rawvideo в v4l2loopback с помощью ffmpeg? - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь обработать видео с помощью OpenCV в Python, а затем отправить каждый кадр на виртуальную камеру (т. Е. V4l2loopback). Я видел вопросы, задаваемые о том, где вывод OpenCV передается в ffmpeg и сохраняется в файл, и другие вопросы, когда видеофайл передается в v4l2 с использованием ffmpeg, но не возникает вопросов, где эти два комбинируются. Я могу сделать любую из двух указанных выше вещей самостоятельно, но не в сочетании.

Мой код Python использует подпроцесс для передачи каждого кадра в ffmpeg. Команда ffmpeg для передачи вывода OpenCV в файл .mp4:

ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast output.mp4

Это работает, и я проверил это.

Команда ffmpeg для передачи видеофайла в виртуальную версию v4l2 камера

ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0

Это также работает, и я проверил это.

Я попытался объединить две вышеупомянутые команды и получил

ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast -map 0:v -f v4l2 /dev/video0

, но я получаю следующая ошибка

[NULL @ 0x55a12fcc60] Невозможно найти подходящий выходной формат для '': неверный аргумент

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

Спасибо.

1 Ответ

1 голос
/ 24 марта 2020

Здесь я вижу две проблемы:

  1. Ошибка Unable to find a suitable output format, вероятно, связана с ошибкой цитирования / экранирования в команде в вашем коде. Выполнение той же команды из интерфейса командной строки выполняется правильно.

  2. После устранения проблемы с цитированием вы получите еще одну ошибку: V4L2 output device supports only a single raw video stream. Это означает, что вы не можете использовать libx264 для вывода на v4l2. Поэтому вместо этого пусть он автоматически выбирает выход rawvideo:

    ffmpeg -y -f rawvideo -video_size 1280x720 -pixel_format bgr24 -i - -f v4l2 /dev/video0

Дополнительная информация:

...