Coverage for src/blob_dict/blob/video.py: 0%

23 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-10 20:16 -0700

1from __future__ import annotations 

2 

3from pathlib import Path 

4from tempfile import NamedTemporaryFile 

5from typing import override 

6 

7from moviepy.editor import VideoClip, VideoFileClip 

8 

9from . import BytesBlob 

10 

11 

12class VideoBlob(BytesBlob): 

13 def __init__(self, blob: bytes | VideoClip) -> None: 

14 if isinstance(blob, VideoClip): 

15 if ( 

16 isinstance(blob, VideoFileClip) 

17 and blob.filename.endswith(".mp4") 

18 ): 

19 blob = Path(blob.filename).read_bytes() 

20 else: 

21 with NamedTemporaryFile(suffix=".mp4", delete_on_close=False) as f: 

22 blob.write_videofile(f.name) 

23 blob.close() 

24 

25 f.close() 

26 

27 blob = Path(f.name).read_bytes() 

28 

29 super().__init__(blob) 

30 

31 def as_video(self, filename: str) -> VideoFileClip: 

32 Path(filename).write_bytes(self._blob_bytes) 

33 

34 return VideoFileClip(filename) 

35 

36 @override 

37 def __repr__(self) -> str: 

38 return f"{self.__class__.__name__}(...)"