• 文件 >
  • 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 – 輸入取樣格式,決定輸入張量 (tensor) 的資料類型 (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 – 編解碼器 (Codec) 配置。

  • 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 類型,且形狀必須是 (frame, channel, height, width)。

  • 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 – 編解碼器 (Codec) 配置。

    當視訊在 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 – 波形張量。形狀:(frame, channel)dtype 必須與傳遞給 add_audio_stream() 方法的值相符。

  • pts

    呈現時間戳記。如果提供,它會以提供的值覆寫第一個影格的 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 – 影片/圖片張量。形狀: (time, channel, height, width)dtype 必須是 torch.uint8。形狀 (height, width and the number of channels) 必須與呼叫 add_video_stream() 時設定的相符。

  • pts

    呈現時間戳記。 如果提供,它會使用提供的值覆蓋第一個影格的 PTS。 否則,PTS 會按影格速率的倒數遞增。 僅處理超過內部處理的 PTS 值。

    注意:提供的值會轉換為以影格速率為基礎表示的整數值。 因此,它會被截斷為最接近 n / frame_rate 的值。

flush

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

從編碼器刷新影格,並將影格寫入目的地。

文件

存取 PyTorch 的完整開發人員文件

檢視文件

教學

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

檢視教學

資源

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

檢視資源