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

1import io 

2import os 

3 

4import cv2 

5import numpy 

6from PIL import Image 

7 

8from .cairo import export_png 

9from .gif import _log_frame 

10from .base import exporter 

11from ..parsers.baseporter import ExtraOption 

12 

13 

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} 

21 

22 

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)) 

34 

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)) 

41 

42 _log_frame(format) 

43 video.release()