Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
class Format(VideoFilter):
    """
    Converts pixel format of video stream
    """
    filter = 'format'
    format: str = param(name='pix_fmts')