class Upload(VideoFilter): """ Uploads a stream to a hardware device """ filter = 'hwupload' extra_hw_frames: int = param(default=64, init=False) device: Device = param(skip=True) def transform(self, *metadata: Meta) -> VideoMeta: """ Marks a stream as uploaded to a device.""" meta = ensure_video(*metadata) return replace(meta, device=self.device)
class SetPTS(AutoFilter): """ Change the PTS (presentation timestamp) of the input frames. $ ffmpeg -y -i source.mp4 \ -vf trim=start=3:end=4,setpts=PTS-STARTPTS -an test.mp4 Supported cases for metadata handling: * "PTS-STARTPTS" - resets stream start to zero. """ RESET_PTS = 'PTS-STARTPTS' filter = 'setpts' expr: str = param(default=RESET_PTS) def transform(self, *metadata: Meta) -> Meta: meta = metadata[0] expr = self.expr.replace(' ', '') if expr == self.RESET_PTS: duration = meta.duration - meta.start return replace(meta, start=TS(0), duration=duration) raise NotImplementedError() @property def args(self) -> str: return self.expr
class Scale(VideoFilter): # noinspection PyUnresolvedReferences """ Video scaling filter. :arg width: resulting video width :arg height: resulting video height """ filter = "scale" hardware = None # cpu only width: int = param(name='w') height: int = param(name='h') def transform(self, *metadata: Meta) -> Meta: meta = ensure_video(*metadata) par = meta.dar / (self.width / self.height) return replace(meta, width=self.width, height=self.height, par=par)
class Upload(VideoFilter): """ Uploads a stream to a hardware device """ filter = 'hwupload' extra_hw_frames: int = param(default=64, init=False) device: Device = param(skip=True) def __post_init__(self) -> None: if isinstance(self.device, dict): # deserialize back after filter cloning self.device = Device(**self.device) super().__post_init__() def transform(self, *metadata: Meta) -> VideoMeta: """ Marks a stream as uploaded to a device.""" meta = ensure_video(*metadata) return replace(meta, device=self.device)
class Format(VideoFilter): """ Converts pixel format of video stream """ filter = 'format' format: str = param(name='pix_fmts')