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
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-10 20:16 -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 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()
25 f.close()
27 blob = Path(f.name).read_bytes()
29 super().__init__(blob)
31 def as_video(self, filename: str) -> VideoFileClip:
32 Path(filename).write_bytes(self._blob_bytes)
34 return VideoFileClip(filename)
36 @override
37 def __repr__(self) -> str:
38 return f"{self.__class__.__name__}(...)"