警告
TorchAudio 的 C++ API 是原型特性。不保證 API/ABI 的向後相容性。
注意
頂級名稱空間已從 torchaudio 更改為 torio。 StreamWriter 已重新命名為 StreamingMediaEncoder。
torio::io::StreamingMediaEncoder¶
StreamingMediaEncoder 是 Python 等效實現使用的類,並提供了相似的介面。當處理自定義 I/O 時,例如記憶體中的資料,可以使用 StreamingMediaEncoderCustomIO 類。
這兩個類定義了相同的方法,因此它們的用法也相同。
建構函式¶
StreamingMediaEncoder¶
-
class StreamingMediaEncoder¶
逐塊編碼和寫入音訊/影片流
-
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。
- 引數:
opaque –
write_packet和seek函式使用的自定義資料。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()¶
重新整理編碼器中的幀並將幀寫入目標位置。