Чтение закодированных кадров с веб-камеры с помощью Python OpenCV

На данный момент у меня есть класс VideoImageTrack я показываю ниже (адаптированный отсюда ), который возвращает av VideoFrame . Сценарий, который я показываю, работает отлично. Моя проблема в том, что шаг кодирования кадра:

VideoFrame.from_ndarray(image, format="bgr24")

довольно медленно

Существует ли конвейер gstreamer который выводит уже закодированный кадр и итерируется с помощью python-opencv read() ?

class VideoImageTrack(VideoStreamTrack):
    """
    A video stream track that returns a rotating image.
    """

    def __init__(self):
        super().__init__()  # don't forget this!

        self.video = cv2.VideoCapture("v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=15/1,bitrate=250000  ! appsink")


    async def recv(self):
        pts, time_base = await self.next_timestamp()

        retval, image = self.video.read()
        frame = VideoFrame.from_ndarray(image, format="bgr24")
        frame.pts = pts
        frame.time_base = time_base

        return frame

Всего 1 ответ


Хотя я не знаю, будет ли обработка быстрее, но вы можете попробовать использовать видеоконвертер GStreamer, который транскодирует видеокадры между многими форматами.

Пример конвейера:

v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=BGR,width=640,height=480,framerate=15/1 ! appsink

Есть идеи?

10000