如何将音频文件内容嵌入.py文件(如Base64编码)解决exe跨机播放问题?
打包exe后音频路径问题的解决方案:Base64嵌入音频
完全可以通过Base64编码将音频内容嵌入Python代码中,彻底解决打包后跨机器的路径问题,具体实现步骤如下:
1. 将音频文件转为Base64编码字符串
写一个临时脚本把你的mysound.mp4转换成Base64字符串并保存为单独的Python模块:
import base64 # 读取音频文件并编码 with open("mysound.mp4", "rb") as audio_file: encoded_audio = base64.b64encode(audio_file.read()).decode("utf-8") # 保存为可导入的模块 with open("audio_data.py", "w") as f: f.write(f"EMBEDDED_AUDIO = '{encoded_audio}'")
运行这个脚本后,会生成audio_data.py文件,里面存储了音频的Base64编码字符串。
2. 修改主脚本,播放嵌入的音频
因为playsound库需要读取文件路径(无法直接解码Base64字符串播放),所以我们需要把解码后的音频写入临时文件,播放完成后再删除临时文件:
import base64 import tempfile import os from playsound import playsound from audio_data import EMBEDDED_AUDIO def play_audio(): # 解码Base64字符串为音频字节 audio_bytes = base64.b64decode(EMBEDDED_AUDIO) # 创建临时音频文件(避免路径问题) with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_file: temp_file.write(audio_bytes) temp_path = temp_file.name try: # 播放临时文件 playsound(temp_path) finally: # 播放完成后清理临时文件 os.unlink(temp_path) # 调用播放函数 play_audio()
3. 打包为exe
使用PyInstaller打包时,直接打包你的主脚本即可,不需要额外指定音频文件(因为音频已经嵌入在audio_data.py中,会被一起打包):
pyinstaller --onefile your_main_script.py
注意事项
- 建议使用
playsound==1.2.2版本,这个版本在Windows上的兼容性更好,避免播放失败的问题。 - 临时文件会自动在播放完成后删除,不会留下垃圾文件。
内容的提问来源于stack exchange,提问作者Meme410
相关产品推荐
相关产品推荐

