目录

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

    请参阅以下内容,了解 readseek 方法的预期签名和行为。

  • format (strNone, 可选) –

    覆盖输入格式,或指定源声音设备。 默认值:None(不覆盖且不使用设备输入)。

    该参数适用于两种不同的使用场景。

    1. 覆盖源格式。 当输入数据不包含标题时,此功能非常有用。

    2. 指定输入源设备。 这允许从硬件设备(如麦克风、摄像头和屏幕)或虚拟设备加载媒体流。

    注意

    此选项大致对应于 -f 选项中 ffmpeg 命令。 有关可能的值,请参阅 ffmpeg 文档。

    https://ffmpeg.org/ffmpeg-formats.html

    对于设备访问,可用值取决于硬件(AV 设备)和软件配置(ffmpeg 构建)。

    https://ffmpeg.org/ffmpeg-devices.html

  • option (dict of str to str, optional) –

    初始化格式上下文(打开源)时传递的自定义选项。

    您可以使用此参数在将输入传递给解码器之前更改其来源。

    默认值:None.

  • buffer_size (int) –

    内部缓冲区大小(以字节为单位)。仅当 src 为类文件对象时使用。

    Default: 4096.

Tutorials using StreamReader:
property num_src_streams

在提供的媒体源中找到的流数量。

Type

整数

property num_out_streams

由客户端代码配置的输出流数量。

Type

整数

property default_audio_stream

默认音频流的索引。如果没有音频流,则为 None

Type

Optional[int]

property default_video_stream

默认视频流的索引。如果没有视频流,则为 None

Type

Optional[int]

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

seek(timestamp: float)[source]

将流定位到指定时间戳 [秒]

Parameters

timestamp (float) – 目标时间(秒)。

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 (intNone, 可选) – 源音频流索引。 如果省略,则使用 default_audio_stream

  • decoder (strNone, 可选) –

    要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。

    要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。

    默认值:None.

  • decoder_option (dictNone可选) –

    传递给解码器的选项。 从字符串到字符串的映射。

    要列出解码器的选项,您可以使用 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".

  • sample_rate (intNone, 可选) – 如果提供,则对音频进行重采样。

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 (intNone, 可选) – 源视频流索引。 如果省略,则使用 default_video_stream

  • decoder (strNone, 可选) –

    要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。

    要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。

    默认值:None.

  • decoder_option (dictNone可选) –

    传递给解码器的选项。 从字符串到字符串的映射。

    要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。

    默认值:None.

  • hw_accel (strNone, 可选) –

    启用硬件加速。

    当视频在 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".

  • frame_rate (intNone, 可选) – 如果提供,则更改帧率。

  • width (intNone可选) – 如果提供,则更改图像宽度。单位:像素。

  • height (intNone, 可选) – 如果提供,则更改图像高度。单位:像素。

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 (intNone, 可选) – 源音频流索引。 如果省略,则使用 default_audio_stream

  • decoder (strNone, 可选) –

    要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。

    要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。

    默认值:None.

  • decoder_option (dictNone可选) –

    传递给解码器的选项。 从字符串到字符串的映射。

    要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。

    默认值:None.

  • filter_desc (strNone, 可选) – 过滤器描述。 可用过滤器列表可在以下位置找到: 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 (intNone, 可选) – 源视频流索引。 如果省略,则使用 default_video_stream

  • decoder (strNone, 可选) –

    要使用的解码器名称。 提供时,使用指定的解码器而不是默认解码器。

    要列出可用的解码器,您可以使用 ffmpeg -decoders 命令。

    默认值:None.

  • decoder_option (dictNone可选) –

    传递给解码器的选项。 从字符串到字符串的映射。

    要列出解码器的选项,您可以使用 ffmpeg -h decoder=<DECODER> 命令。

    默认值:None.

  • hw_accel (strNone, 可选) –

    启用硬件加速。

    当视频在 CUDA 硬件上解码时,例如 decode=”h264_cuvid”,将 CUDA 设备指示器传递给 hw_accel (即 hw_accel=”cuda:0”)会将生成的帧直接放置在指定的 CUDA 设备上。

    如果为 None,帧将被移动到 CPU 内存。 默认值:None

  • filter_desc (strNone, 可选) – 过滤器描述。 可用过滤器列表可在以下位置找到: https://ffmpeg.org/ffmpeg-filters.html 请注意,不支持复杂过滤器。

remove_stream(i: int)[source]

移除一个输出流。

Parameters

i (int) – 要移除的输出流的索引。

process_packet(timeout: Optional[float] = None, backoff: float = 10.0)int[source]

读取源媒体并处理一个数据包。

如果数据包读取成功,则数据包中的数据将被解码并传递给相应的输出流处理器。

如果数据包属于未连接到输出流的源流,则数据将被丢弃。

当数据源到达文件末尾(EOF)时,将触发所有输出流处理器进入排空模式。所有输出流处理器将刷新待处理的帧。

Parameters
  • timeout (floatNone, 可选) –

    超时时间(毫秒)。

    此参数会在因底层媒体资源暂时不可用而导致数据包处理失败时,更改重试行为。

    当使用麦克风等媒体设备时,可能会出现底层缓冲区尚未就绪的情况。 在这种情况下调用此函数会导致系统报告 EAGAIN (resource temporarily unavailable)

    • >=0: 持续重试直到给定时间过去。

    • 0<: 永远重试。

    • None:不重试并立即抛出异常。

    默认值:None.

    注意

    重试行为仅适用于资源不可用的情况。如果失败原因并非如此,则不会触发该行为。

  • backoff (float, 可选) –

    重试前等待的时间(毫秒)。

    此选项仅在 timeout 生效时有效。(而非 None

    timeout 生效时,此 backoff 控制函数在重试前应等待多长时间。默认值:10.0

Returns

0 数据包已被正确处理。调用方可以继续 调用此函数以缓冲更多帧。

1 流已达到文件末尾(EOF)。所有输出流处理器已刷新待处理的帧。调用方应停止调用此方法。

Return type

整数

process_all_packets()[source]

处理数据包,直到到达文件末尾(EOF)。

is_buffer_ready()bool[source]

如果所有输出流都至少填充了一个数据块,则返回 true。

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
Returns

生成器,用于逐个产出与客户端代码中定义的输出流相对应的数据块元组。 如果某个输出流已耗尽,则对应的张量块将被 None 替代。 当所有输出流均被耗尽时,该迭代器将停止运行。

Return type

Iterator[Tuple[Optional[torch.Tensor], ..]]

StreamReaderSourceStream

class torchaudio.io.StreamReaderSourceStream[source]

源流的元数据。当表示除 audiovideo 之外的媒体类型流时,使用此类。

当源流类型为 audiovideo 时,分别使用报告额外媒体特定属性的 SourceAudioStreamSourceVideoStream

media_type: str

流的类型。 可以是 audiovideodatasubtitleattachment 或空字符串。

注意

仅支持 audiovideo 流作为输出。

注意

静态图像,例如 PNG 和 JPEG 格式,报告为 video

codec: str

编解码器的简称。例如 "pcm_s16le""h264"

codec_long_name: str

编解码器的详细名称。

例如“PCM signed 16-bit little-endian”和“H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10”。

format: Optional[str]

媒体格式。例如 "s16""yuv420p"

常见的音频值包括;

  • "u8", "u8p": 无符号 8 位整数。

  • "s16", "s16p": 16 位有符号整数。

  • "s32", "s32p": 32 位有符号整数。

  • "flt", "fltp": 32位浮点数。

注意

p 在末尾表示格式为 planar。 通道在内存中是分组存储的,而不是交错排列的。

bit_rate: Optional[int]

流的比特率,单位为每秒比特数。 这是基于流的前几帧估算的值。 对于容器格式和可变比特率,该值可能为 0。

num_frames: Optional[int]

流中的帧数

bits_per_sample: Optional[int]

这是每个输出样本中的有效位数。 对于压缩格式,它可以为 0。

StreamReaderSourceAudioStream

class torchaudio.io.StreamReaderSourceAudioStream[source]

音频源流的元数据。

除了 StreamReaderSourceStream() 报告的属性外, 当源流为音频类型时,还会报告以下附加属性。

sample_rate: float

音频的采样率。

num_channels: int

通道数量。

StreamReaderSourceVideoStream

class torchaudio.io.StreamReaderSourceVideoStream[source]

视频源流的元数据。

除了 StreamReaderSourceStream() 报告的属性外, 当源流为音频类型时,还会报告以下附加属性。

width: int

视频帧的像素宽度。

height: int

视频帧的高度,单位为像素。

frame_rate: float

帧率。

StreamReaderOutputStream

class torchaudio.io.StreamReaderOutputStream(source_index: int, filter_description: str)[source]

OutputStream()

输出流已配置在 StreamReader

source_index: int

此输出流所连接的源流的索引。

filter_description: str

应用于源流的过滤器图描述。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源