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

21 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-03-31 18:44 -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 with NamedTemporaryFile(suffix=".mp4", delete_on_close=False) as f: 

16 blob.write_videofile(f.name) 

17 blob.close() 

18 

19 f.close() 

20 

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

22 

23 super().__init__(blob) 

24 

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

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

27 

28 return VideoFileClip(filename) 

29 

30 @override 

31 def __repr__(self) -> str: 

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