Python 创建wav到mp3编码的输入和输出管道
我必须用管道将wavePython 创建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
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....