pydub未正确编码文件

2024-06-02 06:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pydub以opus格式获取音频流并将其保存为wav。我目前使用的是一个文件而不是一个流,它不工作

我的代码:

myfile = open("Short_Test.opus", 'rb')
opus_audio_bytes = myfile.read()
myfile.close()
opus_data = BytesIO(opus_audio_bytes)
sound = AudioSegment.from_file(opus_data, codec="ogg")
print("Export now")
mywave_file = sound.export("mashup.wav","16k")

它确实创建了mashup.wav,但是创建得不正确。以下是pydub的日志输出:

subprocess.call(['ffmpeg', '-y', '-i', '-', '-acodec', 'pcm_s32le', '-vn', '-f', 'wav', '-'])

Export now

subprocess.call(['ffmpeg', '-y', '-f', 'wav', '-i', 'C:\\Users\\Geoff\\AppData\\Local\\Temp\\tmppjaomlf6', '-f', '16k', 'C:\\Users\\Geoff\\AppData\\Local\\Temp\\tmp3tserc9q'])
subprocess output: b'ffmpeg version git-2019-12-19-99f505d Copyright (c) 2000-2019 the FFmpeg developers'
subprocess output: b'  built with gcc 9.2.1 (GCC) 20191125'
subprocess output: b'  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf'
subprocess output: b'  libavutil      56. 36.101 / 56. 36.101'
subprocess output: b'  libavcodec     58. 65.100 / 58. 65.100'
subprocess output: b'  libavformat    58. 35.101 / 58. 35.101'
subprocess output: b'  libavdevice    58.  9.101 / 58.  9.101'
subprocess output: b'  libavfilter     7. 69.101 /  7. 69.101'
subprocess output: b'  libswscale      5.  6.100 /  5.  6.100'
subprocess output: b'  libswresample   3.  6.100 /  3.  6.100'
subprocess output: b'  libpostproc    55.  6.100 / 55.  6.100'
subprocess output: b'Guessed Channel Layout for Input Stream #0.0 : mono'
subprocess output: b"Input #0, wav, from 'C:\\Users\\Geoff\\AppData\\Local\\Temp\\tmppjaomlf6':"
subprocess output: b'  Duration: 00:00:06.90, bitrate: 1536 kb/s'
subprocess output: b'    Stream #0:0: Audio: pcm_s32le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s32, 1536 kb/s'
subprocess output: b"[NULL @ 0000021fd2900580] Requested output format '16k' is not a suitable output format"
subprocess output: b'C:\\Users\\Geoff\\AppData\\Local\\Temp\\tmp3tserc9q: Invalid argument'
Traceback (most recent call last):
  File "C:/Users/Geoff/Documents/Geoff-Microsemi(Other)/Smart-OR/Savant_V1/Cobalt/G_opus_Cobalt.py", line 176, in <module>
    mywave_file = sound.export("mashup.wav","16k")
  File "C:\Users\Geoff\AppData\Local\Programs\Python\Python37\lib\site-packages\pydub\audio_segment.py", line 877, in export
    p.returncode, conversion_command, p_err))
pydub.exceptions.CouldntEncodeError: Encoding failed. ffmpeg/avlib returned error code: 1

命令:['ffmpeg','y','f','wav','i','C:\Users\Geoff\AppData\Local\Temp\tmppjaomlf6','f','16k','C:\Users\Geoff\AppData\Local\Temp\tmp3tserc9q']

从ffmpeg/avlib输出:

b"ffmpeg version git-2019-12-19-99f505d Copyright (c) 2000-2019 the FFmpeg developers\r\n  built with gcc 9.2.1 (GCC) 20191125\r\n  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf\r\n  libavutil      56. 36.101 / 56. 36.101\r\n  libavcodec     58. 65.100 / 58. 65.100\r\n  libavformat    58. 35.101 / 58. 35.101\r\n  libavdevice    58.  9.101 / 58.  9.101\r\n  libavfilter     7. 69.101 /  7. 69.101\r\n  libswscale      5.  6.100 /  5.  6.100\r\n  libswresample   3.  6.100 /  3.  6.100\r\n  libpostproc    55.  6.100 / 55.  6.100\r\nGuessed Channel Layout for Input Stream #0.0 : mono\r\nInput #0, wav, from 'C:\\Users\\Geoff\\AppData\\Local\\Temp\\tmppjaomlf6':\r\n  Duration: 00:00:06.90, bitrate: 1536 kb/s\r\n    Stream #0:0: Audio: pcm_s32le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s32, 1536 kb/s\r\n[NULL @ 0000021fd2900580] Requested output format '16k' is not a suitable output format\r\nC:\\Users\\Geoff\\AppData\\Local\\Temp\\tmp3tserc9q: Invalid argument\r\n"

我不明白为什么它不能工作,因为命令行上的以下ffmpeg命令可以工作,所以我确信这是我在pyusb中的参数:

ffmpeg -i Short_Test.opus -b:a 16000 mashup.wav

有什么办法解决我的问题吗


Tags: outputenablelocalusersappdatatempffmpegsubprocess