When I try to use cv2.VideoWriter
with multiproccesing, I get an error (shown below). How do I fix this?
from .audio import Audio
from .video import Video
from uuid import uuid1
from os import mkdir,listdir
from multiprocessing import Process
import ffmpeg
class Recorder(Video,Audio):
def __init__(self):
unique_id = uuid1()
self.unique_id = unique_id
directory = listdir(".")
if "tmp" not in directory:
mkdir("tmp")
Video.__init__(self,self.unique_id)
Audio.__init__(self,self.unique_id)
def record_screen(self):
video = Process(target = self._record_video)
video.start()
audio = Process(target = self._record_audio)
audio.start()
def _combine_audio_and_video(self,path):
video = ffmpeg.input(f'./tmp/{self.unique_id}/video.avi')
audio = ffmpeg.input(f'./tmp/{self.unique_id}/output.wav')
out = ffmpeg.output(video, audio, path, vcodec='copy', acodec='aac', strict='experimental')
out.run()
def stop(self):
stop_video = Process(target = self.stop_video)
stop_video.start()
stop_audio = Process(target = self.stop_audio)
stop_audio.start()
def save(self,path):
print("Saving....")
self._combine_audio_and_video(path)
print("FILE SAVED")
The error is
Traceback (most recent call last):
File "e:\SCREEN RECORDER WITH PY\ok.py", line 5, in <module>
ok.record_screen()
File "e:\SCREEN RECORDER WITH PY\screen_recorder\recorder.py", line 19, in record_screen
video.start()
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\multiprocessing\context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\multiprocessing\context.py", line 327, in _Popen
return Popen(process_obj)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
reduction.dump(process_obj, to_child)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle 'cv2.VideoWriter' object