Shortcuts

Source code for pytorchvideo.data.video

# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.

import io
import pathlib
from abc import ABC, abstractmethod
from typing import BinaryIO, Dict, Optional

import torch
from iopath.common.file_io import g_pathmgr


[docs]class Video(ABC): """ Video provides an interface to access clips from a video container. """
[docs] @classmethod def from_path(cls, file_path: str, decode_audio: bool = True): """ Fetches the given video path using PathManager (allowing remote uris to be fetched) and constructs the EncodedVideo object. Args: file_path (str): a PathManager file-path. """ # We read the file with PathManager rather than pyav so that we can read from # remote uris. with g_pathmgr.open(file_path, "rb") as fh: video_file = io.BytesIO(fh.read()) return cls(video_file, pathlib.Path(file_path).name, decode_audio)
@property @abstractmethod def duration(self) -> float: """ Returns: duration of the video in seconds """ pass
[docs] @abstractmethod def get_clip( self, start_sec: float, end_sec: float ) -> Dict[str, Optional[torch.Tensor]]: """ Retrieves frames from the internal video at the specified start and end times in seconds (the video always starts at 0 seconds). Args: start_sec (float): the clip start time in seconds end_sec (float): the clip end time in seconds Returns: video_data_dictonary: A dictionary mapping strings to tensor of the clip's underlying data. """ pass
[docs] @abstractmethod def __init__( self, file: BinaryIO, video_name: Optional[str] = None, decode_audio: bool = True, ) -> None: """ Args: file (BinaryIO): a file-like object (e.g. io.BytesIO or io.StringIO) that contains the encoded video. """ pass