簡體   English   中英

如何使用python將base64解碼為wav格式?

[英]How to decode base64 to wav format using python?

我將錄音保存在服務器上,格式為 base64,webm 格式,我想用 python 將它們解碼為 wav 文件。 我嘗試了從此處發現的類似問題中提出的兩種建議方法: How to decode base64 String directly to binary audio format 但是我對這兩個建議都面臨不同的問題:

使用 file.write 的版本生成了一個 wav 文件,我可以用 VLC 播放器播放它,其中包含預期的內容。 但是,當我嘗試使用 matlab 或 python 讀取它時,我收到一條錯誤消息,提示“未知格式”或“缺少重復段”。

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)

關於如何解決這個問題的任何想法? 文件本身沒問題。 使用在線轉換器轉換它有效。

如果有人在某個時候遇到同樣的問題,這里是對我有用的解決方案:以下代碼從 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 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM