python - 如何从无尽的音频流中获取和划分音频

标签 python audio ffmpeg stream wav

首先,我有一个无尽的摄像头流,其中包括音频和视频。
如何在流式传输时根据 RTSP 流式传输的时间间隔获取分割的 .wav 文件。
I want to
我已经尝试了下面的代码,但在流结束之前我无法获取音频数据

command = ['ffmpeg.exe',
                   '-i', 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4',
                   '-f', 's16le',
                   '-acodec', 'libmp3lame',
                   '-ar', '44100',  
                   '-ac', '2', 
                   '-']
 
pipe = sp.Popen(command, stdout=sp.PIPE)

raw_audio = self.pipe.stdout.read()
print(raw_audio)

最佳答案

试试 -f segment 输出容器。就像是:

command = ['ffmpeg.exe',
    "-i", r"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4",
    '-vn', '-acodec', 'pcm_s16le', '-ar', '44100', '-ac', '2', 
    "-f", "segment", '-segment_time','3','out%03d.wav']
)
现在,如果您真正需要的是原始样本而不一定是 .wav 文件,您需要通过删除 '-acodec', 'libmp3lame' 来修复您的命令。选项并指定要读取的样本数:
# how to read a block of audio data from stdout
n = 44100 * 3 # # of samples (sampling rate * duration)
nbytes = n * 2 * 2 # (#samples * #ch  * 2 bytes/sample)
while True:
    raw_audio = np.frombuffer(self.pipe.stdout.read(nread),shape=(n,2), dtype=np.int16)

    ... # do your thing

关于python - 如何从无尽的音频流中获取和划分音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72044065/

相关文章:

python - 如何使用python创建新文件

python - 我怎样才能清理这个请求结果?

audio - 使用 VBS 或 WSH 的声音触发事件

python - Pandas 数据框根据嵌套 if 条件设置列值

python - 如何计算列表中值 block 的大小?

Python PyAudio,输出有点裂纹。也许是数学

ios - 在 MIKMIDI 中使用 soundfonts

bash - ffmpeg 不为 bash 中的文件名使用变量

python - 使用 python ffmpeg 修剪音频文件

ffmpeg - 如何正确地将 ffmpeg 链接到静态构建 "g++ -static"?