torchaudio.io¶
StreamReader¶
-
class
torchaudio.io.StreamReader(src: str, format: Optional[str] = None, option: Optional[Dict[str, str]] = None, buffer_size: int = 4096)[source]¶ 逐块获取并解码音频/视频流。
有关此类的详细用法,请参阅教程。
- Parameters
src (str 或 类文件对象) –
媒体源。 如果是字符串类型,则必须是 FFmpeg 能够处理的资源指示符。这包括文件路径、URL、设备标识符或过滤器表达式。支持的值取决于系统中找到的 FFmpeg。
如果是文件类对象,它必须支持 read 方法,其签名为 read(size: int) -> bytes。 此外,如果该文件类对象具有 seek 方法,则在解析媒体元数据时将使用该方法。这提高了编解码器检测的可靠性。seek 方法的签名必须是 seek(offset: int, whence: int) -> int。
请参阅以下内容,了解 read 和 seek 方法的预期签名和行为。
覆盖输入格式,或指定源声音设备。 默认值:
None(不覆盖且不使用设备输入)。该参数适用于两种不同的使用场景。
覆盖源格式。 当输入数据不包含标题时,此功能非常有用。
指定输入源设备。 这允许从硬件设备(如麦克风、摄像头和屏幕)或虚拟设备加载媒体流。
注意
此选项大致对应于
-f选项中ffmpeg命令。 有关可能的值,请参阅 ffmpeg 文档。https://ffmpeg.org/ffmpeg-formats.html
对于设备访问,可用值取决于硬件(AV 设备)和软件配置(ffmpeg 构建)。
option (dict of str to str, optional) –
初始化格式上下文(打开源)时传递的自定义选项。
您可以使用此参数在将输入传递给解码器之前更改其来源。
默认值:
None.buffer_size (int) –
内部缓冲区大小(以字节为单位)。仅当 src 为类文件对象时使用。
Default: 4096.
- Tutorials using
StreamReader:
-
get_src_stream_info(i: int) → torchaudio.io._stream_reader.StreamReaderSourceStream[source]¶ 获取源流的元数据
- Parameters
i (int) – 流索引。
- Returns
SourceStream
-
get_out_stream_info(i: int) → torchaudio.io._stream_reader.StreamReaderOutputStream[source]¶ 获取输出流的元数据
- Parameters
i (int) – 流索引。
- Returns
OutputStream
-
add_basic_audio_stream(frames_per_chunk: int, buffer_chunk_size: int = 3, stream_index: Optional[int] = None, decoder: Optional[str] = None, decoder_option: Optional[Dict[str, str]] = None, format: Optional[str] = 'fltp', sample_rate: Optional[int] = None)[source]¶ 添加输出音频流
- Parameters
frames_per_chunk (int) – 作为单个块返回的帧数。 如果源流在缓冲足够帧之前已耗尽, 则按原样返回该块。
buffer_chunk_size (int, 可选) –
内部缓冲区大小。 当缓冲的块数超过此数值时,旧帧将被丢弃。
Default:
3.stream_index (int 或 None, 可选) – 源音频流索引。 如果省略,则使用
default_audio_stream。要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。
要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。
默认值:
None.decoder_option (dict 或 None,可选) –
传递给解码器的选项。 从字符串到字符串的映射。
要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。
默认值:
None.format (str, 可选) –
输出样本格式(精度)。
如果为
None,则输出块的 dtype 对应于源音频的精度。否则,样本将被转换,输出数据类型将按以下方式更改。
"u8p": 输出是torch.uint8类型。"s16p": 输出是torch.int16类型。"s32p": 输出是torch.int32类型。"s64p": 输出是torch.int64类型。"fltp": 输出是torch.float32类型。"dblp": 输出是torch.float64类型。
默认值:
"fltp".
-
add_basic_video_stream(frames_per_chunk: int, buffer_chunk_size: int = 3, stream_index: Optional[int] = None, decoder: Optional[str] = None, decoder_option: Optional[Dict[str, str]] = None, hw_accel: Optional[str] = None, format: Optional[str] = 'rgb24', frame_rate: Optional[int] = None, width: Optional[int] = None, height: Optional[int] = None)[source]¶ 添加输出视频流
- Parameters
frames_per_chunk (int) – 作为单个块返回的帧数。 如果源流在缓冲足够帧之前已耗尽, 则按原样返回该块。
buffer_chunk_size (int, 可选) –
内部缓冲区大小。 当缓冲的块数超过此数值时,旧帧将被丢弃。
Default:
3.stream_index (int 或 None, 可选) – 源视频流索引。 如果省略,则使用
default_video_stream。要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。
要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。
默认值:
None.decoder_option (dict 或 None,可选) –
传递给解码器的选项。 从字符串到字符串的映射。
要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。
默认值:
None.启用硬件加速。
当视频在 CUDA 硬件上解码时,例如 decode=”h264_cuvid”,将 CUDA 设备指示器传递给 hw_accel (即 hw_accel=”cuda:0”)会将生成的帧直接放置在指定的 CUDA 设备上。
如果为 None,帧将被移动到 CPU 内存。 默认值:
None。format (str, 可选) –
更改图像通道的格式。有效值为,
"rgb24": 8位 * 3个通道 (红, 绿, 蓝)"bgr24": 8 位 * 3 通道(B, G, R)"yuv420p": 8 位 * 3 通道 (Y, U, V)"gray": 8 位 * 1 通道
默认值:
"rgb24".
-
add_audio_stream(frames_per_chunk: int, buffer_chunk_size: int = 3, stream_index: Optional[int] = None, decoder: Optional[str] = None, decoder_option: Optional[Dict[str, str]] = None, filter_desc: Optional[str] = None)[source]¶ 添加输出音频流
- Parameters
frames_per_chunk (int) – 作为单个块返回的帧数。 如果源流在缓冲足够帧之前已耗尽, 则按原样返回该块。
buffer_chunk_size (int, 可选) –
内部缓冲区大小。 当缓冲的块数超过此数值时,旧帧将被丢弃。
Default:
3.stream_index (int 或 None, 可选) – 源音频流索引。 如果省略,则使用
default_audio_stream。要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。
要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。
默认值:
None.decoder_option (dict 或 None,可选) –
传递给解码器的选项。 从字符串到字符串的映射。
要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。
默认值:
None.filter_desc (str 或 None, 可选) – 过滤器描述。 可用过滤器列表可在以下位置找到: https://ffmpeg.org/ffmpeg-filters.html 请注意,不支持复杂过滤器。
-
add_video_stream(frames_per_chunk: int, buffer_chunk_size: int = 3, stream_index: Optional[int] = None, decoder: Optional[str] = None, decoder_option: Optional[Dict[str, str]] = None, hw_accel: Optional[str] = None, filter_desc: Optional[str] = None)[source]¶ 添加输出视频流
- Parameters
frames_per_chunk (int) – 作为单个块返回的帧数。 如果源流在缓冲足够帧之前已耗尽, 则按原样返回该块。
buffer_chunk_size (int, 可选) –
内部缓冲区大小。 当缓冲的块数超过此数值时,旧帧将被丢弃。
Default:
3.stream_index (int 或 None, 可选) – 源视频流索引。 如果省略,则使用
default_video_stream。要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。
要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。
默认值:
None.decoder_option (dict 或 None,可选) –
传递给解码器的选项。 从字符串到字符串的映射。
要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。
默认值:
None.启用硬件加速。
当视频在 CUDA 硬件上解码时,例如 decode=”h264_cuvid”,将 CUDA 设备指示器传递给 hw_accel (即 hw_accel=”cuda:0”)会将生成的帧直接放置在指定的 CUDA 设备上。
如果为 None,帧将被移动到 CPU 内存。 默认值:
None。filter_desc (str 或 None, 可选) – 过滤器描述。 可用过滤器列表可在以下位置找到: https://ffmpeg.org/ffmpeg-filters.html 请注意,不支持复杂过滤器。
-
process_packet(timeout: Optional[float] = None, backoff: float = 10.0) → int[source]¶ 读取源媒体并处理一个数据包。
如果数据包读取成功,则数据包中的数据将被解码并传递给相应的输出流处理器。
如果数据包属于未连接到输出流的源流,则数据将被丢弃。
当数据源到达文件末尾(EOF)时,将触发所有输出流处理器进入排空模式。所有输出流处理器将刷新待处理的帧。
- Parameters
超时时间(毫秒)。
此参数会在因底层媒体资源暂时不可用而导致数据包处理失败时,更改重试行为。
当使用麦克风等媒体设备时,可能会出现底层缓冲区尚未就绪的情况。 在这种情况下调用此函数会导致系统报告 EAGAIN (resource temporarily unavailable)。
>=0: 持续重试直到给定时间过去。0<: 永远重试。None:不重试并立即抛出异常。
默认值:
None.注意
重试行为仅适用于资源不可用的情况。如果失败原因并非如此,则不会触发该行为。
backoff (float, 可选) –
重试前等待的时间(毫秒)。
此选项仅在 timeout 生效时有效。(而非
None)当 timeout 生效时,此 backoff 控制函数在重试前应等待多长时间。默认值:
10.0。
- Returns
0数据包已被正确处理。调用方可以继续 调用此函数以缓冲更多帧。1流已达到文件末尾(EOF)。所有输出流处理器已刷新待处理的帧。调用方应停止调用此方法。- Return type
-
pop_chunks() → Tuple[Optional[torch.Tensor]][source]¶ 从所有输出流缓冲区中弹出一个数据块。
- Returns
缓冲区内容。 如果缓冲区不包含任何帧,则返回 None。
- Return type
Tuple[Optional[Tensor]]
-
stream(timeout: Optional[float] = None, backoff: float = 10.0) → Iterator[Tuple[Optional[torch.Tensor], …]][source]¶ 返回一个生成输出张量的迭代器
- Parameters
timeout (float 或 None, 可选) – 参见
process_packet()。(默认值:None)backoff (float, optional) – 参见
process_packet()。(默认值:10.0)
- Returns
生成器,用于逐个产出与客户端代码中定义的输出流相对应的数据块元组。 如果某个输出流已耗尽,则对应的张量块将被
None替代。 当所有输出流均被耗尽时,该迭代器将停止运行。- Return type
Iterator[Tuple[Optional[torch.Tensor], ..]]
StreamReaderSourceStream¶
-
class
torchaudio.io.StreamReaderSourceStream[source]¶ 源流的元数据。当表示除 audio 或 video 之外的媒体类型流时,使用此类。
当源流类型为 audio 或 video 时,分别使用报告额外媒体特定属性的
SourceAudioStream和SourceVideoStream。-
media_type: str¶ 流的类型。 可以是 audio、video、data、subtitle、attachment 或空字符串。
注意
仅支持 audio 和 video 流作为输出。
注意
静态图像,例如 PNG 和 JPEG 格式,报告为 video。
-
codec_long_name: str¶ 编解码器的详细名称。
例如“PCM signed 16-bit little-endian”和“H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10”。
-