Добрый день, с gstreamer столкнулся в первый раз, есть поток с камеры, например могу записать его в файл:
gst-launch-1.0 nvarguscamerasrc num-buffers=1200 gainrange="1 1" ispdigitalgainrange="2 2" ! 'video/x-raw(memory:NVMM),width=1280, height=720, framerate=120/1, format=NV12' ! omxh264enc ! qtmux ! filesink location=test.mp4 -e
На выходе будет 10 секундный ролик с частотой 120 кадров в секунду. Все классно, но хочется управлять стартом остановкой записи.
Пробую реализовать это на Python:
def gstreamer():
return ('nvarguscamerasrc gainrange="1 1" ispdigitalgainrange="2 2" ! '
'video/x-raw(memory:NVMM), '
'width=1280, height=720, '
'format=(string)NV12, framerate=120/1 ! '
'nvvidconv flip-method=0 ! '
'video/x-raw, width=1280, height=720, format=(string)BGRx ! '
'videoconvert ! '
'video/x-raw, format=(string)BGR ! appsink')
cap = cv2.VideoCapture(gstreamer(), cv2.CAP_GSTREAMER)
fourcc = cv2.VideoWriter_fourcc(*"X264")
writer = cv2.VideoWriter("out/{}".format(name), fourcc, 30, (1280, 720), True)
if cap.isOpened():
for i in range(1200):
ret_val, img = cap.read()
writer.write(img)
writer.release()
cap.release()
Но Python не успевает жать в H264. Я вижу такое решение, взять поток
nvarguscamerasrc num-buffers=1200 gainrange="1 1" ispdigitalgainrange="2 2" ! 'video/x-raw(memory:NVMM),width=1280, height=720, framerate=120/1, format=NV12' ! omxh264enc ! qtmux !
Переадресовать его с помощью appsink также в Python, и когда нужно - писать или не писать.
Вопрос как записать заголовочные файлы, чтобы из потока получился видео файл?