当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch VideoReader用法及代码示例


本文简要介绍python语言中 torchvision.io.VideoReader 的用法。

用法:

class torchvision.io.VideoReader(path: str, stream: str = 'video')

参数

  • path(string) -支持格式的视频文件的路径

  • stream(string,可选的) -所需流的说明符,后跟流 id,格式为 {stream_type}:{stream_id} 。默认为 "video:0" 。当前可用的选项包括['video', 'audio']

细粒度的video-reading API。支持 frame-by-frame 从单个视频容器中读取各种流。

示例

以下示例创建一个VideoReader 对象,寻找 2s 点,并返回单个帧:

import torchvision
video_path = "path_to_a_test_video"
reader = torchvision.io.VideoReader(video_path, "video")
reader.seek(2.0)
frame = next(reader)

VideoReader 实现了可迭代的 API,这使得它适合与 itertools 结合使用以进行更高级的阅读。因此,我们可以在 for 循环中使用 VideoReader 实例:

reader.seek(2)
for frame in reader:
    frames.append(frame['data'])
# additionally, `seek` implements a fluent API, so we can do
for frame in reader.seek(2):
    frames.append(frame['data'])

使用 itertools ,我们可以使用以下代码读取 2 到 5 秒之间的所有帧:

for frame in itertools.takewhile(lambda x: x['pts'] <= 5, reader.seek(2)):
    frames.append(frame['data'])

类似地,在2s时间戳之后读取10帧可以实现如下:

for frame in itertools.islice(reader.seek(2), 10):
    frames.append(frame['data'])

注意

每个流说明符由两部分组成:流类型(例如‘video’)和唯一的流id(由视频编码确定)。这样,如果视频容器中包含多个相同类型的码流,用户可以只访问自己想要的码流。如果仅传递流类型,解码器将自动检测该类型的第一个流。

使用 VideoReader 的示例:

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torchvision.io.VideoReader。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。