You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从Power Apps导出的Base64解码音频无法转格式问题求助

问题分析与解决方案

看起来你的核心问题出在Base64数据的读取处理文件格式匹配性上,我们一步步拆解解决:

1. 先修正Base64数据的读取逻辑

你的代码用readlines()读取文本文件后只取第一行,这很容易踩坑:

  • 如果binaryData.txt里的Base64字符串是多行存储的,readlines()会把它拆分成多个列表元素,只取第一行直接截断了完整数据
  • 即使是单行存储,readlines()返回的行末尾可能带有换行符\n,这会导致解码后的数据损坏

修改读取逻辑,确保获取完整、干净的Base64字符串:

import os
import base64

mainDir = os.path.dirname(__file__)
binaryFileTXT = os.path.join(mainDir, 'binaryData.txt')
temp_file = os.path.join(mainDir, 'temp_audio.bin')

# 读取全部内容并去除首尾空白(包括换行、空格等多余字符)
with open(binaryFileTXT, 'r', encoding='utf-8') as f:
    audio_data = f.read().strip()

# 检查是否带data URI前缀(比如data:audio/ogg;base64,...),有则去除前缀
if audio_data.startswith('data:'):
    audio_data = audio_data.split(',')[1]

# 解码后先保存为临时二进制文件(暂不指定音频后缀,避免格式误导)
with open(temp_file, "wb") as f:
    f.write(base64.b64decode(audio_data))

2. 确定解码后音频的真实格式

用ffmpeg配套的ffprobe工具查看临时文件的真实格式,在命令行执行:

ffprobe temp_audio.bin

输出里会显示类似Input #0, webm, from 'temp_audio.bin'的信息,这就是音频的实际格式(比如WebM、OGG等)。

3. 用正确格式进行转换

知道真实格式后,直接用ffmpeg指定输入格式转换为WAV即可:

# 假设ffprobe检测出是webm格式,执行以下命令转换
ffmpeg -i temp_audio.bin -acodec pcm_s16le -ar 44100 output.wav

或者先给临时文件重命名为对应后缀(比如temp_audio.webm),再转换:

mv temp_audio.bin temp_audio.webm
ffmpeg -i temp_audio.webm output.wav

为什么在线工具可以正常转换?

在线工具通常会自动处理Base64字符串的换行、前缀等细节,还会自动检测解码后数据的真实格式;而你的代码没处理这些情况,导致解码后的音频虽然能被播放器容错播放,但ffmpeg这类严格的格式转换工具无法正确识别。

内容的提问来源于stack exchange,提问作者Julio S.

火山引擎 最新活动