Python转换从wav到mp3文件

mbjcgjjk  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(240)

如何在Python中将wav文件转换为mp3文件?我找到的唯一答案是使用“pydub”,但它对我根本不起作用:

from pydub import AudioSegment
AudioSegment.from_wav("myfile.wav").export("myfile.mp3", format="mp3")

错误结果:

CouldntEncodeError: Encoding failed. ffmpeg/avlib returned error code: 1

Command:['ffmpeg', '-y', '-f', 'wav', '-i', 'C:\\Users\\user\\AppData\\Local\\Temp\\tmp4bj663tf', '-f', 'mp3', 
'C:\\Users\\user\\AppData\\Local\\Temp\\tmp0kadz5q2']

Output from ffmpeg/avlib:

ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.1 (GCC) 20200726
  configuration: --disable-static --enable-shared --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-libsrt --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-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'C:\Users\user\AppData\Local\Temp\tmp4bj663tf':
  Duration: 00:49:30.40, bitrate: 800 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 50000 Hz, mono, s16, 800 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> mp3 (mp3_mf))
Press [q] to stop, [?] for help
[mp3_mf @ 00000217000ebdc0] MFT name: 'MP3 Encoder ACM Wrapper MFT'
[mp3_mf @ 00000217000ebdc0] unsupported input sample rate set
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

文件路径是正确的(否则我有一个不同的错误),我已经尝试了频率从50k到5k的输入信号,同样的错误。
正在搜索另一种转换方法或修复此问题。

fjaof16o

fjaof16o1#

错误消息表明此问题与输入音频文件的采样率有关。错误消息指出编码器不支持输入音频文件的采样率。
一种解决方案是使用pydub中的set_frame_rate函数,它可以在将音频文件导出到mp3之前更改音频文件的采样率。

from pydub import AudioSegment

audio = AudioSegment.from_wav("myfile.wav")
audio = audio.set_frame_rate(44100)
audio.export("myfile.mp3", format="mp3")

也有可能是pydub使用的ffmpeg库不支持wav文件的采样率,你可以尝试在创建AudioSegment对象时显式指定ffmpeg路径,看看是否可以解决这个问题:

from pydub import AudioSegment
AudioSegment.converter = r"path\to\ffmpeg.exe"
audio = AudioSegment.from_wav("myfile.wav")
audio.export("myfile.mp3", format="mp3")

如果以上解决方案都不起作用,您可以尝试其他库(如moviepy或soundfile)来执行转换,或者直接使用命令行工具(如ffmpeg)。

相关问题