The following code snippet is used to save a video file using OpenCV:
from multiprocessing import Process
from .streams import InputStream
from .camera import *
import cv2
import imutils
import logging
import time
import os
import numpy as np
import skvideo.io
log = logging.getLogger('igate')
class RecordWorker:
def __init__(self, camera, config):
self.config = config
self.process = Process(target = self.save, args = (camera, ))
def start(self):
self.process.start()
return self
def save(self, camera):
log.debug(f'{camera.id} RecordWorker SAVE started')
fourcc = cv2.VideoWriter_fourcc(*"MJPG")
videofile_count = self.get_start_videofile_number()
video_filepath = self.config['video_save_path'] + camera.view + '_' + f'{videofile_count:03d}' + '.avi'
log.info(f'Saving video: {video_filepath}')
video_writer = cv2.VideoWriter(video_filepath, fourcc, 25.0, (640,360), True)
#writer = skvideo.io.FFmpegWriter(video_filepath + '.avi')
while True:
frame, index = camera.inputStream.read()
if frame is not None:
log.info("got frame...");
video_writer.write(np.uint8(255*frame))
camera.inputStream.stop()
video_writer.release()
def get_start_videofile_number(self):
return 2
Проблема в том, что файл, сохраненный в выходной папке, поврежден, имеет размер 6 КБ и не содержит никакого содержимого (похоже, изначально кадр не читался). Может кто-нибудь помочь мне с тем, что могло пойти не так здесь?