Python 创建wav到mp3编码的输入和输出管道

Python 创建wav到mp3编码的输入和输出管道,python,audio,ffmpeg,Python,Audio,Ffmpeg,我必须用管道将wavedata流传输到Python中的ffmpeg。我可以轻松地从输入mp3文件创建输出管道,如: process = ( ffmpeg .input(path) .output('pipe:', **output_kwargs) .run_async(pipe_stdout=True, pipe_stderr=True)) buffer, _ = pro

我必须用管道将wave
data
流传输到Python中的ffmpeg。我可以轻松地从输入
mp3
文件创建输出管道,如:

       process = (
            ffmpeg
            .input(path)
            .output('pipe:', **output_kwargs)
            .run_async(pipe_stdout=True, pipe_stderr=True))
        buffer, _ = process.communicate()
        # because of we need (n_channels, samples)
        waveform = np.frombuffer(buffer, dtype='<f4').reshape(-1, n_channels)
        if not waveform.dtype == np.dtype(dtype):
            waveform = waveform.astype(dtype)
过程中获取结果后,
缓冲区的输出
在此为空。通讯
,而
错误
为空

Unable to find a suitable output format for 'pipe:'\npipe:: Invalid argument\n"

我知道已经很久了。。但对于其他可能会遇到相同问题的人:如果您使用pipe stream来获取输出,那么您必须为ffmpeg提供一个适当的格式,以便它知道应该转换输出的格式,只需在
**output\u kwargs
中添加标记
'-f'
,例如
'-f mp3'
,就可以了

假设您想将音频转换为.mp3,$path是您的原始音频文件路径,然后修改
输出\u kwargs
,如下所示:

 process = (
        ffmpeg
        .input(path)
        .output('pipe:', **{'loglevel':'error', 'codec:a':libmp3lame, 'f':'mp3'})
        .run_async(pipe_stdout=True, pipe_stderr=True))
    buffer, _ = process.communicate()
    data_byte = io.BytesIO(buffer)
    fout = open(out_path,'wb')
    fout.writelines(data_byte)
    fout.close()
然后您的mp3文件位于
$out\u path

相关的“
subprocess.popen
”命令应该如下

import subprocess
my_process = subprocess.Popen(['ffmpeg','-i', path, '-codec:a', 'libmp3lame', '-f', 'mp3', 'pipe:1'], stdout=PIPE, stderr=PIPE)
buffer, _ = process.communicate()
etc....

你已经看过了吗?你想自己用ffmpeg实现吗?或者你还好吧。谢谢,我用的是
https://github.com/kkroening/ffmpeg-python
,所以应该很简单,但是如果将
输入
输出
都作为管道,则不会。感谢您花时间回答很久以前的问题;这肯定会有助于@CyrilCHAPON no-pro和sry的回复,因为我没有经常查看我的通知,
import subprocess
my_process = subprocess.Popen(['ffmpeg','-i', path, '-codec:a', 'libmp3lame', '-f', 'mp3', 'pipe:1'], stdout=PIPE, stderr=PIPE)
buffer, _ = process.communicate()
etc....