快捷方式

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 函式設定後端。

警告

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

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

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

使用 VideoReader 的示例

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

光流:使用 RAFT 模型預測運動
get_metadata() dict[str, Any][原始碼]

返回影片元資料

返回:

包含每個流的持續時間和幀率的字典

返回型別:

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

返回:

成功時為 True,否則為 False

返回型別:

(bool)

文件

訪問全面的 PyTorch 開發者文件

檢視文件

教程

為初學者和高階開發者提供深入的教程

檢視教程

資源

查詢開發資源並讓您的問題得到解答

檢視資源