• 文件 >
  • libtorio >
  • torio::io::StreamingMediaEncoder >
  • 舊版本 (穩定)
快捷方式

警告

TorchAudio 的 C++ API 是原型特性。不保證 API/ABI 的向後相容性。

注意

頂級名稱空間已從 torchaudio 更改為 torioStreamWriter 已重新命名為 StreamingMediaEncoder

torio::io::StreamingMediaEncoder

StreamingMediaEncoder 是 Python 等效實現使用的類,並提供了相似的介面。當處理自定義 I/O 時,例如記憶體中的資料,可以使用 StreamingMediaEncoderCustomIO 類。

這兩個類定義了相同的方法,因此它們的用法也相同。

建構函式

StreamingMediaEncoder

class StreamingMediaEncoder

逐塊編碼和寫入音訊/影片流

torio::io::StreamingMediaEncoderCustomIO 子類化

explicit torio::io::StreamingMediaEncoder::StreamingMediaEncoder(const std::string &dst, const std::optional<std::string> &format = c10::nullopt)

從目標 URI 構造 StreamingMediaEncoder

引數:
  • dst – 寫入編碼資料的目標。

  • format – 指定輸出格式。如果未提供,則從 dst 推斷。

StreamingMediaEncoderCustomIO

class StreamingMediaEncoderCustomIO : private detail::CustomOutput, public torio::io::StreamingMediaEncoder

它是 StreamingMediaDecoder 的一個子類,支援自定義讀取函式。可用於將媒體編碼到記憶體或自定義物件中。

torio::io::StreamingMediaEncoderCustomIO::StreamingMediaEncoderCustomIO(void *opaque, const std::optional<std::string> &format, int buffer_size, int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t (*seek)(void *opaque, int64_t offset, int whence) = nullptr)

使用自定義寫入和定址函式構造 StreamingMediaEncoderCustomIO

引數:
  • opaquewrite_packetseek 函式使用的自定義資料。

  • format – 指定輸出格式。

  • buffer_size – 中間緩衝區的大小,FFmpeg 使用它將資料傳遞給 write_packet 函式。

  • write_packet – 自定義寫入函式,由 FFmpeg 呼叫以實際將資料寫入自定義目標。

  • seek – 可選的定址函式,用於對目標進行定址。

配置方法

add_audio_stream

void torio::io::StreamingMediaEncoder::add_audio_stream(int sample_rate, int num_channels, const std::string &format, const std::optional<std::string> &encoder = c10::nullopt, const std::optional<OptionDict> &encoder_option = c10::nullopt, const std::optional<std::string> &encoder_format = c10::nullopt, const std::optional<int> &encoder_sample_rate = c10::nullopt, const std::optional<int> &encoder_num_channels = c10::nullopt, const std::optional<CodecConfig> &codec_config = c10::nullopt, const std::optional<std::string> &filter_desc = c10::nullopt)

新增一個輸出音訊流。

引數:
  • sample_rate – 取樣率。

  • num_channels – 通道數。

  • format – 輸入樣本格式,它決定了輸入張量的資料型別 (dtype)。

    • "u8": 輸入張量必須是 torch.uint8 型別。

    • "s16": 輸入張量必須是 torch.int16 型別。

    • "s32": 輸入張量必須是 torch.int32 型別。

    • "s64": 輸入張量必須是 torch.int64 型別。

    • "flt": 輸入張量必須是 torch.float32 型別。

    • "dbl": 輸入張量必須是 torch.float64 型別。

    預設值: "flt"

  • encoder – 要使用的編碼器名稱。

    如果提供,則使用指定的編碼器而不是預設編碼器。

    要列出可用的編碼器,可以使用 ffmpeg -encoders 命令。

  • encoder_option – 傳遞給編碼器的選項。要列出某個編碼器的選項,可以使用 ffmpeg -h encoder=<ENCODER> 命令。

  • encoder_format – 用於編碼媒體的格式。當編碼器支援多種格式時,傳遞此引數將覆蓋用於編碼的格式。要列出編碼器支援的格式,可以使用 ffmpeg -h encoder=<ENCODER> 命令。

  • encoder_sample_rate – 如果提供,在編碼前執行重取樣。

  • encoder_num_channels – 如果提供,在編碼前更改通道配置。

  • codec_config – 編解碼器配置。

  • filter_desc – 在編碼輸入資料之前應用的額外處理

add_video_stream

void torio::io::StreamingMediaEncoder::add_video_stream(double frame_rate, int width, int height, const std::string &format, const std::optional<std::string> &encoder = c10::nullopt, const std::optional<OptionDict> &encoder_option = c10::nullopt, const std::optional<std::string> &encoder_format = c10::nullopt, const std::optional<double> &encoder_frame_rate = c10::nullopt, const std::optional<int> &encoder_width = c10::nullopt, const std::optional<int> &encoder_height = c10::nullopt, const std::optional<std::string> &hw_accel = c10::nullopt, const std::optional<CodecConfig> &codec_config = c10::nullopt, const std::optional<std::string> &filter_desc = c10::nullopt)

新增一個輸出影片流。

引數:
  • frame_rate – 幀率

  • width – 寬度

  • height – 高度

  • format – 輸入畫素格式,它決定了輸入張量的顏色通道順序。

    • "gray8": 單通道,灰度。

    • "rgb24": 三通道,按 RGB 順序。

    • "bgr24": 三通道,按 BGR 順序。

    • "yuv444p": 三通道,按 YUV 順序。

    在任何情況下,輸入張量必須是 torch.uint8 型別,並且形狀必須是 (幀, 通道, 高度, 寬度)。

  • encoder – 參見 add_audio_stream()

  • encoder_option – 參見 add_audio_stream()

  • encoder_format – 請參閱 add_audio_stream()

  • encoder_frame_rate – 如果提供,在編碼前更改幀率。

  • encoder_width – 如果提供,在編碼前調整影像大小。

  • encoder_height – 如果提供,在編碼前調整影像大小。

  • hw_accel – 啟用硬體加速。

  • codec_config – 編解碼器配置。

    當影片在 CUDA 硬體上編碼時,例如 encoder="h264_nvenc",將 CUDA 裝置指示符傳遞給 hw_accel(即 hw_accel="cuda:0")將使 StreamingMediaEncoder 期望影片塊為 CUDA Tensor。傳遞 CPU Tensor 將導致錯誤。

    如果 None,則影片塊 Tensor 必須是 CPU Tensor。

  • filter_desc – 在編碼輸入資料之前應用的額外處理

set_metadata

void torio::io::StreamingMediaEncoder::set_metadata(const OptionDict &metadata)

設定檔案級元資料

引數:

metadata – 元資料。

寫入方法

open

void torio::io::StreamingMediaEncoder::open(const std::optional<OptionDict> &opt = c10::nullopt)

開啟輸出檔案/裝置並寫入頭部資訊。

引數:

opt – 協議、裝置和混流器的私有選項。

close

void torio::io::StreamingMediaEncoder::close()

關閉輸出檔案/裝置並完成元資料。

write_audio_chunk

void torio::io::StreamingMediaEncoder::write_audio_chunk(int i, const torch::Tensor &frames, const std::optional<double> &pts = c10::nullopt)

寫入音訊資料

引數:
  • i – 流索引。

  • frames – 波形張量 (Tensor)。形狀:(frame, channel)。其 dtype 必須與呼叫 add_audio_stream() 方法時所傳遞的值匹配。

  • pts

    表示時間戳 (Presentation timestamp)。如果提供,它將用提供的值覆蓋第一幀的 PTS。否則,PTS 將以取樣率的倒數遞增。只有超出內部處理的 PTS 值才有效。

    注意:提供的值將被轉換為以取樣率為基礎的整數值。因此,它將被截斷到最接近 n / sample_rate 的值。

write_video_chunk

void torio::io::StreamingMediaEncoder::write_video_chunk(int i, const torch::Tensor &frames, const std::optional<double> &pts = c10::nullopt)

寫入影片資料

引數:
  • i – 流索引。

  • frames – 影片/影像張量 (Tensor)。形狀:(time, channel, height, width)。其 dtype 必須是 torch.uint8。形狀 (height, width and the number of channels) 必須與呼叫 add_video_stream() 時配置的一致。

  • pts

    表示時間戳 (Presentation timestamp)。如果提供,它將用提供的值覆蓋第一幀的 PTS。否則,PTS 將以幀率的倒數遞增。只有超出內部處理的 PTS 值才有效。

    注意:提供的值將被轉換為以幀率為基礎的整數值。因此,它將被截斷到最接近 n / frame_rate 的值。

flush

void torio::io::StreamingMediaEncoder::flush()

重新整理編碼器中的幀並將幀寫入目標位置。

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

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

檢視教程

資源

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

檢視資源