【问题标题】:How to decode base64 to wav format using python?如何使用 python 将 base64 解码为 wav 格式?
【发布时间】:2020-10-07 15:22:18
【问题描述】:

我在服务器上保存了 base64、webm 格式的录音,我想用 python 将它们解码成 wav 文件。我从这里找到的一个类似问题尝试了两种建议的方法:How to decode base64 String directly to binary audio format。但我面临两种建议的不同问题:

使用 file.write 的版本生成了一个 wav 文件,我可以使用 VLC 播放器播放该文件,其中包含预期的内容。但是,当我尝试使用 matlab 或 python 读取时收到一条错误消息,提示“未知格式”或“缺少 riff”。

fin = open(dirName + file, "r") 
b64_str = fin.read()
fin.close()
# decode base64 string to original binary sound object
decodedData = base64.b64decode(b64_str)

webmfile = (outdir + file.split('.')[0] + ".webm")
wavfile = (outdir + file.split('.')[0] + ".wav")

with open(webmfile , 'wb') as wm:
    wm.write(decodedData)
with open(webmfile, 'rb') as wm:
    webmdata = pcm.read()
with open(wavfile, 'wb') as file:
        file.write(webmdata)

使用 writeframes 并设置参数的版本生成了一个我可以用 matlab 或 python 读取的文件,但这个文件不包含预期的内容并且比预期的要短。

with wave.open(wavfile, 'wb') as wav:
        wav.setparams((1, 2, 48000, 0, 'NONE', 'NONE'))
        wav.writeframes(webmdata)

关于如何解决这个问题的任何想法?文件本身很好。使用在线转换器进行转换。

【问题讨论】:

    标签: python base64 decode wav webm


    【解决方案1】:

    如果有人在某个时候遇到同样的问题,以下是对我有用的解决方案: 以下代码从 base64 str 创建一个 webm 文件:

    import base64
    
    decodedData = base64.b64decode(b64_str)
    webmfile = (outdir + file.split('.')[0] + ".webm")
    with open(webmfile, 'wb') as file:
           file.write(decodedData)
    

    对于我使用 ffmpy 的转换:

    from ffmpy import FFmpeg
    
    ff = FFmpeg(
            executable = 'C:/Program Files/ffmpeg-2020/bin/ffmpeg.exe',
            inputs={file:None},
            outputs = {outfile:'-c:a pcm_f32le'})
    ff.cmd
    ff.run()
    

    在这两个步骤之后,我能够使用 matlab 或任何其他程序读取生成的 wav 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多