class MyVideoPlayer(VideoPlayer): def __init__(self, filename: str, window_title: str, worker_type='thread'): super().__init__(filename, window_title, reverse=True, worker_type=worker_type) self._video_writer = VideoWriter( 'rendered.ts', cv.VideoWriter_fourcc('m', 'p', '2', 'v'), self._video_reader.fps, self._video_reader.frame_size, worker_type) def _pre_render_hook(self, frame: np.ndarray) -> NoReturn: frame[:, :frame.shape[1] // 2] = np.clip( 1.5 * frame[:, :frame.shape[1] // 2], 0, 255) self._video_writer.write(frame) def _dispose(self) -> NoReturn: self._video_writer.close() super()._dispose()
async def save(request): buffer = frameserver.get_buffer("test") writer = VideoWriter("/home/hannes/Projekte/studienarbeit/test/out.mp4") writer.open() writer.write_packets(buffer.get_packets()) subscription = buffer.get_observable().subscribe( on_next=lambda p: writer.write_packet(p)) await asyncio.sleep(10) subscription.dispose() writer.close() last = buffer.get_packets()[-1] if (last == None): return web.Response(content_type="text/html", text="No Frame") output = io.BytesIO() frame = last.decode()[0].to_image() frame.save(output, format='PNG') output.seek(0) output_s = output.read() b64 = b64encode(output_s) return web.Response(content_type="text/html", text="<img src='data:image/png;base64," + str(b64)[2:-1] + "'>")
# video io from videoreader import VideoReader from videowriter import VideoWriter # OpenCV import cv2 if __name__ == '__main__': parser = IOParser() reader = VideoReader(parser.input_file) writer = VideoWriter(parser.output_file, reader.fps, (reader.width, reader.height), color=False) ''' OpenCV allows for you to easily switch between colorspaces using the cvtColor method Note - no video players will be able to play a single channel grayscale video so each channel, R,G,B are given the same intensity values to represent grayscale. ''' for frame in reader: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ''' if we didn't specify that our VideoWriter is grayscale, we would have to convert back to BGR to output a playable version. ''' # to_bgr = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) writer.write_frame(gray) writer.close() reader.close()