當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。