快捷方式

VideoReader

class torchvision.io.VideoReader(src: str, stream: str = 'video', num_threads: int = 0)[source]

[已棄用] 細粒度影片讀取 API。支援從單個影片容器逐幀讀取各種流。與之前的 video_reader API 非常相似,它支援以下後端:video_reader、pyav 和 cuda。可以透過 torchvision.set_video_backend 函式設定後端。

警告

已棄用:torchvision 的所有影片解碼和編碼功能從版本 0.22 開始已棄用,並將在版本 0.24 中移除。我們建議您遷移到 TorchCodec,未來 PyTorch 的解碼/編碼功能將整合到此處。

警告

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 (string, bytes object, 或 tensor) – 媒體源。如果是字串型別,必須是 FFMPEG 支援的檔案路徑。如果是位元組型別,應為 FFMPEG 支援的檔案在記憶體中的表示。如果是 Tensor,則在內部被解釋為位元組緩衝區。它必須是一維的,型別為 torch.uint8

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

  • num_threads (int, 可選) – 編解碼器用於解碼影片的執行緒數。預設值 (0) 根據編解碼器啟發式啟用多執行緒。效能將取決於支援的 FFMPEG 編解碼器版本。

使用 VideoReader 的示例

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

光流:使用 RAFT 模型預測運動
get_metadata() Dict[str, Any][source]

返回影片元資料。

返回:

包含每個流的時長和幀率的字典。

返回型別:

(dict)

seek(time_s: float, keyframes_only: bool = False) VideoReader[source]

在當前流中定位。

引數:
  • time_s (float) – 定位時間,單位為秒。

  • keyframes_only (bool) – 僅允許定位到關鍵幀。

注意

當前的實現是所謂的精確定位 (precise seek)。這意味著定位後,呼叫 next() 將返回具有精確時間戳的幀(如果存在),或者返回時間戳大於 time_s 的第一幀。

set_current_stream(stream: str) bool[source]

設定當前流。顯式定義我們正在操作的流。

引數:

stream (string) – 所需流的描述符。預設為 "video:0"。目前可用的流型別包括 ['video', 'audio']。每個描述符由兩部分組成:流型別(例如“video”)和唯一的流 ID(由影片編碼決定)。這樣,如果影片容器包含多個相同型別的流,使用者可以訪問他們想要的流。如果僅傳遞流型別,解碼器將自動檢測該型別的第一個流並返回它。

返回:

成功時返回 True,否則返回 False

返回型別:

(bool)

文件

訪問 PyTorch 全面的開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源