clips_at_random_timestamps¶
- torchcodec.samplers.clips_at_random_timestamps(decoder, *, num_clips: int = 1, num_frames_per_clip: int = 1, seconds_between_frames: Optional[float] = None, sampling_range_start: Optional[float] = None, sampling_range_end: Optional[float] = None, policy: Literal['repeat_last', 'wrap', 'error'] = 'repeat_last') FrameBatch [源代码]¶
在随机时间戳处采样 片段。
- 参数:
decoder (VideoDecoder) – 用于从中采样片段的
VideoDecoder
实例。num_clips (int, 可选) – 要返回的 clips 数量。默认为:1。
num_frames_per_clip (int, 可选) – 每个 clip 的帧数。默认为:1。
seconds_between_frames (float 或 None, 可选) – 片段内每帧之间的时间(以秒为单位)。更准确地说,这定义了帧采样点之间的时间,即我们采样帧的时间戳。由于帧跨越时间间隔,因此片段内帧的实际开始时间可能不完全由
seconds_between_frames
间隔开 - 但平均而言,它们是。默认值为 None,它被设置为平均帧持续时间(1/average_fps
)。sampling_range_start (float 或 None, 可选) – 采样范围的开始,它定义了片段可以开始的第一个时间戳(以秒为单位)。默认值:None,对应于视频的开始。(注意:有些视频从负值开始,这就是为什么默认值不是 0)。
sampling_range_end (float 或 None, 可选) – 采样范围的结束,它定义了片段可以开始的最后一个时间戳(以秒为单位)。此值是排他的,即片段只能在 [
sampling_range_start
,sampling_range_end
) 内开始。如果为 None(默认值),则自动设置该值,以便片段永远不会跨越视频的结尾,即设置为end_video_seconds - (num_frames_per_clip - 1) * seconds_between_frames
。当片段跨越视频结尾时,policy
参数定义了如何构建此类片段。policy (str, 可选) –
定义如何构建跨越视频结尾的片段。这最好用一个例子来描述:假设视频的最后一个有效(可搜索)时间戳是 10.9,并且一个片段被采样为从时间戳 10.5 开始,
num_frames_per_clip=5
和seconds_between_frames=0.2
,片段中帧的采样时间戳应该是 [10.5, 10.7, 10.9, 11.1, 11.2]。但是 11.1 和 11.2 是无效时间戳,所以policy
参数定义了如何用有效的采样时间戳替换这些帧。”repeat_last”:重复片段的最后一帧。我们将获得在时间戳 [10.5, 10.7, 10.9, 10.9, 10.9] 处采样的帧。
”wrap”:循环到片段的开头。我们将获得在时间戳 [10.5, 10.7, 10.9, 10.5, 10.7] 处采样的帧。
“error”:引发错误。
默认为“repeat_last”。请注意,当
sampling_range_end
=None(默认)时,此 policy 参数不太可能相关。
- 返回:
采样后的 片段,作为一个 5D
FrameBatch
。data
字段的形状是(num_clips
,num_frames_per_clips
, …),其中 … 是(H, W, C)或(C, H, W),取决于VideoDecoder
的dimension_order
参数。pts_seconds
和duration_seconds
字段的形状是(num_clips
,num_frames_per_clips
)。- 返回类型:
使用
clips_at_random_timestamps
的示例