clips_at_random_indices¶
- torchcodec.samplers.clips_at_random_indices(decoder: VideoDecoder, *, num_clips: int = 1, num_frames_per_clip: int = 1, num_indices_between_frames: int = 1, sampling_range_start: int = 0, sampling_range_end: Optional[int] = None, policy: Literal['repeat_last', 'wrap', 'error'] = 'repeat_last') FrameBatch[source]¶
在随机索引处采样 clips。
- Parameters:
解码器 (VideoDecoder) – 用于从中采样片段的
VideoDecoder实例。num_clips (int, 可选) – 返回的剪辑数量。默认值:1。
num_frames_per_clip (int, 可选) – 每个剪辑的帧数。默认值:1。
num_indices_between_frames (int, 可选) – 片段内帧之间的索引数。默认值:1,表示帧是连续的。这有时被称为“扩张”。
sampling_range_start (int, optional) – 采样范围的起始点, 定义了剪辑可能开始的第一个索引。默认值: 0,即视频的开始。
sampling_range_end (int 或 None, 可选) – 采样范围的结束,定义了剪辑可能开始的最后一个索引。这个值是排他的,即剪辑只能在[
sampling_range_start,sampling_range_end)范围内开始。如果为None(默认值),则自动设置该值,以确保剪辑永远不会超出视频的末尾。例如,如果视频中最后一个有效索引是99,且剪辑跨越10帧,则该值设置为99 - 10 + 1 = 90。接受负值,等同于len(video) - val。当剪辑超出视频末尾时,policy参数定义了如何构建此类剪辑。policy (str, optional) –
定义如何构建超出视频末尾的剪辑。这最好通过一个例子来描述: 假设视频中最后一个有效索引是99,并且一个剪辑从索引95开始采样,使用
num_frames_per_clip=5和num_indices_between_frames=2,剪辑中的帧索引应该是[95, 97, 99, 101, 103]。但是101和103是 无效索引,因此policy参数定义了如何用有效索引替换这些帧:”repeat_last”:重复剪辑的最后一个有效帧。我们会得到[95, 97, 99, 99, 99]。
”wrap”:绕回到剪辑的开头。我们会得到[95, 97, 99, 95, 97]。
”error”:引发错误。
默认是“repeat_last”。请注意,当
sampling_range_end=None(默认)时,此策略参数不太可能相关。
- Returns:
采样的片段,作为一个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)。- Return type:
使用
clips_at_random_indices的示例: