将音频字节数组转换为 opus 编解码器

问题描述 投票:0回答:2

我有一个程序使用 PyAudio 从立体声混音器收听计算机的音频流并输出一个字节数组。我在 Internet 上找到了很多关于如何使用 wave 库将音频字节数组转换为 .wav 编解码器的信息。但是我需要在 opus 编解码器中保存一个字节数组,我想知道是否有开箱即用的 python 库或函数来实现这个功能?

python python-3.x wav pyaudio opus
2个回答
1
投票

我知道这可能与 ffmpeg 和 libopus 有关。您可以探索这两个库的一些 python 绑定,看看它是怎么回事。

ffmpeg-python 包 here 提供了 ffmpeg 的 python 绑定,而 opuslib 包here.

提供了 libopus 的 python 绑定

命令行

opusenc
可能被用于传输音频数据流:

$ opusenc

Usage: opusenc [options] input_file output_file.opus

Encode audio using Opus.
The input format can be Wave, AIFF, FLAC, Ogg/FLAC, or raw PCM.

0
投票

在互联网上稍作挖掘后,我找到了解决方案。有一个 pyogg 库将音频字节数组编码为 opus 编解码器。这是他们的文档:https://pyogg.readthedocs.io/en/latest/installation.html。但是,首先我通过 pip install pyogg 安装,但由于某些原因文档中的一些文件没有安装,所以我找到了他们项目的 git 并从那里下载了文件 - https://github。 com/TeamPyOgg/PyOgg/tree/master/pyogg。 下面是将音频字节数组转换为 ogg 编解码器的代码(代码取自文档):

filename = "result"

# Create a OpusBufferedEncoder
opus_buffered_encoder = pyogg.OpusBufferedEncoder()
opus_buffered_encoder.set_application("audio")
opus_buffered_encoder.set_sampling_frequency(48000)
opus_buffered_encoder.set_channels(2)
opus_buffered_encoder.set_frame_size(20)  # milliseconds

# Create an OggOpusWriter
output_filename = filename + ".ogg"
print("Writing OggOpus file to '{:s}'".format(output_filename))
ogg_opus_writer = pyogg.OggOpusWriter(
        output_filename,
        opus_buffered_encoder
)

# Encode the PCM data
ogg_opus_writer.write(
        memoryview(bytearray(b''.join(YOUR_AUDIO_BYTES_ARRAY)))
)

# We've finished writing the file
ogg_opus_writer.close()
© www.soinside.com 2019 - 2024. All rights reserved.