Coverage for lib/lottie/exporters/video.py: 0%
27 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
1import io
2import os
4import cv2
5import numpy
6from PIL import Image
8from .cairo import export_png
9from .gif import _log_frame
10from .base import exporter
11from ..parsers.baseporter import ExtraOption
14## @see http://www.fourcc.org/codecs.php
15formats4cc = {
16 "avi": cv2.VideoWriter_fourcc(*"XVID"),
17 "mp4": cv2.VideoWriter_fourcc(*'MP4V'),
18 #"mp4": cv2.VideoWriter_fourcc(*'X264'),
19 "webm": cv2.VideoWriter_fourcc(*'VP80'),
20}
23@exporter("Video", list(formats4cc.keys()), [
24 ExtraOption("format", default=None, help="Specific video format", choices=list(formats4cc.keys())),
25], [], "video")
26def export_video(animation, fp, format=None):
27 start = int(animation.in_point)
28 end = int(animation.out_point)
29 if format is None:
30 fn = fp if isinstance(fp, str) else fp.name
31 format = os.path.splitext(fn)[1][1:]
32 fmt = formats4cc[format]
33 video = cv2.VideoWriter(fp, fmt, animation.frame_rate, (animation.width, animation.height))
35 for i in range(start, end+1):
36 _log_frame(format, i, end)
37 file = io.BytesIO()
38 export_png(animation, file, i)
39 file.seek(0)
40 video.write(cv2.cvtColor(numpy.array(Image.open(file)), cv2.COLOR_RGB2BGR))
42 _log_frame(format)
43 video.release()