快捷方式

VideoReader

class torchvision.io.VideoReader(src: str, stream: str = 'video', num_threads: int = 0)[源代码]

[已弃用] 精细的视频读取 API。支持从单个视频容器的各种流进行逐帧读取。与之前的 video_reader API 类似,它支持以下后端:video_reader、pyav 和 cuda。可以通过 torchvision.set_video_backend 函数设置后端。

警告

已弃用:torchvision 的所有视频解码和编码功能从 0.22 版本开始已弃用,并将在 0.24 版本中移除。我们建议您迁移到 TorchCodec,我们将在其中整合 PyTorch 未来未来的解码/编码功能。

警告

VideoReader 类处于 Beta 阶段,不保证向后兼容。

示例

以下示例创建了一个 VideoReader 对象,跳转到 2 秒处,并返回一帧

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'])

同样,可以通过以下方式实现读取 2 秒时间戳后 10 帧:

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

注意

每个流描述符包含两部分:流类型(例如,“video”)和唯一的流 ID(由视频编码确定)。这样,如果视频容器包含多个相同类型的流,用户可以访问他们想要的那个。如果仅传递流类型,则解码器会自动检测该类型的第一个流。

参数:
  • src (string, bytes object, or tensor) – 媒体源。如果为 string 类型,则必须是 FFMPEG 支持的文件路径。如果是 bytes,则应是 FFMPEG 支持的文件的内存表示。如果是 Tensor,它将在内部解释为字节缓冲区。它必须是一维的,类型为 torch.uint8

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

  • num_threads (int, optional) – 编解码器用于解码视频的线程数。默认值(0)启用多线程,并采用编解码器相关的启发式方法。性能将取决于所支持的 FFMPEG 编解码器版本。

使用 VideoReader 的示例

光流:使用 RAFT 模型预测运动

光流:使用 RAFT 模型预测运动
get_metadata() dict[str, Any][源代码]

返回视频元数据

返回:

包含每个流的持续时间和帧率的字典

返回类型:

(dict)

seek(time_s: float, keyframes_only: bool = False) VideoReader[源代码]

在当前流中跳转。

参数:
  • time_s (float) – 跳转时间(秒)

  • keyframes_only (bool) – 仅允许跳转到关键帧

注意

当前实现是所谓的精确跳转。这意味着在跳转之后,调用 next() 将返回具有精确时间戳的帧(如果存在),或者返回时间戳大于 time_s 的第一帧。

set_current_stream(stream: str) bool[源代码]

设置当前流。显式定义我们正在操作的流。

参数:

stream (string) – 所需流的描述符。默认为 "video:0"。当前可用的流类型包括 ['video', 'audio']。每个描述符包含两部分:流类型(例如,“video”)和唯一的流 ID(由视频编码确定)。这样,如果视频容器包含多个相同类型的流,用户可以访问他们想要的那个。如果仅传递流类型,则解码器会自动检测该类型的第一个流并返回它。

返回:

成功时为 True,否则为 False

返回类型:

(bool)

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源