Coverage for src/ensae_teaching_cs/helpers/video_helper.py: 85%
20 statements
« prev ^ index » next coverage.py v7.1.0, created at 2023-04-28 06:23 +0200
« prev ^ index » next coverage.py v7.1.0, created at 2023-04-28 06:23 +0200
1"""
2@file
3@brief video helpers
4"""
5import os
8def make_video(images, outvid=None, fps=5, size=None,
9 is_color=True, format="XVID"):
10 """
11 Creates a video from a list of images.
13 @param outvid output video
14 @param images list of images to use in the video
15 @param fps frames per second
16 @param size size of each frame
17 @param is_color color
18 @param format see `fourcc <http://www.fourcc.org/codecs.php>`_
19 @return `VideoWriter <http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/
20 py_gui/py_video_display/py_video_display.html>`_
22 The function relies on `opencv <http://opencv-python-tutroals.readthedocs.org/en/latest/>`_.
23 By default, the video will have the size of the first image.
24 It will resize every image to this size before adding them to the video.
25 The function does not use :epkg:`moviepy` but it is a
26 a recommended module to do that.
27 """
28 if len(images) == 0:
29 raise ValueError("no image to convert into a video")
30 from cv2 import VideoWriter, VideoWriter_fourcc, imread, resize # pylint: disable=E0401
31 fourcc = VideoWriter_fourcc(*format)
32 vid = None
33 for image in images:
34 if not os.path.exists(image):
35 raise FileNotFoundError(image)
36 img = imread(image)
37 if vid is None:
38 if size is None:
39 size = img.shape[1], img.shape[0]
40 vid = VideoWriter(outvid, fourcc, float(fps), size, is_color)
41 if size[0] != img.shape[1] and size[1] != img.shape[0]:
42 img = resize(img, size)
43 vid.write(img)
44 vid.release()
45 return vid