快速連結

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 函數設定。

警告

在不久的將來,我們計劃將 PyTorch 的影片解碼功能集中在 torchcodec 專案中。我們鼓勵您試用並分享您的意見回饋,因為 torchvision 影片解碼器最終將會被棄用。

警告

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 (字串位元組物件張量) – 媒體來源。如果為字串類型,則必須是 FFMPEG 支援的檔案路徑。如果為位元組,則應為 FFMPEG 支援的檔案的記憶體內表示法。如果為張量,則在內部解譯為位元組緩衝區。它必須是一維的,類型為 torch.uint8

  • stream (字串選用) – 所需串流的描述符,後跟串流 ID,格式為 {stream_type}:{stream_id}。預設為 "video:0"。目前可用的選項包括 ['video'、 'audio']

  • num_threads (int選用) – Codec 用於解碼影片的執行緒數。預設值 (0) 啟用多執行緒,並使用 Codec 相依的啟發式方法。效能將取決於支援的 FFMPEG Codec 版本。

使用 VideoReader 的範例

光流:使用 RAFT 模型預測移動

光流:使用 RAFT 模型預測移動

影片 API

影片 API
get_metadata() Dict[str, Any][原始碼]

傳回影片 metadata

傳回:

包含每個串流的持續時間和影格速率的字典

傳回類型:

(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 (字串) – 所需串流的描述符。預設為 "video:0" 目前可用的串流類型包括 ['video'、 'audio']。每個描述符都包含兩個部分:串流類型(例如「video」)和唯一的串流 ID(由影片編碼決定)。透過這種方式,如果影片容器包含多個相同類型的串流,使用者可以存取他們想要的串流。如果僅傳遞串流類型,解碼器會自動偵測該類型的第一個串流並傳回它。

傳回:

成功時為 True,否則為 False

傳回類型:

(bool)

文件

存取 PyTorch 的完整開發者文件

檢視文件

教學

取得初學者和進階開發者的深入教學

檢視教學

資源

尋找開發資源並獲得問題解答

檢視資源