VidGear
https://abhitronix.github.io/vidgear/latest/
https://abhitronix.github.io/vidgear/latest/switch_from_cv/

video_input_path=''
video_output_path=''
# import required libraries
import cv2
from vidgear.gears import CamGear
from vidgear.gears import WriteGear
stream = CamGear(video_input_path).start()
# Define WriteGear Object
# with suitable output filename for e.g. `Output.mp4`
output_params={"-input_framerate":stream.framerate.real}
vid_writer = WriteGear(video_output_path, logging=True, **output_params)
# loop over
while True:
# read frames from stream
frame = stream.read()
# check for frame if Nonetype
if frame is None:
print("end of frame");break
# {do something with the frame here}
# write frame to writer
vid_writer.write(frame)
# check for 'q' key if pressed
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cv2.destroyAllWindows() # close output window
stream.stop() # safely close video stream
vid_writer.close() # safely close writer
https://ipython.readthedocs.io/en/stable/api/generated/IPython.display.html#IPython.display.Video
from IPython.display import Video Video(video_output_path)