【问题标题】:Python conversion from wav to mp3 filePython 从 wav 到 mp3 文件的转换
【发布时间】:2023-01-12 17:58:47
【问题描述】:

如何在 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 的频率输入信号,同样的错误。

正在寻找另一种转换方式或修复方法。

【问题讨论】:

    标签: python-3.x mp3 wav audiosegment


    【解决方案1】:

    错误消息表明问题与输入音频文件的采样率有关。错误消息指出编码器不支持输入音频文件的采样率。

    一种解决方案是使用 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	ofmpeg.exe"
    audio = AudioSegment.from_wav("myfile.wav")
    audio.export("myfile.mp3", format="mp3")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2019-09-27
      • 2012-12-14
      • 2017-08-23
      相关资源
      最近更新 更多