|
|
|
|
|
import av |
|
|
|
|
|
def get_video_container(path_to_vid, multi_thread_decode=False, backend="pyav"): |
|
""" |
|
Given the path to the video, return the pyav video container. |
|
Args: |
|
path_to_vid (str): path to the video. |
|
multi_thread_decode (bool): if True, perform multi-thread decoding. |
|
backend (str): decoder backend, options include `pyav` and |
|
`torchvision`, default is `pyav`. |
|
Returns: |
|
container (container): video container. |
|
""" |
|
if backend == "torchvision": |
|
with open(path_to_vid, "rb") as fp: |
|
container = fp.read() |
|
return container |
|
elif backend == "pyav": |
|
|
|
container = av.open(path_to_vid) |
|
if multi_thread_decode: |
|
|
|
container.streams.video[0].thread_type = "AUTO" |
|
|
|
|
|
return container |
|
else: |
|
raise NotImplementedError("Unknown backend {}".format(backend)) |
|
|