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
« prev ^ index » next coverage.py v7.7.1, created at 2025-03-31 18:44 -0700
1from __future__ import annotations
3from pathlib import Path
4from tempfile import NamedTemporaryFile
5from typing import override
7from moviepy.editor import VideoClip, VideoFileClip
9from . import BytesBlob
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()
19 f.close()
21 blob = Path(f.name).read_bytes()
23 super().__init__(blob)
25 def as_video(self, filename: str) -> VideoFileClip:
26 Path(filename).write_bytes(self._blob_bytes)
28 return VideoFileClip(filename)
30 @override
31 def __repr__(self) -> str:
32 return f"{self.__class__.__name__}(...)"