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的示例